X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FPacket.cti;h=e16f88e8caf99557f572ad33cddc2497baff208c;hb=d2459b6c8249291588fd3d0d125ed3d38e003b55;hp=18443fa7a73a891df00c479870fc000731ea282e;hpb=ee64a24a7ed1dfcdb7a12f14d7df3b043e564a30;p=senf.git diff --git a/Packets/Packet.cti b/Packets/Packet.cti index 18443fa..e16f88e 100644 --- a/Packets/Packet.cti +++ b/Packets/Packet.cti @@ -1,8 +1,8 @@ // $Id$ // -// Copyright (C) 2007 -// Fraunhofer Institute for Open Communication Systems (FOKUS) -// Competence Center NETwork research (NET), St. Augustin, GERMANY +// Copyright (C) 2007 +// Fraunhofer Institute for Open Communication Systems (FOKUS) +// Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund // // This program is free software; you can redistribute it and/or modify @@ -26,6 +26,7 @@ //#include "Packet.ih" // Custom includes +#include "../Utils/Exception.hh" #define prefix_ inline ///////////////////////////////cti.p/////////////////////////////////////// @@ -61,7 +62,7 @@ prefix_ OtherPacket senf::Packet::as() const { if (!is()) - throw std::bad_cast(); + throw WrapException(std::bad_cast()); return OtherPacket(ptr()->as()); } @@ -73,6 +74,23 @@ prefix_ OtherPacket senf::Packet::next() } template +prefix_ OtherPacket senf::Packet::next(NoThrow_t) + const +{ + Packet p (next(nothrow)); + return p && p.is() ? p.as() : OtherPacket(); +} + +template +prefix_ OtherPacket senf::Packet::find() + const +{ + OtherPacket p (find(nothrow)); + if (!p) throw InvalidPacketChainException(); + return p; +} + +template prefix_ OtherPacket senf::Packet::prev() const { @@ -80,6 +98,23 @@ prefix_ OtherPacket senf::Packet::prev() } template +prefix_ OtherPacket senf::Packet::prev(NoThrow_t) + const +{ + Packet p (prev(nothrow)); + return p && p.is() ? p.as() : OtherPacket(); +} + +template +prefix_ OtherPacket senf::Packet::rfind() + const +{ + OtherPacket p (rfind(nothrow)); + if (!p) throw InvalidPacketChainException(); + return p; +} + +template prefix_ OtherPacket senf::Packet::last() const { @@ -120,9 +155,9 @@ senf::ConcretePacket::create() template prefix_ senf::ConcretePacket -senf::ConcretePacket::create(NoInit_t) +senf::ConcretePacket::create(senf::NoInit_t) { - return ConcretePacket(interpreter::create(interpreter::noinit)); + return ConcretePacket(interpreter::create(senf::noinit)); } template @@ -134,15 +169,16 @@ senf::ConcretePacket::create(size_type size) template prefix_ senf::ConcretePacket -senf::ConcretePacket::create(size_type size, NoInit_t) +senf::ConcretePacket::create(size_type size, senf::NoInit_t) { - return ConcretePacket(interpreter::create(size,interpreter::noinit)); + return ConcretePacket(interpreter::create(size,senf::noinit)); } template template -prefix_ senf::ConcretePacket -senf::ConcretePacket::create(ForwardReadableRange const & range) +prefix_ senf::ConcretePacket senf::ConcretePacket:: +create(ForwardReadableRange const & range, + typename boost::disable_if< boost::is_integral >::type *) { return ConcretePacket(interpreter::create(range)); } @@ -158,9 +194,9 @@ senf::ConcretePacket::createAfter(Packet packet) template prefix_ senf::ConcretePacket -senf::ConcretePacket::createAfter(Packet packet, NoInit_t) +senf::ConcretePacket::createAfter(Packet packet, senf::NoInit_t) { - return ConcretePacket(interpreter::createAfter(packet.ptr(),interpreter::noinit)); + return ConcretePacket(interpreter::createAfter(packet.ptr(),senf::noinit)); } template @@ -172,15 +208,16 @@ senf::ConcretePacket::createAfter(Packet packet, size_type size) template prefix_ senf::ConcretePacket -senf::ConcretePacket::createAfter(Packet packet, size_type size, NoInit_t) +senf::ConcretePacket::createAfter(Packet packet, size_type size, senf::NoInit_t) { - return ConcretePacket(interpreter::createAfter(packet.ptr(), size, interpreter::noinit)); + return ConcretePacket(interpreter::createAfter(packet.ptr(), size, senf::noinit)); } template template -prefix_ senf::ConcretePacket -senf::ConcretePacket::createAfter(Packet packet, ForwardReadableRange const & range) +prefix_ senf::ConcretePacket senf::ConcretePacket:: +createAfter(Packet packet, ForwardReadableRange const & range, + typename boost::disable_if< boost::is_integral >::type *) { return ConcretePacket(interpreter::createAfter(packet.ptr(), range)); } @@ -196,9 +233,9 @@ senf::ConcretePacket::createBefore(Packet packet) template prefix_ senf::ConcretePacket -senf::ConcretePacket::createBefore(Packet packet, NoInit_t) +senf::ConcretePacket::createBefore(Packet packet, senf::NoInit_t) { - return ConcretePacket(interpreter::createBefore(packet.ptr(), interpreter::noinit)); + return ConcretePacket(interpreter::createBefore(packet.ptr(), senf::noinit)); } // Create a clone of the current packet @@ -214,13 +251,21 @@ senf::ConcretePacket::clone() // Field access template -prefix_ typename senf::ConcretePacket::type::parser * +prefix_ typename senf::ConcretePacket::Parser * senf::ConcretePacket::operator->() const { return ptr()->fields_p(); } +template +prefix_ typename senf::ConcretePacket::Parser +senf::ConcretePacket::parser() + const +{ + return ptr()->fields(); +} + // private members template