X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FVectorParser.ih;h=bd46aa1161c1cfaa2834f417ae6d512dee6a2bb7;hb=b8ca4a544cce3e6023bb56b712a03d6362f2bb79;hp=6da8f4901df0714f192505238225f271c6278cca;hpb=4ee78597a1dae53669f5295cbb686c58146d2449;p=senf.git diff --git a/Packets/VectorParser.ih b/Packets/VectorParser.ih index 6da8f49..bd46aa1 100644 --- a/Packets/VectorParser.ih +++ b/Packets/VectorParser.ih @@ -23,8 +23,8 @@ /** \file \brief VectorParser internal header */ -#ifndef IH_VectorParser_ -#define IH_VectorParser_ 1 +#ifndef IH_SENF_Packets_VectorParser_ +#define IH_SENF_Packets_VectorParser_ 1 // Custom includes @@ -33,21 +33,50 @@ namespace senf { namespace detail { -# define SENF_PARSER_VEC_N_I(field, name, size, elt_type) \ - typedef senf::VectorParser< \ - elt_type, \ - senf::detail::FixedAuxParserPolicy< BOOST_PP_CAT(size, _t), \ - SENF_PARSER_CURRENT_FIXED_OFFSET() \ - - SENF_PARSER_FIXED_OFFSET(size) > \ - > BOOST_PP_CAT(name, _vec_t); \ - field( name, BOOST_PP_CAT(name, _vec_t) ) +#ifndef DOXYGEN + + template + struct VectorParserPolicy + {}; + + template + struct VectorParserPolicy + { + typedef AuxPolicy type; + }; + + template + struct VectorParserPolicy > + { + typedef senf::detail::TransformAuxParserPolicy type; + }; + + template + struct VectorParserBytesTransform + { + typedef PacketParserBase::size_type value_type; + static value_type get(value_type v) { return v/fixedSize; } + static value_type set(value_type v) { return v*fixedSize; } + }; + + template + struct VectorParserPolicy + { + typedef senf::detail::TransformAuxParserPolicy< + AuxPolicy, + VectorParserBytesTransform > type; + }; template struct VectorParserTraits { template struct parser { - typedef senf::VectorParser type; + typedef senf::VectorParser< + ElementParser, + typename VectorParserPolicy::type > type; }; }; @@ -59,6 +88,8 @@ namespace detail { size, \ senf::detail::VectorParserTraits ) +#endif + }} ///////////////////////////////ih.e////////////////////////////////////////