X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2FPacketParser.hh;h=ea2d64ffcd2c3b7d8a73187c02b42b256420b4ff;hb=9ffdaae4804503c4f36a53747c852a87ee626b9e;hp=b5ef0ea7a0e7b6dff10a05fb82965bb5ab89027b;hpb=601d1f509f5bb24df167a4dd5a20da67a0af9af8;p=senf.git diff --git a/senf/Packets/PacketParser.hh b/senf/Packets/PacketParser.hh index b5ef0ea..ea2d64f 100644 --- a/senf/Packets/PacketParser.hh +++ b/senf/Packets/PacketParser.hh @@ -157,10 +157,11 @@ #include #include #include -#include "../Utils/safe_bool.hh" +#include #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