diff options
Diffstat (limited to 'src/third_party/boost-1.69.0/boost/align/detail/align.hpp')
-rw-r--r-- | src/third_party/boost-1.69.0/boost/align/detail/align.hpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/third_party/boost-1.69.0/boost/align/detail/align.hpp b/src/third_party/boost-1.69.0/boost/align/detail/align.hpp new file mode 100644 index 00000000000..905940ad77a --- /dev/null +++ b/src/third_party/boost-1.69.0/boost/align/detail/align.hpp @@ -0,0 +1,38 @@ +/* +Copyright 2014-2016 Glen Joseph Fernandes +(glenjofe@gmail.com) + +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) +*/ +#ifndef BOOST_ALIGN_DETAIL_ALIGN_HPP +#define BOOST_ALIGN_DETAIL_ALIGN_HPP + +#include <boost/align/detail/is_alignment.hpp> +#include <boost/assert.hpp> + +namespace boost { +namespace alignment { + +inline void* +align(std::size_t alignment, std::size_t size, void*& ptr, + std::size_t& space) +{ + BOOST_ASSERT(detail::is_alignment(alignment)); + if (size <= space) { + char* p = reinterpret_cast<char*>(~(alignment - 1) & + (reinterpret_cast<std::size_t>(ptr) + alignment - 1)); + std::size_t n = space - (p - static_cast<char*>(ptr)); + if (size <= n) { + ptr = p; + space = n; + return p; + } + } + return 0; +} + +} /* alignment */ +} /* boost */ + +#endif |