#include "PacketData.hh"
#define prefix_ inline
-///////////////////////////////cti.p///////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// senf::PacketParserBase
template <class Parser>
return Parser(arg, boost::next(i(),n), state());
}
-///////////////////////////////////////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
// namespace members
template <class Parser>
#ifndef DOXYGEN
template <class Parser, class Value>
-prefix_ typename boost::enable_if_c <
- boost::is_base_of<senf::PacketParserBase, Parser>::value
+prefix_ typename boost::enable_if_c <
+ boost::is_base_of<senf::PacketParserBase, Parser>::value
&& ! boost::is_base_of<senf::PacketParserBase, Value>::value,
Parser >::type senf::operator<<(Parser target, Value const & value)
{
#ifndef DOXYGEN
template <class Parser, class Value>
-prefix_ typename boost::enable_if_c <
- boost::is_base_of<senf::PacketParserBase, Parser>::value
+prefix_ typename boost::enable_if_c <
+ boost::is_base_of<senf::PacketParserBase, Parser>::value
&& ! boost::is_base_of<senf::PacketParserBase, Value>::value,
Parser >::type senf::operator<<(Parser target, boost::optional<Value> const & value)
{
template <class Parser>
prefix_ senf::PacketParserBase::size_type
-senf::detail::packetParserSize(Parser p, int, senf::mpl::take_uint<Parser::fixed_bytes> *)
+senf::detail::packetParserSize(Parser p, int, senf::mpl::take_uint<Parser::init_bytes> *)
{
- return Parser::fixed_bytes;
+ return p.bytes();
}
-///////////////////////////////cti.e///////////////////////////////////////
+
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
+// senf::ValueParserBase<Parser, ValueType, FixedBytes>
+
+template <class Parser, typename ValueType, senf::PacketParserBase::size_type FixedBytes>
+prefix_ senf::ValueParserBase<Parser, ValueType, FixedBytes>::ValueParserBase(data_iterator i, state_type s)
+ : PacketParserBase(i, s, FixedBytes)
+{ }
+
+template <class Parser, typename ValueType, senf::PacketParserBase::size_type FixedBytes>
+prefix_ senf::ValueParserBase<Parser, ValueType, FixedBytes>::operator value_type ()
+ const
+{
+ return static_cast<Parser const *>(this)->value();
+}
+
+template <class Parser, typename ValueType, senf::PacketParserBase::size_type FixedBytes>
+prefix_ senf::PacketParserBase::byte &
+senf::ValueParserBase<Parser, ValueType, FixedBytes>::operator[](size_type index)
+{
+ return *boost::next(i(), index);
+}
+
+template <class Parser, typename ValueType, senf::PacketParserBase::size_type FixedBytes>
+prefix_ Parser const & senf::ValueParserBase<Parser, ValueType, FixedBytes>::operator= (value_type const & other)
+{
+ static_cast<Parser*>(this)->value(other);
+ return *static_cast<Parser const *>(this);
+}
+
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
#undef prefix_
\f