Add 'unflatten' to doxygen/dot processing
[senf.git] / Packets / PacketParser.ih
index 2fb098a..00df8a8 100644 (file)
@@ -1,6 +1,8 @@
-// Copyright (C) 2007 
-// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
-// Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
+// $Id$
+//
+// Copyright (C) 2007
+// 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
 /** \file
     \brief PacketParser internal header */
 
-#ifndef IH_PacketParser_
-#define IH_PacketParser_ 1
+#ifndef IH_SENF_Packets_PacketParser_
+#define IH_SENF_Packets_PacketParser_ 1
 
 // Custom includes
-#include "Utils/mpl.hh"
+#include "../Utils/mpl.hh"
 
 ///////////////////////////////ih.p////////////////////////////////////////
 
@@ -61,6 +63,16 @@ namespace detail {
     template <class Parser, unsigned _>
     struct ParserInitBytes_Choose 
         : public boost::integral_constant<PacketParserBase::size_type, Parser::init_bytes> {};
+    // ^^-- g++ error signaled here:
+    //    error: 'fixed_bytes' is not a member of 'some-class-name'
+    //
+    // The 'some-class-name' class (as given in the error message) does not seem to be a parser at
+    // all (it has neither a 'fixed_bytes' nor an 'init_bytes' member).
+    //
+    // Either 'some-class-name' is not the class you wanted to use (it really is no parser) or you
+    // left out either 'init_bytes' or 'fixed_bytes' when defining the parser. This will also
+    // happen, if you forget to call 'SENF_PARSER_FINALIZE()' when defining a composite parser.
+    ///////////////////////////////////////////////////////////////////////////////////////////////
 
     // If Parser::init_bytes is not defined, this specialization is chosen which instead uses
     // 'Parser::fixed_bytes'
@@ -72,6 +84,18 @@ namespace detail {
     struct ParserInitBytes
         : public ParserInitBytes_Choose<Parser,SENF_MPL_RV(ParserInitBytes_Choose_<Parser>(0))> {};
 
+    template <class Parser, unsigned _>
+    struct ParserIsFixed_Choose
+        : public boost::false_type {};
+
+    template <class Parser>
+    struct ParserIsFixed_Choose<Parser, 1>
+        : public boost::true_type {};
+
+    template <class Parser>
+    struct ParserIsFixed
+        : public ParserIsFixed_Choose<Parser,SENF_MPL_RV(ParserInitBytes_Choose_<Parser>(0))> {};
+
 #   endif
 
 }}