# // Copyright (C) 2007
-# // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
-# // Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
+# // Fraunhofer Institute for Open Communication Systems (FOKUS)
+# // Competence Center NETwork research (NET), St. Augustin, GERMANY
# // Stefan Bund <g0dil@berlios.de>
# //
# // This program is free software; you can redistribute it and/or modify
# define SENF_PARSER_FIELD_RO_fix(name, type) SENF_PARSER_FIELD_I(name, type, fix, ro, public)
#
# define SENF_PARSER_P_FIELD_var(name, type) SENF_PARSER_FIELD_I(name, type, var, rw, private)
-# define SENF_PARSER_P_FIELD_RO_var(name, type) SENF_PARSER_FIELD_I(name, type, var, ro, private)
# define SENF_PARSER_P_FIELD_fix(name, type) SENF_PARSER_FIELD_I(name, type, fix, rw, private)
-# define SENF_PARSER_P_FIELD_RO_fix(name, type) SENF_PARSER_FIELD_I(name, type, fix, ro, private)
#
# define SENF_PARSER_FIELD_I(name, type, ofstype, rwtype, access) \
access: \
# ////////////////////////////////////////
# // SENF_PARSER_I_FIELD_INIT_*
#
-# define SENF_PARSER_I_FIELD_INIT_rw(name, type, access) \
+# define SENF_PARSER_I_FIELD_INIT_rw(name, type, access) \
private: \
void init_chain(senf::mpl::rv<BOOST_PP_CAT(name,_index)>*) const { \
init_chain(static_cast<senf::mpl::rv<BOOST_PP_CAT(name,_index)-1>*>(0)); \
} \
access:
#
-# define SENF_PARSER_I_FIELD_INIT_ro(name, type, access) \
+# define SENF_PARSER_I_FIELD_INIT_ro(name, type, access) \
private: \
void init_chain(senf::mpl::rv<BOOST_PP_CAT(name,_index)>*) const { \
init_chain(static_cast<senf::mpl::rv<BOOST_PP_CAT(name,_index)-1>*>(0)); \
# define SENF_PARSER_I_FIELD_OFS_var(name, type, access) \
size_type BOOST_PP_CAT(name,_offset)() const { \
return field_offset_(static_cast<senf::mpl::rv<BOOST_PP_CAT(name,_index)-1>*>(0)); \
- }
+ } \
+ static size_type const BOOST_PP_CAT(name, _init_bytes) = SENF_MPL_SLOT_GET(init_bytes);
#
# define SENF_PARSER_I_FIELD_OFS_fix(name, type, access) \
static size_type const BOOST_PP_CAT(name, _offset) = SENF_MPL_SLOT_GET(offset);
size_type BOOST_PP_CAT(name, _next_offset)() const { \
return BOOST_PP_CAT(name,_offset)() + size; \
} \
- static size_type const BOOST_PP_CAT(name, _init_bytes) = SENF_MPL_SLOT_GET(init_bytes); \
static size_type const BOOST_PP_CAT(name, _next_init_bytes) = \
BOOST_PP_CAT(name, _init_bytes) + isize; \
private: \
}
#
# define SENF_PARSER_I_FIELD_VAL_ro(name, type, access) \
+ private: \
+ BOOST_PP_CAT(name, _t) BOOST_PP_CAT(name, _)() const { \
+ return parse<type>( SENF_PARSER_OFFSET(name) ); \
+ } \
+ access: \
BOOST_PP_CAT(name, _t)::value_type name() const { \
- return parse<type>( SENF_PARSER_OFFSET(name) ).value(); \
+ return BOOST_PP_CAT(name,_)(); \
}
#
# ///////////////////////////////////////////////////////////////////////////
# // SENF_PARSER_CUSTOM_FIELD_*
#
-# define SENF_PARSER_CUSTOM_FIELD_var(name, type, size, isize) \
+# define SENF_PARSER_CUSTOM_FIELD_var(name, type, size, isize) \
SENF_PARSER_CUSTOM_FIELD_I(name, type, size, isize, var)
-# define SENF_PARSER_CUSTOM_FIELD_fix(name, type, size) \
+# define SENF_PARSER_CUSTOM_FIELD_fix(name, type, size) \
SENF_PARSER_CUSTOM_FIELD_I(name, type, size, size, fix)
#
# define SENF_PARSER_CUSTOM_FIELD_I(name, type, size, isize, ofstype) \
# // SENF_PARSER_BITFIELD_*
# // SENF_PARSER_P_BITFIELD_*
#
-# define SENF_PARSER_BITFIELD_var(name, bits, type) \
+# define SENF_PARSER_BITFIELD_var(name, bits, type) \
SENF_PARSER_BITFIELD_I(name, bits, type, var, rw, public)
-# define SENF_PARSER_BITFIELD_RO_var(name, bits, type) \
+# define SENF_PARSER_BITFIELD_RO_var(name, bits, type) \
SENF_PARSER_BITFIELD_I(name, bits, type, var, ro, public)
-# define SENF_PARSER_BITFIELD_fix(name, bits, type) \
+# define SENF_PARSER_BITFIELD_fix(name, bits, type) \
SENF_PARSER_BITFIELD_I(name, bits, type, fix, rw, public)
-# define SENF_PARSER_BITFIELD_RO_fix(name, bits, type) \
+# define SENF_PARSER_BITFIELD_RO_fix(name, bits, type) \
SENF_PARSER_BITFIELD_I(name, bits, type, fix, ro, public)
#
-# define SENF_PARSER_P_BITFIELD_var(name, bits, type) \
+# define SENF_PARSER_P_BITFIELD_var(name, bits, type) \
SENF_PARSER_BITFIELD_I(name, bits, type, var, rw, private)
-# define SENF_PARSER_P_BITFIELD_RO_var(name, bits, type) \
- SENF_PARSER_BITFIELD_I(name, bits, type, var, ro, private)
-# define SENF_PARSER_P_BITFIELD_fix(name, bits, type) \
+# define SENF_PARSER_P_BITFIELD_fix(name, bits, type) \
SENF_PARSER_BITFIELD_I(name, bits, type, fix, rw, private)
-# define SENF_PARSER_P_BITFIELD_RO_fix(name, bits, type) \
- SENF_PARSER_BITFIELD_I(name, bits, type, fix, ro, private)
#
# ////////////////////////////////////////
# // SENF_PARSER_BITFIELD_I
#
-# define SENF_PARSER_BITFIELD_TYPE_signed(start, bits) senf::Parse_IntField<start, start+bits>
-# define SENF_PARSER_BITFIELD_TYPE_unsigned(start, bits) senf::Parse_UIntField<start, start+bits>
-# define SENF_PARSER_BITFIELD_TYPE_bool(start, bits) senf::Parse_Flag<start>
+# define SENF_PARSER_BITFIELD_TYPE_signed(start, bits) senf::IntFieldParser<start, start+bits>
+# define SENF_PARSER_BITFIELD_TYPE_unsigned(start, bits) senf::UIntFieldParser<start, start+bits>
+# define SENF_PARSER_BITFIELD_TYPE_bool(start, bits) senf::FlagParser<start>
#
# define SENF_PARSER_BITFIELD_I(name, bits, type, ofstype, rwtype, access) \
access: \
size_type BOOST_PP_CAT(name,_offset)() const { \
return field_offset_(static_cast<senf::mpl::rv<BOOST_PP_CAT(name,_index)-1>*>(0)) \
- SENF_MPL_SLOT_GET(bitfield_size); \
- }
+ } \
+ static size_type const BOOST_PP_CAT(name, _init_bytes) = SENF_MPL_SLOT_GET(init_bytes) \
+ - SENF_MPL_SLOT_GET(bitfield_size);
#
# define SENF_PARSER_I_BITFIELD_OFS_fix(name, type, access) \
static size_type const BOOST_PP_CAT(name, _offset) = SENF_MPL_SLOT_GET(offset) \
SENF_PARSER_I_BITFIELD_RESET() \
SENF_PARSER_I_FIELD_INTRO(name, void, private) \
SENF_PARSER_I_FIELD_INIT_ro(name, void, private) \
- BOOST_PP_CAT( SENF_PARSER_I_GOTO_SET_OFS_, ofstype ) (name, offset, initsize) \
+ BOOST_PP_CAT( SENF_PARSER_I_GOTO_SET_OFS_, ofstype ) (name, offset, initsize) \
public:
#
-# define SENF_PARSER_I_GOTO_SET_OFS_var(name, offs, initsize) \
+# define SENF_PARSER_I_GOTO_SET_OFS_var(name, offs, initsize) \
size_type field_offset_(senf::mpl::rv<BOOST_PP_CAT(name,_index)>*) const { \
return offs; \
} \
SENF_MPL_SLOT_SET(init_bytes, initsize);
#
-# define SENF_PARSER_I_GOTO_SET_OFS_fix(name, offs, initsize) \
+# define SENF_PARSER_I_GOTO_SET_OFS_fix(name, offs, initsize) \
SENF_MPL_SLOT_SET(offset, offs);
#
# ///////////////////////////////////////////////////////////////////////////
} \
name(data_iterator i, state_type s) : parser_base_type(i,s) {} \
private: \
- template <class T> void init(T) const { defaultInit(); } \
+ template <class T> void init(T) const { defaultInit(); } \
public: \
void init() const { init(0); }
#