SENF_MPL_SLOT_DEF_ZERO(offset); \
SENF_MPL_SLOT_DEF_ZERO(bit); \
SENF_MPL_SLOT_DEF_ZERO(bitfield_size); \
- void init_chain(senf::mpl::rv<0>*) {} \
+ void init_chain(senf::mpl::rv<0>*) const {} \
public:
#
# define SENF_PARSER_INITIALIZE_var() \
SENF_MPL_SLOT_DEF_ZERO(init_bytes); \
SENF_MPL_SLOT_DEF_ZERO(bit); \
SENF_MPL_SLOT_DEF_ZERO(bitfield_size); \
- void init_chain(senf::mpl::rv<0>*) {} \
+ void init_chain(senf::mpl::rv<0>*) const {} \
size_type field_offset_(senf::mpl::rv<0>*) const { return 0; } \
public:
#
size_type field_offset_(senf::mpl::rv<1>*) const { \
return senf::bytes( *static_cast<name const*>(this) ); \
} \
- void init_chain(senf::mpl::rv<1>*) { \
+ void init_chain(senf::mpl::rv<1>*) const { \
name::init(); \
} \
public:
private: \
SENF_MPL_SLOT_SET(offset, name::fixed_bytes); \
SENF_MPL_SLOT_SET(index, 1); \
- void init_chain(senf::mpl::rv<1>*) { \
+ void init_chain(senf::mpl::rv<1>*) const { \
name::init(); \
} \
public:
BOOST_PP_CAT(SENF_PARSER_I_SIZE_, ofstype) (name, type), \
BOOST_PP_CAT(SENF_PARSER_I_INITBYTES_, ofstype) (name, type), \
access ) \
- BOOST_PP_CAT(SENF_PARSER_I_FIELD_VAL_, rwtype) (name, type, ofstype, access) \
+ BOOST_PP_CAT(SENF_PARSER_I_FIELD_VAL_, rwtype) (name, type, access) \
public:
#
# ////////////////////////////////////////
#
# define SENF_PARSER_I_FIELD_INIT_rw(name, type, access) \
private: \
- void init_chain(senf::mpl::rv<BOOST_PP_CAT(name,_index)>*) { \
+ 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)); \
name().init(); \
} \
#
# define SENF_PARSER_I_FIELD_INIT_ro(name, type, access) \
private: \
- void init_chain(senf::mpl::rv<BOOST_PP_CAT(name,_index)>*) { \
+ 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:
return parse<type>( SENF_PARSER_OFFSET(name) ); \
}
#
-# define SENF_PARSER_I_FIELD_VAL_ro(name, type, ofstype, access) \
+# define SENF_PARSER_I_FIELD_VAL_ro(name, type, access) \
BOOST_PP_CAT(name, _t)::value_type name() const { \
return parse<type>( SENF_PARSER_OFFSET(name) ).value(); \
}
private: \
SENF_MPL_SLOT_SET(bitfield_size, BOOST_PP_CAT(name, _t)::fixed_bytes); \
access: \
- BOOST_PP_CAT(SENF_PARSER_I_FIELD_VAL_, rwtype) (name, type, ofstype, access) \
+ BOOST_PP_CAT(SENF_PARSER_I_FIELD_VAL_, rwtype) (name, type, access) \
public:
#
# ////////////////////////////////////////
# define SENF_PARSER_OFFSET_var(name) BOOST_PP_CAT(name, _offset)()
#
# ///////////////////////////////////////////////////////////////////////////
+# // SENF_PARSER_FIXED_OFFSET_*
+#
+# define SENF_PARSER_FIXED_OFFSET_fix(name) BOOST_PP_CAT(name, _offset)
+# define SENF_PARSER_FIXED_OFFSET_var(name) BOOST_PP_CAT(name, _init_bytes)
+#
+# ///////////////////////////////////////////////////////////////////////////
+# // SENF_PARSER_FIXED_OFFSET_*
+#
+# define SENF_PARSER_CURRENT_FIXED_OFFSET_fix() SENF_MPL_SLOT_GET(offset)
+# define SENF_PARSER_CURRENT_FIXED_OFFSET_var() SENF_MPL_SLOT_GET(init_bytes)
+#
+# ///////////////////////////////////////////////////////////////////////////
# // SENF_PARSER_FINALIZE_*
#
# define SENF_PARSER_FINALIZE_var(name) \
static size_type const fixed_bytes = SENF_MPL_SLOT_GET(offset);
#
# define SENF_PARSER_FINALIZE_GENERIC(name) \
- void defaultInit() { \
+ void defaultInit() const { \
init_chain(static_cast<senf::mpl::rv<SENF_MPL_SLOT_GET(index)>*>(0)); \
} \
name(data_iterator i, state_type s) : parser_base_type(i,s) {} \
private: \
- template <class T> void init(T) { defaultInit(); } \
+ template <class T> void init(T) const { defaultInit(); } \
public: \
- void init() { init(0); }
+ void init() const { init(0); }
#
# ////////////////////////////////ih.e///////////////////////////////////////
# endif