diff options
Diffstat (limited to 'boost/align/detail/aligned_alloc.hpp')
-rw-r--r-- | boost/align/detail/aligned_alloc.hpp | 66 |
1 files changed, 35 insertions, 31 deletions
diff --git a/boost/align/detail/aligned_alloc.hpp b/boost/align/detail/aligned_alloc.hpp index 147b0de0f9..1852ac15a6 100644 --- a/boost/align/detail/aligned_alloc.hpp +++ b/boost/align/detail/aligned_alloc.hpp @@ -1,10 +1,10 @@ /* - (c) 2014 Glen Joseph Fernandes - glenjofe at gmail dot com +(c) 2014-2015 Glen Joseph Fernandes +glenjofe at gmail dot com - Distributed under the Boost Software - License, Version 1.0. - http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software +License, Version 1.0. +http://boost.org/LICENSE_1_0.txt */ #ifndef BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_HPP #define BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_HPP @@ -17,34 +17,38 @@ #include <cstdlib> namespace boost { - namespace alignment { - inline void* aligned_alloc(std::size_t alignment, - std::size_t size) BOOST_NOEXCEPT - { - BOOST_ASSERT(detail::is_alignment(alignment)); - if (alignment < alignment_of<void*>::value) { - alignment = alignment_of<void*>::value; - } - std::size_t n = size + alignment - 1; - void* p1 = 0; - void* p2 = std::malloc(n + sizeof p1); - if (p2) { - p1 = static_cast<char*>(p2) + sizeof p1; - (void)align(alignment, size, p1, n); - *(static_cast<void**>(p1) - 1) = p2; - } - return p1; - } +namespace alignment { - inline void aligned_free(void* ptr) - BOOST_NOEXCEPT - { - if (ptr) { - void* p = *(static_cast<void**>(ptr) - 1); - std::free(p); - } - } +inline void* aligned_alloc(std::size_t alignment, std::size_t size) + BOOST_NOEXCEPT +{ + BOOST_ASSERT(detail::is_alignment(alignment)); + enum { + N = alignment_of<void*>::value + }; + if (alignment < N) { + alignment = N; } + std::size_t n = size + alignment - N; + void* p1 = 0; + void* p2 = std::malloc(n + sizeof p1); + if (p2) { + p1 = static_cast<char*>(p2) + sizeof p1; + (void)align(alignment, size, p1, n); + *(static_cast<void**>(p1) - 1) = p2; + } + return p1; } +inline void aligned_free(void* ptr) BOOST_NOEXCEPT +{ + if (ptr) { + void* p = *(static_cast<void**>(ptr) - 1); + std::free(p); + } +} + +} /* :alignment */ +} /* :boost */ + #endif |