X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2FPacketParser.hh;h=ea2d64ffcd2c3b7d8a73187c02b42b256420b4ff;hb=9ffdaae4804503c4f36a53747c852a87ee626b9e;hp=e22bf18438b343c5cc51cfbf2698afadf567a2e0;hpb=26610f603ebdd465307b9621f532c1fe19fd5571;p=senf.git diff --git a/senf/Packets/PacketParser.hh b/senf/Packets/PacketParser.hh index e22bf18..ea2d64f 100644 --- a/senf/Packets/PacketParser.hh +++ b/senf/Packets/PacketParser.hh @@ -161,6 +161,7 @@ #include "PacketTypes.hh" #include "PacketData.hh" #include "ParseHelpers.hh" +#include "SafeIterator.hh" //#include "PacketParser.mpp" ///////////////////////////////hh.p//////////////////////////////////////// @@ -290,7 +291,18 @@ namespace senf { implementation. Re-implement this member in your own parsers if needed. */ + private: + struct ParserProtector { + senf::safe_data_iterator safe_i_; + mutable PacketParserBase const * parser_; + + ParserProtector( PacketParserBase const * parser); + ParserProtector(ParserProtector const & other_); + ~ParserProtector(); + }; protected: + ParserProtector protect() const; + PacketParserBase(data_iterator i, state_type s); ///< Standard constructor /**< This is the constructor used by most parsers. The parameters are just forwarded from the derived classes @@ -371,6 +383,7 @@ namespace senf { PacketData * data_; template friend class SafePacketParserWrapper; + friend class ParserProtector; }; /** \brief Return raw size parsed by the given parser object