#include "boost/context/stack_traits.hpp"
extern "C" {
#include <windows.h>
}
#include <algorithm>
#include <cmath>
#include <cstddef>
#include <cstring>
#include <stdexcept>
#include <boost/assert.hpp>
#include <boost/context/detail/config.hpp>
#include <boost/context/stack_context.hpp>
#if defined(__x86_64__) || defined(__x86_64) \
|| defined(__amd64__) || defined(__amd64) \
|| defined(_M_X64) || defined(_M_AMD64)
# define MIN_STACKSIZE 8 * 1024
#else
# define MIN_STACKSIZE 4 * 1024
#endif
#ifdef BOOST_HAS_ABI_HEADERS
# include BOOST_ABI_PREFIX
#endif
namespace {
std::size_t pagesize() BOOST_NOEXCEPT_OR_NOTHROW {
SYSTEM_INFO si;
::GetSystemInfo(&si);
return static_cast< std::size_t >( si.dwPageSize );
}
}
namespace boost {
namespace context {
BOOST_CONTEXT_DECL
bool
stack_traits::is_unbounded() BOOST_NOEXCEPT_OR_NOTHROW {
return true;
}
BOOST_CONTEXT_DECL
std::size_t
stack_traits::page_size() BOOST_NOEXCEPT_OR_NOTHROW {
static std::size_t size = pagesize();
return size;
}
BOOST_CONTEXT_DECL
std::size_t
stack_traits::default_size() BOOST_NOEXCEPT_OR_NOTHROW {
return 128 * 1024;
}
BOOST_CONTEXT_DECL
std::size_t
stack_traits::minimum_size() BOOST_NOEXCEPT_OR_NOTHROW {
return MIN_STACKSIZE;
}
BOOST_CONTEXT_DECL
std::size_t
stack_traits::maximum_size() BOOST_NOEXCEPT_OR_NOTHROW {
BOOST_ASSERT( ! is_unbounded() );
return 1 * 1024 * 1024 * 1024; }
}}
#ifdef BOOST_HAS_ABI_HEADERS
# include BOOST_ABI_SUFFIX
#endif