X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FListNParser.ih;h=db54348d82a5a60db38c33af205223ffcd999ab7;hb=92f8630b75f3ef50e73c48cde58645dcd1534e27;hp=9aa1312cd55749d3d9afbe3006eb03e37d315ff4;hpb=a1001797645cc68c869ef296f5e9ba13aa8e80c4;p=senf.git diff --git a/Packets/ListNParser.ih b/Packets/ListNParser.ih index 9aa1312..db54348 100644 --- a/Packets/ListNParser.ih +++ b/Packets/ListNParser.ih @@ -1,8 +1,8 @@ // $Id$ // -// Copyright (C) 2007 -// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) -// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) +// Copyright (C) 2007 +// Fraunhofer Institute for Open Communication Systems (FOKUS) +// Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund // // This program is free software; you can redistribute it and/or modify @@ -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////////////////////////////////////////