From: tho Date: Mon, 30 Aug 2010 14:50:46 +0000 (+0000) Subject: Packets: added Packet::as<>(nothrow); fixed documentation X-Git-Url: http://g0dil.de/git?a=commitdiff_plain;h=d00efd99445ae9cef71068f11788fbd2f4412997;p=senf.git Packets: added Packet::as<>(nothrow); fixed documentation Scheduler: fixed assert include in FIFORunner git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@1703 270642c3-0616-0410-b53a-bc976706d245 --- diff --git a/senf/PPI/Connectors.cci b/senf/PPI/Connectors.cci index 2b21add..d324492 100644 --- a/senf/PPI/Connectors.cci +++ b/senf/PPI/Connectors.cci @@ -374,7 +374,6 @@ prefix_ senf::ppi::connector::GenericActiveInput::GenericActiveInput() prefix_ senf::ppi::connector::GenericPassiveInput & senf::ppi::connector::GenericActiveOutput::peer() const { -// return dynamic_cast(Connector::peer()); SENF_ASSERT(peer_, "senf::ppi::connect() call missing"); return *peer_; } diff --git a/senf/PPI/Connectors.hh b/senf/PPI/Connectors.hh index 33e651f..6b4cdef 100644 --- a/senf/PPI/Connectors.hh +++ b/senf/PPI/Connectors.hh @@ -280,7 +280,6 @@ namespace connector { bool remoteThrottled_; bool nativeThrottled_; - ActiveConnector * myPeer_; typedef std::vector Routes; Routes routes_; diff --git a/senf/Packets/Packet.cti b/senf/Packets/Packet.cti index bea3eaa..0241419 100644 --- a/senf/Packets/Packet.cti +++ b/senf/Packets/Packet.cti @@ -67,6 +67,14 @@ prefix_ OtherPacket senf::Packet::as() } template +prefix_ OtherPacket senf::Packet::as(NoThrow_t) + const +{ + SENF_ASSERT( is(), "Bad cast, called packet::as(nothrow) with wrong PacketType"); + return OtherPacket(ptr()->as()); +} + +template prefix_ OtherPacket senf::Packet::next() const { @@ -103,7 +111,8 @@ prefix_ OtherPacket senf::Packet::prev(NoThrow_t) const { Packet p (prev(nothrow)); - return p && p.is() ? p.as() : OtherPacket(); + return p && p.is() ? + OtherPacket(p.ptr()->as()) : OtherPacket(); } template diff --git a/senf/Packets/Packet.hh b/senf/Packets/Packet.hh index 43c88d2..7d31942 100644 --- a/senf/Packets/Packet.hh +++ b/senf/Packets/Packet.hh @@ -197,10 +197,9 @@ namespace senf { exists */ template OtherPacket next(NoThrow_t) const; ///< Get next packet in chain and cast to \a OtherPacket - /**< \throws std::bad_cast if the next() packet is not of - type \a OtherPacket - \returns in - valid() packet if no next packet - exists */ + /**< \returns in - valid() packet if no next packet + exists or if next() packet is not of + type \a OtherPacket */ template OtherPacket find() const; ///< Search chain forward for packet of type \a OtherPacket /**< The search will start with the current packet. @@ -226,10 +225,9 @@ namespace senf { packet exists */ template OtherPacket prev(NoThrow_t) const; ///< Get previous packet in chain and cast to \a OtherPacket - /**< \throws std::bad_cast, if the previous packet is not of - type \a OtherPacket - \returns in - valid() packet if no previous packet - exists */ + /**< \returns in - valid() packet if no previous packet + exists or if the previous packet is not of + type \a OtherPacket */ template OtherPacket rfind() const; ///< Search chain backwards for packet of type \a OtherPacket /**< The search will start with the current packet. @@ -290,6 +288,15 @@ namespace senf { before. \throws std::bad_cast if the current packet is not of type \a OtherPacket */ + template OtherPacket as(NoThrow_t) const; + ///< Cast current packet to the given type + /**< This operations returns a handle to the same packet + header/interpreter however upcast to the given + ConcretePacket type which have been instantiated + before. + \warning You must make absolutely sure that the packet + is of the given type. If not, calling this member + crashes your program in a unkindly way. */ Packet append(Packet const & packet) const; ///< Append the given packet to \c this packet /**< This operation will replace the payload section of \c diff --git a/senf/Scheduler/FIFORunner.cc b/senf/Scheduler/FIFORunner.cc index 4669c4d..94009c3 100644 --- a/senf/Scheduler/FIFORunner.cc +++ b/senf/Scheduler/FIFORunner.cc @@ -29,6 +29,7 @@ // Custom includes #include #include +#include #include #include #ifdef SENF_DEBUG @@ -112,7 +113,7 @@ prefix_ void senf::scheduler::detail::FIFORunner::stopWatchdog() // At the moment, the FIFORunner is not very efficient with many non-runnable tasks since the // complete list of tasks is traversed on each run(). // -// To optimize this, we woould need a way to find the relative ordering of two tasks in O(1) (at the +// To optimize this, we would need a way to find the relative ordering of two tasks in O(1) (at the // moment, this is an O(N) operation by traversing the list). // // One idea is, to give each task an 'order' value. Whenever a task is added at the end, it's order