Utils: Removed ErrnoException and implemented generic Exception base-class
[senf.git] / Packets / MPEGDVBBundle / TLVPacket.hh
index d33c48c..4925075 100644 (file)
@@ -1,9 +1,9 @@
 // $Id$
 //
 // Copyright (C) 2007
-// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
-// Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
-//     Thorsten Horstmann <thorsten.horstmann@fokus.fraunhofer.de>
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
+//     Thorsten Horstmann <tho@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
@@ -41,22 +41,19 @@ namespace senf {
         \todo add usefull exceptions strings
          
     */
-    struct UnsuportedTLVPacketException : public std::exception
-    { 
-        virtual char const * what() const throw() { 
-            return "length of length can be max. 4 bytes. Sorry.";
-        }
-    };
+    struct UnsuportedTLVPacketException : public senf::Exception
+    { UnsuportedTLVPacketException() 
+          : senf::Exception("length of length can be max. 4 bytes. Sorry."){} };
 
     /** \brief xxx
         \todo document me
     */
-    class TLVPacketLengthParser 
-        : public detail::packet::IntParserOps<TLVPacketLengthParser, boost::uint32_t>,
+    class DynamicTLVLengthParser 
+        : public detail::packet::IntParserOps<DynamicTLVLengthParser, boost::uint32_t>,
           public PacketParserBase
     {
     public:
-        TLVPacketLengthParser(data_iterator i, state_type s) : PacketParserBase(i,s) {}
+        DynamicTLVLengthParser(data_iterator i, state_type s) : PacketParserBase(i,s) {}
 
         typedef boost::uint32_t value_type;
         static const size_type init_bytes = 1;
@@ -66,10 +63,8 @@ namespace senf {
         value_type value() const;
         void value(value_type const & v);
         
-        TLVPacketLengthParser const & operator= (value_type other);
-    
+        DynamicTLVLengthParser const & operator= (value_type other);
         size_type bytes() const;
-            
         void init() const;
 
     private:
@@ -93,12 +88,12 @@ namespace senf {
      
         \see TLVPacketType
      */
-    template <class LengthParser>
+    template <class TypeParser, class LengthParser>
     struct TLVPacketParser : public PacketParserBase
     {
 #       include SENF_PARSER()
         
-        SENF_PARSER_FIELD( type,   UInt32Parser );
+        SENF_PARSER_FIELD( type,   TypeParser );
         SENF_PARSER_FIELD( length, LengthParser );
         
         SENF_PARSER_FINALIZE(TLVPacketParser);
@@ -110,14 +105,13 @@ namespace senf {
         
         \ingroup protocolbundle_mpegdvb
      */
-    template <class LengthParser>
+    template <class TypeParser, class LengthParser>
     struct TLVPacketType
         : public PacketTypeBase
     {
-#ifndef DOXYGEN
-        typedef ConcretePacket<TLVPacketType<LengthParser> > packet;
-        typedef TLVPacketParser<LengthParser> parser;
-#endif
+        typedef ConcretePacket<TLVPacketType<TypeParser, LengthParser> > packet;
+        typedef TLVPacketParser<TypeParser, LengthParser> parser;
+
         static optional_range nextPacketRange(packet p);
         static size_type initSize();
         
@@ -125,13 +119,8 @@ namespace senf {
         
         static void dump(packet p, std::ostream & os);
     };
-
-    typedef TLVPacketType<TLVPacketLengthParser>::packet TLVPacket;
     
-    typedef ConcretePacket<TLVPacketType<UInt8Parser> >  TLVFix8Packet;
-    typedef ConcretePacket<TLVPacketType<UInt16Parser> > TLVFix16Packet;
-    typedef ConcretePacket<TLVPacketType<UInt24Parser> > TLVFix24Packet;
-    typedef ConcretePacket<TLVPacketType<UInt32Parser> > TLVFix32Packet;
+    typedef ConcretePacket<TLVPacketType<UInt32Parser, DynamicTLVLengthParser> > MIHInfoElement;
 }