X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FListParser.ih;h=bf60983c8b092fad87d63e1742b71b4a7e180f58;hb=92f8630b75f3ef50e73c48cde58645dcd1534e27;hp=e6c7d30dd2d64ff33713f5fe1dc50dc512ee3e52;hpb=a1a6c76a214ad1935032826713cabaf9ac57bf07;p=senf.git diff --git a/Packets/ListParser.ih b/Packets/ListParser.ih index e6c7d30..bf60983 100644 --- a/Packets/ListParser.ih +++ b/Packets/ListParser.ih @@ -23,8 +23,8 @@ /** \file \brief ListParser internal header */ -#ifndef IH_ListParser_ -#define IH_ListParser_ 1 +#ifndef IH_SENF_Packets_ListParser_ +#define IH_SENF_Packets_ListParser_ 1 // Custom includes #include @@ -38,39 +38,65 @@ namespace detail { \internal */ - template + template class ListParser_Iterator - : public boost::iterator_facade< ListParser_Iterator, - ElementParser, + : public boost::iterator_facade< ListParser_Iterator, + typename Container::value_type, boost::forward_traversal_tag, - ElementParser >, - private IteratorPolicy + typename Container::value_type >, +#ifndef DOXYGEN + private Container::policy::iterator_data +#endif { public: - enum Begin_t { Begin }; - enum End_t { End }; + typedef typename Container::value_type value_type; ListParser_Iterator(); - ListParser_Iterator(PacketParserBase::data_iterator i, PacketParserBase::state_type s, - Begin_t); - ListParser_Iterator(PacketParserBase::data_iterator i, PacketParserBase::state_type s, - End_t); - ListParser_Iterator(PacketParserBase::data_iterator i, PacketParserBase::state_type s, - PacketParserBase::data_iterator p); + explicit ListParser_Iterator(Container const & c); PacketParserBase::data_iterator raw() const; + PacketParserBase::data_iterator i() const; + static ListParser_Iterator & get(typename Container::policy::iterator_data & d); + static ListParser_Iterator const & get(typename Container::policy::iterator_data const & d); + private: friend class boost::iterator_core_access; + template friend class ListParser_Container; - ElementParser dereference() const; + value_type dereference() const; bool equal(ListParser_Iterator const & other) const; void increment(); PacketParserBase::data_iterator i_; - PacketParserBase::state_type s_; + Container const * c_; + }; + +#ifndef DOXYGEN + + template + struct ListParserPolicy + {}; + + template + struct ListParserTraits + { + template + struct parser { + typedef senf::ListParser< + typename ListParserPolicy::type > type; + }; }; +# define SENF_PARSER_LIST_I(access, name, size, elt_type) \ + SENF_PARSER_REQUIRE_VAR(list) \ + SENF_PARSER_COLLECTION_I( access, \ + name, \ + size, \ + senf::detail::ListParserTraits ) + +#endif + }} ///////////////////////////////ih.e////////////////////////////////////////