diff options
Diffstat (limited to 'boost/align/detail/align.hpp')
-rw-r--r-- | boost/align/detail/align.hpp | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/boost/align/detail/align.hpp b/boost/align/detail/align.hpp index d2404b3e6d..0828c58365 100644 --- a/boost/align/detail/align.hpp +++ b/boost/align/detail/align.hpp @@ -9,10 +9,8 @@ http://boost.org/LICENSE_1_0.txt #ifndef BOOST_ALIGN_DETAIL_ALIGN_HPP #define BOOST_ALIGN_DETAIL_ALIGN_HPP -#include <boost/assert.hpp> -#include <boost/align/detail/address.hpp> #include <boost/align/detail/is_alignment.hpp> -#include <cstddef> +#include <boost/assert.hpp> namespace boost { namespace alignment { @@ -21,17 +19,17 @@ inline void* align(std::size_t alignment, std::size_t size, void*& ptr, std::size_t& space) { BOOST_ASSERT(detail::is_alignment(alignment)); - std::size_t n = detail::address(ptr) & (alignment - 1); - if (n != 0) { - n = alignment - n; - } - void* p = 0; - if (n <= space && size <= space - n) { - p = static_cast<char*>(ptr) + n; - ptr = p; - space -= n; + if (size <= space) { + char* p = reinterpret_cast<char*>((reinterpret_cast<std:: + size_t>(ptr) + alignment - 1) & ~(alignment - 1)); + std::ptrdiff_t n = p - static_cast<char*>(ptr); + if (size <= space - n) { + ptr = p; + space -= n; + return p; + } } - return p; + return 0; } } /* .alignment */ |