# include SENF_PARSER()
SENF_PARSER_PRIVATE_FIELD( size, senf::UInt8Parser );
- SENF_PARSER_VEC_N( vec, size, senf::UInt16Parser );
+ SENF_PARSER_VECTOR( vec, size, senf::UInt16Parser );
SENF_PARSER_FINALIZE(VectorParser);
};
- typedef senf::ListBParser<VectorParser,senf::UInt16Parser>::parser MyListBParser;
+ typedef senf::ListParser<
+ senf::detail::ListBParser_Policy<
+ VectorParser,
+ senf::detail::PrefixAuxParserPolicy<senf::UInt16Parser> > > MyListBParser;
}
BOOST_AUTO_UNIT_TEST(ListBParser)
namespace {
+ struct TestTransform
+ {
+ typedef unsigned value_type;
+ static unsigned get(unsigned v) { return v/2; }
+ static unsigned set(unsigned v) { return 2*v; }
+ };
+
struct TestListParser
: public senf::PacketParserBase
{
SENF_PARSER_PRIVATE_FIELD ( size2 , senf::UInt8Parser );
SENF_PARSER_FIELD ( dummy , senf::UInt32Parser );
SENF_PARSER_LIST ( list1 , bytes(size1) , VectorParser );
- SENF_PARSER_LIST ( list2 , bytes(size2) , VectorParser );
+ SENF_PARSER_LIST ( list2 , transform(TestTransform, bytes(size2)) ,
+ VectorParser );
SENF_PARSER_FINALIZE(TestListParser);
};
BOOST_AUTO_UNIT_TEST(listBytesMacro)
{
- unsigned char data[] = { 0x08, // size1
- 0x09, // size2
+ unsigned char data[] = { 8, // size1
+ 18, // size2
0x01, 0x02, 0x03, 0x04, // dummy
0x01, // list1()[0].size()
0x05, 0x06, // list1().vec()[0]