X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FPackets%2FPacketParser.cci;h=0fa33474cae0f81decbba0e8cc5afd6d6d1fac96;hb=cf48e83de9d4793ca5bd67d1e5acdb5b20968638;hp=510c2a61b2b0a6715be48c34c7f6086989e566d8;hpb=601d1f509f5bb24df167a4dd5a20da67a0af9af8;p=senf.git diff --git a/senf/Packets/PacketParser.cci b/senf/Packets/PacketParser.cci index 510c2a6..0fa3347 100644 --- a/senf/Packets/PacketParser.cci +++ b/senf/Packets/PacketParser.cci @@ -49,8 +49,29 @@ prefix_ senf::PacketParserBase::data_iterator senf::PacketParserBase::end() return data_->end(); } +prefix_ senf::PacketParserBase::ParserProtector::ParserProtector(PacketParserBase const * p) + : safe_i_( *p), parser_(p) +{} + +prefix_ senf::PacketParserBase::ParserProtector::ParserProtector(ParserProtector const & other_) + : safe_i_( *other_.parser_), parser_(other_.parser_) +{ + other_.parser_ = 0; +} + +prefix_ senf::PacketParserBase::ParserProtector::~ParserProtector() +{ + if (parser_) const_cast(parser_)->i_ = safe_i_; +} + // protected members +prefix_ senf::PacketParserBase::ParserProtector senf::PacketParserBase::protect() + const +{ + return ParserProtector(this); +} + prefix_ bool senf::PacketParserBase::check(size_type size) const {