Utils/Termlib: Extend the completion API
[senf.git] / Packets / Packet.hh
index d3b42a4..d148598 100644 (file)
@@ -269,7 +269,10 @@ namespace senf {
              OtherPacket. The new packet is added to the chain after
              \c this.
              \returns new packet instance sharing the same data and
-                 placed after \c this packet in the chain. */
+                 placed after \c this packet in the chain. 
+             \throws InvalidPacketChainException if no next
+                 packet header is allowed (viz. nextPacketRange() of the the current
+                 PacketType returns no_range() ) */
         Packet      parseNextAs(factory_t factory) const;
         ///< Interpret payload of \c this as \a factory type packet
         /**< parseNextAs() will throw away the packet chain after
@@ -278,7 +281,10 @@ namespace senf {
              factory. The new packet is added to the chain after
              \c this.
              \returns new packet instance sharing the same data and
-                 placed after \c this packet in the chain. */
+                 placed after \c this packet in the chain.
+             \throws InvalidPacketChainException if no next
+                 packet header is allowed (viz. nextPacketRange() of the the current
+                 PacketType returns no_range() ) */
 
         template <class OtherPacket> bool        is() const;
         ///< Check, whether \c this packet is of the given type
@@ -376,6 +382,10 @@ namespace senf {
 
         ///@}
 
+        template <class Annotation>
+        Annotation const & annotation() const; ///< Get packet annotation
+                                        /**< \see annotation() */
+
         ///\name Other methods
         ///@{
 
@@ -728,6 +738,15 @@ namespace senf {
         friend class PacketInterpreter<PacketType>;
     };
 
+    /** \brief Generic parser copying
+
+        This operator allows to copy the value of identical parsers. This operation does \e not
+        depend on the parsers detailed implementation, it will just replace the data bytes of the
+        target parser with those from the source packet.
+     */
+    template <class PacketType, class Parser>
+    Parser operator<<(Parser target, ConcretePacket<PacketType> const & packet);
+
     ///@}
 
 }