Mercurial > hg > vamp-build-and-test
diff DEPENDENCIES/generic/include/boost/wave/util/iteration_context.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DEPENDENCIES/generic/include/boost/wave/util/iteration_context.hpp Tue Aug 05 11:11:38 2014 +0100 @@ -0,0 +1,83 @@ +/*============================================================================= + Boost.Wave: A Standard compliant C++ preprocessor library + + http://www.boost.org/ + + Copyright (c) 2001-2012 Hartmut Kaiser. Distributed under the Boost + Software License, Version 1.0. (See accompanying file + LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +=============================================================================*/ + +#if !defined(ITERATION_CONTEXT_HPP_9556CD16_F11E_4ADC_AC8B_FB9A174BE664_INCLUDED) +#define ITERATION_CONTEXT_HPP_9556CD16_F11E_4ADC_AC8B_FB9A174BE664_INCLUDED + +#include <cstdlib> +#include <cstdio> +#include <stack> + +#include <boost/wave/wave_config.hpp> +#include <boost/wave/cpp_exceptions.hpp> + +// this must occur after all of the includes and before any code appears +#ifdef BOOST_HAS_ABI_HEADERS +#include BOOST_ABI_PREFIX +#endif + +/////////////////////////////////////////////////////////////////////////////// +namespace boost { +namespace wave { +namespace util { + +/////////////////////////////////////////////////////////////////////////////// +template <typename IterationContextT> +class iteration_context_stack +{ + typedef std::stack<IterationContextT> base_type; + +public: + typedef typename base_type::size_type size_type; + + iteration_context_stack() + : max_include_nesting_depth(BOOST_WAVE_MAX_INCLUDE_LEVEL_DEPTH) + {} + + void set_max_include_nesting_depth(size_type new_depth) + { max_include_nesting_depth = new_depth; } + size_type get_max_include_nesting_depth() const + { return max_include_nesting_depth; } + + typename base_type::size_type size() const { return iter_ctx.size(); } + typename base_type::value_type &top() { return iter_ctx.top(); } + void pop() { iter_ctx.pop(); } + + template <typename Context, typename PositionT> + void push(Context& ctx, PositionT const &pos, + typename base_type::value_type const &val) + { + if (iter_ctx.size() == max_include_nesting_depth) { + char buffer[22]; // 21 bytes holds all NUL-terminated unsigned 64-bit numbers + + using namespace std; // for some systems sprintf is in namespace std + sprintf(buffer, "%d", (int)max_include_nesting_depth); + BOOST_WAVE_THROW_CTX(ctx, preprocess_exception, + include_nesting_too_deep, buffer, pos); + } + iter_ctx.push(val); + } + +private: + size_type max_include_nesting_depth; + base_type iter_ctx; +}; + +/////////////////////////////////////////////////////////////////////////////// +} // namespace util +} // namespace wave +} // namespace boost + +// the suffix header occurs after all of the code +#ifdef BOOST_HAS_ABI_HEADERS +#include BOOST_ABI_SUFFIX +#endif + +#endif // !defined(ITERATION_CONTEXT_HPP_9556CD16_F11E_4ADC_AC8B_FB9A174BE664_INCLUDED)