From daf0485ec77463dbaeba3b1b0ffeefc8a89f5399 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 19 Apr 2024 05:26:42 +0200 Subject: Adding upstream version 0.8.7. Signed-off-by: Daniel Baumann --- src/sexp-depth-manager.cpp | 50 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/sexp-depth-manager.cpp (limited to 'src/sexp-depth-manager.cpp') diff --git a/src/sexp-depth-manager.cpp b/src/sexp-depth-manager.cpp new file mode 100644 index 0000000..2f26e27 --- /dev/null +++ b/src/sexp-depth-manager.cpp @@ -0,0 +1,50 @@ +/** + * + * Copyright 2023 Ribose Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * + **/ + +#include "sexpp/sexp.h" + +namespace sexp { + +sexp_depth_manager::sexp_depth_manager(size_t m_depth) +{ + reset_depth(m_depth); +} +void sexp_depth_manager::reset_depth(size_t m_depth) +{ + depth = 0; + max_depth = m_depth; +} +void sexp_depth_manager::increase_depth(int count) +{ + if (max_depth != 0 && ++depth > max_depth) + sexp_error(sexp_exception_t::error, + "Maximum allowed SEXP list depth (%u) is exceeded", + max_depth, + 0, + count); +} +void sexp_depth_manager::decrease_depth(void) +{ + depth--; +} +} // namespace sexp -- cgit v1.2.3