X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2FPacketParser.cti;h=48f23340a8722a0283d2e169b11d21bdc67afba4;hb=961cf85a6abf2b5f0a7958bbfcd8f72e7b32721b;hp=abbc3d7dbbad9ed6ea94db1aa8ba6512d61ab543;hpb=26610f603ebdd465307b9621f532c1fe19fd5571;p=senf.git diff --git a/senf/Packets/PacketParser.cti b/senf/Packets/PacketParser.cti index abbc3d7..48f2334 100644 --- a/senf/Packets/PacketParser.cti +++ b/senf/Packets/PacketParser.cti @@ -74,8 +74,8 @@ prefix_ senf::PacketParserBase::size_type senf::bytes(Parser p) #ifndef DOXYGEN template -prefix_ typename boost::enable_if_c < - boost::is_base_of::value +prefix_ typename boost::enable_if_c < + boost::is_base_of::value && ! boost::is_base_of::value, Parser >::type senf::operator<<(Parser target, Value const & value) { @@ -90,8 +90,8 @@ prefix_ Parser senf::operator<<(Parser target, Value const & value) #ifndef DOXYGEN template -prefix_ typename boost::enable_if_c < - boost::is_base_of::value +prefix_ typename boost::enable_if_c < + boost::is_base_of::value && ! boost::is_base_of::value, Parser >::type senf::operator<<(Parser target, boost::optional const & value) { @@ -108,9 +108,39 @@ prefix_ Parser senf::operator<<(Parser target, Value const & value) template prefix_ senf::PacketParserBase::size_type -senf::detail::packetParserSize(Parser p, int, senf::mpl::take_uint *) +senf::detail::packetParserSize(Parser p, int, senf::mpl::take_uint *) { - return Parser::fixed_bytes; + return p.bytes(); +} + + +/////////////////////////////////////////////////////////////////////////// +// senf::ValueParserBase + +template +prefix_ senf::ValueParserBase::ValueParserBase(data_iterator i, state_type s) + : PacketParserBase(i, s, FixedBytes) +{ } + +template +prefix_ senf::ValueParserBase::operator value_type () + const +{ + return static_cast(this)->value(); +} + +template +prefix_ senf::PacketParserBase::byte & +senf::ValueParserBase::operator[](size_type index) +{ + return *boost::next(i(), index); +} + +template +prefix_ Parser const & senf::ValueParserBase::operator= (value_type const & other) +{ + static_cast(this)->value(other); + return *static_cast(this); } ///////////////////////////////cti.e///////////////////////////////////////