annotate DEPENDENCIES/generic/include/boost/align/detail/aligned_alloc.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 (c) 2014 Glen Joseph Fernandes
Chris@102 3 glenjofe at gmail dot com
Chris@102 4
Chris@102 5 Distributed under the Boost Software
Chris@102 6 License, Version 1.0.
Chris@102 7 http://boost.org/LICENSE_1_0.txt
Chris@102 8 */
Chris@102 9 #ifndef BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_HPP
Chris@102 10 #define BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_HPP
Chris@102 11
Chris@102 12 #include <boost/assert.hpp>
Chris@102 13 #include <boost/config.hpp>
Chris@102 14 #include <boost/align/align.hpp>
Chris@102 15 #include <boost/align/alignment_of.hpp>
Chris@102 16 #include <boost/align/detail/is_alignment.hpp>
Chris@102 17 #include <cstdlib>
Chris@102 18
Chris@102 19 namespace boost {
Chris@102 20 namespace alignment {
Chris@102 21 inline void* aligned_alloc(std::size_t alignment,
Chris@102 22 std::size_t size) BOOST_NOEXCEPT
Chris@102 23 {
Chris@102 24 BOOST_ASSERT(detail::is_alignment(alignment));
Chris@102 25 if (alignment < alignment_of<void*>::value) {
Chris@102 26 alignment = alignment_of<void*>::value;
Chris@102 27 }
Chris@102 28 std::size_t n = size + alignment - 1;
Chris@102 29 void* p1 = 0;
Chris@102 30 void* p2 = std::malloc(n + sizeof p1);
Chris@102 31 if (p2) {
Chris@102 32 p1 = static_cast<char*>(p2) + sizeof p1;
Chris@102 33 (void)align(alignment, size, p1, n);
Chris@102 34 *(static_cast<void**>(p1) - 1) = p2;
Chris@102 35 }
Chris@102 36 return p1;
Chris@102 37 }
Chris@102 38
Chris@102 39 inline void aligned_free(void* ptr)
Chris@102 40 BOOST_NOEXCEPT
Chris@102 41 {
Chris@102 42 if (ptr) {
Chris@102 43 void* p = *(static_cast<void**>(ptr) - 1);
Chris@102 44 std::free(p);
Chris@102 45 }
Chris@102 46 }
Chris@102 47 }
Chris@102 48 }
Chris@102 49
Chris@102 50 #endif