Sha256: f01548fa67e1469890953e2c1a3bf24e3959e2a7e91d6c074ef6c59bfdd8a814

Contents?: true

Size: 1.61 KB

Versions: 34

Compression:

Stored size: 1.61 KB

Contents

// Copyright (c) 2018-2020 Dr. Colin Hirsch and Daniel Frey
// Please see LICENSE for license or visit https://github.com/taocpp/json/

#ifndef TAO_JSON_EVENTS_LIMIT_NESTING_DEPTH_HPP
#define TAO_JSON_EVENTS_LIMIT_NESTING_DEPTH_HPP

#include <cstddef>
#include <cstdint>

#include <stdexcept>

namespace tao::json::events
{
   template< typename Consumer, std::size_t Limit >
   class limit_nesting_depth
      : public Consumer
   {
   private:
      std::size_t m_depth = 0;

      void count_and_limit()
      {
         if( ++m_depth > Limit ) {
            throw std::runtime_error( "nesting depth limit exceeded" );
         }
      }

   public:
      using Consumer::Consumer;

      void begin_array()
      {
         count_and_limit();
         Consumer::begin_array();
      }

      void begin_array( const std::size_t size )
      {
         count_and_limit();
         Consumer::begin_array( size );
      }

      void end_array()
      {
         Consumer::end_array();
         --m_depth;
      }

      void end_array( const std::size_t size )
      {
         Consumer::end_array( size );
         --m_depth;
      }

      void begin_object()
      {
         count_and_limit();
         Consumer::begin_object();
      }

      void begin_object( const std::size_t size )
      {
         count_and_limit();
         Consumer::begin_object( size );
      }

      void end_object()
      {
         Consumer::end_object();
         --m_depth;
      }

      void end_object( const std::size_t size )
      {
         Consumer::end_object( size );
         --m_depth;
      }
   };

}  // namespace tao::json::events

#endif

Version data entries

34 entries across 34 versions & 1 rubygems

Version Path
couchbase-3.2.0-universal-darwin-20 ext/third_party/json/include/tao/json/events/limit_nesting_depth.hpp
couchbase-3.2.0 ext/third_party/json/include/tao/json/events/limit_nesting_depth.hpp
couchbase-3.1.1 ext/third_party/json/include/tao/json/events/limit_nesting_depth.hpp
couchbase-3.1.1-universal-darwin-20 ext/third_party/json/include/tao/json/events/limit_nesting_depth.hpp
couchbase-3.1.0 ext/third_party/json/include/tao/json/events/limit_nesting_depth.hpp
couchbase-3.0.3 ext/third_party/json/include/tao/json/events/limit_nesting_depth.hpp
couchbase-3.0.3-universal-darwin-20 ext/third_party/json/include/tao/json/events/limit_nesting_depth.hpp
couchbase-3.0.2 ext/third_party/json/include/tao/json/events/limit_nesting_depth.hpp
couchbase-3.0.1-universal-darwin-19 ext/third_party/json/include/tao/json/events/limit_nesting_depth.hpp
couchbase-3.0.1 ext/third_party/json/include/tao/json/events/limit_nesting_depth.hpp
couchbase-3.0.0-universal-darwin-19 ext/third_party/json/include/tao/json/events/limit_nesting_depth.hpp
couchbase-3.0.0 ext/third_party/json/include/tao/json/events/limit_nesting_depth.hpp
couchbase-3.0.0.beta.1-universal-darwin-19 ext/third_party/json/include/tao/json/events/limit_nesting_depth.hpp
couchbase-3.0.0.beta.1 ext/third_party/json/include/tao/json/events/limit_nesting_depth.hpp
couchbase-3.0.0.alpha.5-x86_64-linux ext/third_party/json/include/tao/json/events/limit_nesting_depth.hpp
couchbase-3.0.0.alpha.5-universal-darwin-19 ext/third_party/json/include/tao/json/events/limit_nesting_depth.hpp
couchbase-3.0.0.alpha.5-x86_64-darwin-19 ext/third_party/json/include/tao/json/events/limit_nesting_depth.hpp
couchbase-3.0.0.alpha.5 ext/third_party/json/include/tao/json/events/limit_nesting_depth.hpp
couchbase-3.0.0.alpha.4-x86_64-linux ext/third_party/json/include/tao/json/events/limit_nesting_depth.hpp
couchbase-3.0.0.alpha.4-x86_64-darwin-19 ext/third_party/json/include/tao/json/events/limit_nesting_depth.hpp