/** \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
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 <class ElementParser, class AuxPolicy, class AuxTag>
+ struct VectorParserPolicy
+ {};
+
+ template <class ElementParser, class AuxPolicy>
+ struct VectorParserPolicy<ElementParser, AuxPolicy, senf::detail::auxtag::none>
+ {
+ typedef AuxPolicy type;
+ };
+
+ template <class ElementParser, class AuxPolicy, class Transform>
+ struct VectorParserPolicy<ElementParser, AuxPolicy,
+ senf::detail::auxtag::transform<Transform,
+ senf::detail::auxtag::none> >
+ {
+ typedef senf::detail::TransformAuxParserPolicy<AuxPolicy, Transform> type;
+ };
+
+ template <unsigned fixedSize>
+ 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 <class ElementParser, class AuxPolicy>
+ struct VectorParserPolicy<ElementParser, AuxPolicy, senf::detail::auxtag::bytes>
+ {
+ typedef senf::detail::TransformAuxParserPolicy<
+ AuxPolicy,
+ VectorParserBytesTransform<ElementParser::fixed_bytes> > type;
+ };
template <class ElementParser>
struct VectorParserTraits
{
template <class AuxPolicy, class AuxTag>
struct parser {
- typedef senf::VectorParser<ElementParser, AuxPolicy> type;
+ typedef senf::VectorParser<
+ ElementParser,
+ typename VectorParserPolicy<ElementParser, AuxPolicy, AuxTag>::type > type;
};
};
size, \
senf::detail::VectorParserTraits<elt_type> )
+#endif
+
}}
///////////////////////////////ih.e////////////////////////////////////////