Link statically against boost_unit_test_framework library
[senf.git] / Packets / ParseHelpers.ih
index dc1191c..b55c9a4 100644 (file)
@@ -81,7 +81,7 @@
     public:
 #
 # ///////////////////////////////////////////////////////////////////////////
-# // SENF_PARSER_FIELD_*
+# // SENF_PARSER_FIELD*
 # // SENF_PARSER_P_FIELD_*
 #
 # define SENF_PARSER_FIELD_var(name, type)    SENF_PARSER_FIELD_I(name, type, var, rw, 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:
 #
 # ////////////////////////////////////////
 # ////////////////////////////////////////
 # // SENF_PARSER_I_FIELD_VAL_*
 #
-# define SENF_PARSER_I_MAYBECALL_var() ()
-# define SENF_PARSER_I_MAYBECALL_fix()
-#
-# define SENF_PARSER_I_FIELD_VAL_rw(name, type, ofstype, access)                                  \
+# define SENF_PARSER_I_FIELD_VAL_rw(name, type, access)                                           \
         BOOST_PP_CAT(name, _t) name() const {                                                     \
-            return parse<type>(                                                                   \
-                BOOST_PP_CAT(name,_offset) BOOST_PP_CAT(SENF_PARSER_I_MAYBECALL_, ofstype)());    \
+            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>(                                                                   \
-                BOOST_PP_CAT(name,_offset) BOOST_PP_CAT(SENF_PARSER_I_MAYBECALL_, ofstype)())     \
-                    .value();                                                                     \
+            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:
 #
 # ////////////////////////////////////////
         SENF_MPL_SLOT_SET(bitfield_size, 0);
 #
 # ///////////////////////////////////////////////////////////////////////////
-# // SENF_PARSER_FINALIZE_*
-#
-# define SENF_PARSER_FINALIZE_var(name)                                                           \
-    SENF_PARSER_FINALIZE_GENERIC(name)                                                            \
-    size_type bytes() const {                                                                     \
-        return field_offset_(static_cast<senf::mpl::rv<SENF_MPL_SLOT_GET(index)>*>(0));           \
-    }                                                                                             \
-    static size_type const init_bytes = SENF_MPL_SLOT_GET(init_bytes)
-#
-# define SENF_PARSER_FINALIZE_fix(name)                                                           \
-    SENF_PARSER_FINALIZE_GENERIC(name)                                                            \
-    static size_type const fixed_bytes = SENF_MPL_SLOT_GET(offset);
-#
-# define SENF_PARSER_FINALIZE_GENERIC(name)                                                       \
-         void defaultInit() {                                                                     \
-             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(); }                                       \
-    public:                                                                                       \
-         void init() { init(0); }
-#
-# ///////////////////////////////////////////////////////////////////////////
 # // SENF_PARSER_SKIP_*
 #
 # define SENF_PARSER_SKIP_var(bytes, ibytes)                                                      \
           BOOST_PP_CAT(SENF_PARSER_I_ADVANCE_OFS_, ofstype) (name, void, 0, 0,access)             \
       public:
 #
+# ///////////////////////////////////////////////////////////////////////////
+# // SENF_PARSER_OFFSET_*
+#
+# define SENF_PARSER_OFFSET_fix(name) BOOST_PP_CAT(name, _offset)
+# 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)                                                           \
+    SENF_PARSER_FINALIZE_GENERIC(name)                                                            \
+    size_type bytes() const {                                                                     \
+        return field_offset_(static_cast<senf::mpl::rv<SENF_MPL_SLOT_GET(index)>*>(0));           \
+    }                                                                                             \
+    static size_type const init_bytes = SENF_MPL_SLOT_GET(init_bytes)
+#
+# define SENF_PARSER_FINALIZE_fix(name)                                                           \
+    SENF_PARSER_FINALIZE_GENERIC(name)                                                            \
+    static size_type const fixed_bytes = SENF_MPL_SLOT_GET(offset);
+#
+# define SENF_PARSER_FINALIZE_GENERIC(name)                                                       \
+         void defaultInit() {                                                                     \
+             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(); }                                       \
+    public:                                                                                       \
+         void init() { init(0); }
+#
 # ////////////////////////////////ih.e///////////////////////////////////////
 # endif
 #