switch to new MPL based Fraunhofer FOKUS Public License
[senf.git] / senf / Packets / VectorParser.hh
index ef3fe36..3f9049b 100644 (file)
@@ -2,23 +2,28 @@
 //
 // Copyright (C) 2006
 // Fraunhofer Institute for Open Communication Systems (FOKUS)
-// Competence Center NETwork research (NET), St. Augustin, GERMANY
-//     Stefan Bund <g0dil@berlios.de>
 //
-// 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.
+// The contents of this file are subject to the Fraunhofer FOKUS Public License
+// Version 1.0 (the "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at 
+// http://senf.berlios.de/license.html
 //
-// 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.
+// The Fraunhofer FOKUS Public License Version 1.0 is based on, 
+// but modifies the Mozilla Public License Version 1.1.
+// See the full license text for the amendments.
 //
-// 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.
+// Software distributed under the License is distributed on an "AS IS" basis, 
+// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 
+// for the specific language governing rights and limitations under the License.
+//
+// The Original Code is Fraunhofer FOKUS code.
+//
+// The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V. 
+// (registered association), Hansastraße 27 c, 80686 Munich, Germany.
+// All Rights Reserved.
+//
+// Contributor(s):
+//   Stefan Bund <g0dil@berlios.de>
 
 /** \file
     \brief VectorParser public header */
 #define HH_SENF_Packets_VectorParser_ 1
 
 // Custom includes
-#include <boost/iterator/iterator_facade.hpp>
-#include <boost/utility.hpp>
-#include <boost/range.hpp>
 #include <boost/type_traits.hpp>
 #include "PacketParser.hh"
 #include "ArrayParser.hh" // for ArrayParser_iterator
 #include "AuxParser.hh" // for the AuxPolicies
 
 //#include "VectorParser.mpp"
