X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2FListNParser.ih;fp=senf%2FPackets%2FListNParser.ih;h=db54348d82a5a60db38c33af205223ffcd999ab7;hb=601d1f509f5bb24df167a4dd5a20da67a0af9af8;hp=0000000000000000000000000000000000000000;hpb=164fe477094d42463722584e527a02379ab5d985;p=senf.git diff --git a/senf/Packets/ListNParser.ih b/senf/Packets/ListNParser.ih new file mode 100644 index 0000000..db54348 --- /dev/null +++ b/senf/Packets/ListNParser.ih @@ -0,0 +1,110 @@ +// $Id$ +// +// 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 +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the +// Free Software Foundation, Inc., +// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +/** \file + \brief ListNParser internal header */ + +#ifndef IH_SENF_Packets_ListNParser_ +#define IH_SENF_Packets_ListNParser_ 1 + +// Custom includes +#include "ListParser.ih" + +///////////////////////////////ih.p//////////////////////////////////////// + +namespace senf { +namespace detail { + + /** \brief Internal: ListPolicy defining the ListNParser parser + \internal + \see \ref ListNParser + */ + template + struct ListNParser_Policy + : public AuxPolicy + { + 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 = 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_; + }; + + 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//////////////////////////////////////// +#endif + + +// Local Variables: +// mode: c++ +// fill-column: 100 +// comment-column: 40 +// c-file-style: "senf" +// indent-tabs-mode: nil +// ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// End: