annotate DEPENDENCIES/generic/include/boost/context/fixedsize_stack.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents f46d142149f5
children
rev   line source
Chris@102 1
Chris@102 2 // Copyright Oliver Kowalke 2014.
Chris@102 3 // Distributed under the Boost Software License, Version 1.0.
Chris@102 4 // (See accompanying file LICENSE_1_0.txt or copy at
Chris@102 5 // http://www.boost.org/LICENSE_1_0.txt)
Chris@102 6
Chris@102 7 #ifndef BOOST_CONTEXT_FIXEDSIZE_H
Chris@102 8 #define BOOST_CONTEXT_FIXEDSIZE_H
Chris@102 9
Chris@102 10 #include <cstddef>
Chris@102 11 #include <cstdlib>
Chris@102 12 #include <new>
Chris@102 13
Chris@102 14 #include <boost/assert.hpp>
Chris@102 15 #include <boost/config.hpp>
Chris@102 16
Chris@102 17 #include <boost/context/detail/config.hpp>
Chris@102 18 #include <boost/context/stack_context.hpp>
Chris@102 19 #include <boost/context/stack_traits.hpp>
Chris@102 20
Chris@102 21 #if defined(BOOST_USE_VALGRIND)
Chris@102 22 #include <valgrind/valgrind.h>
Chris@102 23 #endif
Chris@102 24
Chris@102 25 #ifdef BOOST_HAS_ABI_HEADERS
Chris@102 26 # include BOOST_ABI_PREFIX
Chris@102 27 #endif
Chris@102 28
Chris@102 29 namespace boost {
Chris@102 30 namespace context {
Chris@102 31
Chris@102 32 template< typename traitsT >
Chris@102 33 class basic_fixedsize_stack {
Chris@102 34 private:
Chris@102 35 std::size_t size_;
Chris@102 36
Chris@102 37 public:
Chris@102 38 typedef traitsT traits_type;
Chris@102 39
Chris@102 40 basic_fixedsize_stack( std::size_t size = traits_type::default_size() ) :
Chris@102 41 size_( size) {
Chris@102 42 BOOST_ASSERT( traits_type::minimum_size() <= size_);
Chris@102 43 BOOST_ASSERT( traits_type::is_unbounded() || ( traits_type::maximum_size() >= size_) );
Chris@102 44 }
Chris@102 45
Chris@102 46 stack_context allocate() {
Chris@102 47 void * vp = std::malloc( size_);
Chris@102 48 if ( ! vp) throw std::bad_alloc();
Chris@102 49
Chris@102 50 stack_context sctx;
Chris@102 51 sctx.size = size_;
Chris@102 52 sctx.sp = static_cast< char * >( vp) + sctx.size;
Chris@102 53 #if defined(BOOST_USE_VALGRIND)
Chris@102 54 sctx.valgrind_stack_id = VALGRIND_STACK_REGISTER( sctx.sp, vp);
Chris@102 55 #endif
Chris@102 56 return sctx;
Chris@102 57 }
Chris@102 58
Chris@102 59 void deallocate( stack_context & sctx) {
Chris@102 60 BOOST_ASSERT( sctx.sp);
Chris@102 61 BOOST_ASSERT( traits_type::minimum_size() <= sctx.size);
Chris@102 62 BOOST_ASSERT( traits_type::is_unbounded() || ( traits_type::maximum_size() >= sctx.size) );
Chris@102 63
Chris@102 64 #if defined(BOOST_USE_VALGRIND)
Chris@102 65 VALGRIND_STACK_DEREGISTER( sctx.valgrind_stack_id);
Chris@102 66 #endif
Chris@102 67
Chris@102 68 void * vp = static_cast< char * >( sctx.sp) - sctx.size;
Chris@102 69 std::free( vp);
Chris@102 70 }
Chris@102 71 };
Chris@102 72
Chris@102 73 typedef basic_fixedsize_stack< stack_traits > fixedsize_stack;
Chris@102 74
Chris@102 75 }}
Chris@102 76
Chris@102 77 #ifdef BOOST_HAS_ABI_HEADERS
Chris@102 78 # include BOOST_ABI_SUFFIX
Chris@102 79 #endif
Chris@102 80
Chris@102 81 #endif // BOOST_CONTEXT_FIXEDSIZE_H