X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FListNParser.ih;h=db54348d82a5a60db38c33af205223ffcd999ab7;hb=fd3a0e8ac95d1158e9ea661ddf9187b67c70169f;hp=51be7c53deff54e2f6d2250743c3c21866965f82;hpb=a1a6c76a214ad1935032826713cabaf9ac57bf07;p=senf.git diff --git a/Packets/ListNParser.ih b/Packets/ListNParser.ih index 51be7c5..db54348 100644 --- a/Packets/ListNParser.ih +++ b/Packets/ListNParser.ih @@ -23,10 +23,11 @@ /** \file \brief ListNParser internal header */ -#ifndef IH_ListNParser_ -#define IH_ListNParser_ 1 +#ifndef IH_SENF_Packets_ListNParser_ +#define IH_SENF_Packets_ListNParser_ 1 // Custom includes +#include "ListParser.ih" ///////////////////////////////ih.p//////////////////////////////////////// @@ -37,43 +38,61 @@ namespace detail { \internal \see \ref ListNParser */ - template + template struct ListNParser_Policy + : public AuxPolicy { - typedef PacketParserBase::data_iterator iterator; + typedef PacketParserBase::data_iterator data_iterator; typedef PacketParserBase::state_type state_type; typedef PacketParserBase::size_type size_type; typedef ElementParser element_type; typedef ListParser< ListNParser_Policy > parser_type; typedef ListParser_Container< ListNParser_Policy > container_type; - static const size_type init_bytes = SizeParser::fixed_bytes; - - size_type bytes (iterator i, state_type s) const; - size_type size (iterator i, state_type s) const; - void init (iterator i, state_type s) const; - void erase (iterator i, state_type s, iterator p) const; - void insert (iterator i, state_type s, iterator p) const; - void update (iterator i, state_type s) const; - - /** \brief Iternal: ListNParser_Policy's iterator policy - \internal - */ - struct iterator_policy - { - iterator setBegin (iterator i, state_type s); - iterator setEnd (iterator i, state_type s); - void setFromPosition (iterator i, state_type s, iterator p); - iterator next (iterator i, state_type s); - iterator raw (iterator i, state_type s) const; + static const size_type init_bytes = AuxPolicy::aux_bytes; + ListNParser_Policy(); + template ListNParser_Policy(Arg const & aux); + + size_type bytes (data_iterator i, state_type s) const; + size_type size (data_iterator i, state_type s) const; + void init (data_iterator i, state_type s) const; + + void erase (container_type & c, data_iterator p) const; + void insert (container_type & c, data_iterator p) const; + void update (container_type const & c) const; + + /** Internal: ListNParser iterator specific data */ + struct iterator_data { size_type n_; - iterator l_; }; - static PacketData & data(state_type s); + data_iterator setBegin (container_type const & c, iterator_data & d) const; + data_iterator setEnd (container_type const & c, iterator_data & d) const; + void setFromPosition (container_type const & c, iterator_data & d, data_iterator p) const; + data_iterator next (container_type const & c, iterator_data & d) const; + data_iterator raw (container_type const & c, iterator_data const & d) const; + }; + +#ifndef DOXYGEN + + template + struct ListParserPolicy + { + typedef ListNParser_Policy type; }; + template + struct ListParserPolicy > + { + typedef ListNParser_Policy< ElementParser, + TransformAuxParserPolicy > type; + }; + +#endif + }} ///////////////////////////////ih.e////////////////////////////////////////