X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2FParseHelpers.dox;h=ce239f128521828b5c6f2962331a0a3cf94b4b08;hb=ddb2132be4265f8a0d7d4c954c7c9401e59d027c;hp=2ff88af1ddb457f56d0decd4b5871497d0991c13;hpb=601d1f509f5bb24df167a4dd5a20da67a0af9af8;p=senf.git diff --git a/senf/Packets/ParseHelpers.dox b/senf/Packets/ParseHelpers.dox index 2ff88af..ce239f1 100644 --- a/senf/Packets/ParseHelpers.dox +++ b/senf/Packets/ParseHelpers.dox @@ -1,24 +1,29 @@ // $Id$ // -// Copyright (C) 2008 +// Copyright (C) 2008 // 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. +// 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. +// +// Contributor(s): +// Stefan Bund + /** \page parsermacro_expand_example Example macro-expansion of packet parser helper macros @@ -67,7 +72,7 @@ \code struct TestParser : public senf::PacketParserBase { - // ///////////////////////////////////////////////////////////////////////// + //-///////////////////////////////////////////////////////////////////////// // #include SENF_PARSER() private: @@ -77,15 +82,15 @@ SENF_MPL_SLOT_INIT_ZERO(bitfield_size); SENF_MPL_SLOT_INIT_ZERO(group); - void init_chain (senf::mpl::rv <0> *) const {} + void init_chain (senf::mpl::rv <0> *) const {} size_type field_offset_ (senf::mpl::rv <0> *) const { return 0; } - // ///////////////////////////////////////////////////////////////////////// + //-///////////////////////////////////////////////////////////////////////// // SENF_PARSER_SKIP_BITS( 4 ); SENF_MPL_SLOT_SET(bit, SENF_MPL_SLOT_GET(bit) + 4); - // ///////////////////////////////////////////////////////////////////////// + //-///////////////////////////////////////////////////////////////////////// // SENF_PARSER_BITFIELD_RO( type, 4, unsigned ); public: @@ -104,13 +109,13 @@ void init_chain (senf::mpl::rv *) const { init_chain (static_cast *>(0)); - } + } public: size_type type_offset() const { return field_offset_(static_cast *>(0)) - - SENF_MPL_SLOT_GET(bitfield_size); + SENF_MPL_SLOT_GET(bitfield_size); } static size_type const type_init_bytes = SENF_MPL_SLOT_GET(init_bytes) - SENF_MPL_SLOT_GET(bitfield_size); @@ -140,7 +145,7 @@ return type_(); } - // ///////////////////////////////////////////////////////////////////////// + //-///////////////////////////////////////////////////////////////////////// // SENF_PARSER_PRIVATE_VARIANT( content_, type, // ( novalue( nocontent, key(10, senf::VoidPacketParser)) ) // ( id( content, SubParser ) ) @@ -158,7 +163,7 @@ return 1; } template - struct content__key_value_template + struct content__key_value_template : public senf::detail::VariantKey {}; template friend class senf::detail::VariantKey; typedef senf::detail::VariantKeyTransform< @@ -171,16 +176,16 @@ // start SENF_PARSER_COLLECTION_I static bool const content__aux_fixed = (SENF_MPL_SLOT_GET(group) - type_group) == 0; - typedef senf::detail::ParserAuxPolicySelect < - type_t, + typedef senf::detail::ParserAuxPolicySelect < + type_t, SENF_MPL_SLOT_GET(init_bytes) - type_init_bytes, - content__aux_fixed + content__aux_fixed >::type content__aux_policy; typedef content__traits::parser::type content__collection_t; SENF_MPL_SLOT_SET(bit, 0); SENF_MPL_SLOT_SET(bitfield_size, 0); - typedef content__collection_t content__t; + typedef content__collection_t content__t; static size_type const content__index = SENF_MPL_SLOT_GET(index) + 1; SENF_MPL_SLOT_SET(index, content__index); void init_chain (senf::mpl::rv *) const @@ -204,7 +209,7 @@ return content__next_offset(); } SENF_MPL_SLOT_SET(init_bytes, content__next_init_bytes); - static size_type const content__group = + static size_type const content__group = SENF_MPL_SLOT_GET(group) + (senf::is_fixed::value ? 0 : 1); SENF_MPL_SLOET_SET(group, content__group); template < class T > @@ -242,13 +247,13 @@ void init_content() const { content_().init<1>(); - } + } bool has_content() const { return content_().variant() == 1; }; - // ///////////////////////////////////////////////////////////////////////// + //-///////////////////////////////////////////////////////////////////////// // SENF_PARSER_FINALIZE(TestParser); void defaultInit() const @@ -260,9 +265,9 @@ {} private: - template + template void init(T) const - { + { defaultInit (); }