-///////////////////////////////hh.p////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 
 namespace senf {
 
@@ -47,7 +49,7 @@ namespace senf {
         A Vector is a collection of fixed-size elements of which the size of the collection can be
         determined directly (that is without traversing the collection). This allows very efficient
         random access to the elements of the collection.
-        
+
         A vector is a model of an STL random-access sequence. The parser only provides a reduced
         interface, the container wrapper however completes this interface.
 
@@ -58,7 +60,7 @@ namespace senf {
         Some basic vector access methods are defined as parser members. To access the complete list
         API however you will need to instantiate a container wrapper for the vector. See \ref
         packet_usage_fields_collection.
-        
+
         \see
             \ref How to access \ref packet_usage_fields_collection \n
             SENF_PARSER_VECTOR() macro used to define vector fields \n
@@ -67,8 +69,8 @@ namespace senf {
         \ingroup parsecollection
      */
     template <class ElementParser, class AuxPolicy>
-    struct VectorParser 
-        : public PacketParserBase, 
+    struct VectorParser
+        : public PacketParserBase,
           private AuxPolicy
     {
         VectorParser(data_iterator i, state_type s);
@@ -82,7 +84,7 @@ namespace senf {
 
         static const size_type init_bytes = AuxPolicy::aux_bytes;
 
-        ///////////////////////////////////////////////////////////////////////////
+        //-////////////////////////////////////////////////////////////////////////
         // Container interface
 
         typedef ElementParser value_type;
@@ -101,16 +103,16 @@ namespace senf {
         value_type back() const;
 
         // Mutators
-        
+
         // The mutators provided here are those which don't take an iterator argument.
         // If you need to pass an iterator it is much simpler and cleaner to use the
         // 'container' wrapper
-                   
+
         template <class Value> void push_back        (Value const & value, size_type n=1) const;
-                               void push_back_space  (size_type n=1) const;
+        value_type                  push_back_space  (size_type n=1) const;
         template <class Value> void push_front       (Value const & value, size_type n=1) const;
-                               void push_front_space (size_type n=1) const;
-                               void resize           (size_type n) const;
+        value_type                  push_front_space (size_type n=1) const;
+        void                        resize           (size_type n) const;
         template <class Value> void resize           (size_type n, Value value) const;
 
      private:
@@ -123,11 +125,11 @@ namespace senf {
         This is the container wrapper used for vector parsers. The container wrapper will stay valid
         after changing the collection. However the container still depends on the packet and will be
         invalidated if the Packet is deallocated or if the packet size is changed from without the
-        container wrapper (more precisely, it is invalided if the insertion/deletion happens before
+        container wrapper (more precisely, it is invalidated if the insertion/deletion happens before
         the vector in the packet data).
 
         The vector container wrapper provides a complete STL random-access sequence interface.
-        
+
         \code
         SomePacket p (...);
         SomePacket::aVectorCollection_t::container c (p->aVectorCollection());
@@ -141,7 +143,7 @@ namespace senf {
         : private AuxPolicy::WrapperPolicy
     {
     public:
-        ///////////////////////////////////////////////////////////////////////////
+        //-////////////////////////////////////////////////////////////////////////
         // Types
 
         typedef VectorParser<ElementParser,AuxPolicy> parser_type;
@@ -153,9 +155,9 @@ namespace senf {
         typedef iterator const_iterator;
         typedef PacketParserBase::state_type state_type;
 
-        ///////////////////////////////////////////////////////////////////////////
+        //-////////////////////////////////////////////////////////////////////////
         ///\name Structors and default members
-        ///@{
+        //\{
 
         // no default constructor
         // default copy
@@ -164,11 +166,11 @@ namespace senf {
 
         VectorParser_Container(parser_type const & vector);
 
-        ///@}
-        ///////////////////////////////////////////////////////////////////////////
+        //\}
+        //-////////////////////////////////////////////////////////////////////////
 
         ///\name Accessors
-        ///@{
+        //\{
 
         size_type size() const;
         bool empty() const;
@@ -180,9 +182,9 @@ namespace senf {
         value_type front() const;
         value_type back() const;
 
-        ///@}
+        //\}
         ///\name Mutators
-        ///@{
+        //\{
 
         iterator shift(iterator pos, size_type n=1);
         template <class Value>
@@ -203,16 +205,16 @@ namespace senf {
         void clear();
 
         template <class Value> void push_back        (Value const & value, size_type n=1);
-                               void push_back_space  (size_type n=1);
+        value_type                  push_back_space  (size_type n=1);
         template <class Value> void push_front       (Value const & value, size_type n=1);
-                               void push_front_space (size_type n=1);
-                               void resize           (size_type n);
+        value_type                  push_front_space (size_type n=1);
+        void                        resize           (size_type n);
         template <class Value> void resize           (size_type n, Value value);
 
-        ///@}
+        //\}
 
         ///\name Parser interface
-        ///@{
+        //\{
 
         parser_type parser() const;
         data_iterator i() const;
@@ -221,8 +223,8 @@ namespace senf {
 
         size_type bytes() const;
         void init() const;
-        
-        ///@}
+
+        //\}
 
     protected:
 
@@ -234,7 +236,7 @@ namespace senf {
     };
 
     /** \brief Define VectorParser field
-        
+
         This macro is a special helper to define a senf::VectorParser type field, a vector of
         elements of type \a elt_type (a parser) which size is given by the \a size field.
 
@@ -255,7 +257,7 @@ namespace senf {
         <table class="senf fixedcolumn">
         <tr><td>\c bytes(\a size)</td><td>\a size gives the size of the vector in bytes not the
         number of contained elements</td></tr>
-        
+
         <tr><td>\c packetSize()</td><td>Use the size of the packet to get the vector size. The
         vector will occupy all space up to the end of the packet.</td></tr>
 
@@ -280,12 +282,12 @@ namespace senf {
         SENF_PARSER_VECTOR ( vec, transform(MyTransform, vec_size_), senf::UInt32Parser );
         SENF_PARSER_VECTOR ( vec, packetSize(), senf::UInt32Parser );
         \endcode
-        
+
         \param[in] name field name
         \param[in] size name of field giving the vector size
         \param[in] elt_type vector element type
 
-        \see 
+        \see
             How to use \ref packet_usage_fields_collection \n
             senf::VectorParser the vector parser API for vector field access
             senf::VectorParser_Container the vector parser container API for vector field access
@@ -307,7 +309,7 @@ namespace senf {
         SENF_PARSER_VECTOR_I(protected, name, size, elt_type)
 }
 
-///////////////////////////////hh.e////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 #endif
 #if !defined(HH_SENF_Packets_Packets__decls_) && !defined(HH_SENF_Packets_VectorParser_i_)
 #define HH_SENF_Packets_VectorParser_i_