From 0901c3375337c05ab41b435fb57b5bf7f1b2216e Mon Sep 17 00:00:00 2001 From: Fernando Sahmkow Date: Fri, 19 Jul 2019 11:11:42 -0400 Subject: Common: Correct alignment allocator to work on C++14 or higher. --- src/common/alignment.h | 56 +++++++++++++++++--------------------------------- 1 file changed, 19 insertions(+), 37 deletions(-) (limited to 'src/common') diff --git a/src/common/alignment.h b/src/common/alignment.h index b3fbdfe20..da2e61e10 100644 --- a/src/common/alignment.h +++ b/src/common/alignment.h @@ -3,10 +3,8 @@ #pragma once #include -#include +#include #include -#include -#include namespace Common { @@ -43,59 +41,43 @@ constexpr bool IsWordAligned(T value) { template class AlignmentAllocator { public: - typedef T value_type; - typedef std::size_t size_type; - typedef std::ptrdiff_t difference_type; + using value_type = T; + using size_type = std::size_t; + using difference_type = std::ptrdiff_t; - typedef T* pointer; - typedef const T* const_pointer; + using pointer = T*; + using const_pointer = const T*; - typedef T& reference; - typedef const T& const_reference; + using reference = T&; + using const_reference = const T&; public: - inline AlignmentAllocator() throw() {} - template - inline AlignmentAllocator(const AlignmentAllocator&) throw() {} - - inline ~AlignmentAllocator() throw() {} - - inline pointer adress(reference r) { - return &r; + pointer address(reference r) { + return std::addressof(r); } - inline const_pointer adress(const_reference r) const { - return &r; + const_pointer address(const_reference r) const { + return std::addressof(r); } -#if (defined _MSC_VER) - inline pointer allocate(size_type n) { - return (pointer)_aligned_malloc(n * sizeof(value_type), Align); - } - - inline void deallocate(pointer p, size_type) { - _aligned_free(p); - } -#else - inline pointer allocate(size_type n) { - return (pointer)std::aligned_alloc(Align, n * sizeof(value_type)); + pointer allocate(size_type n) { + return static_cast(::operator new(n, std::align_val_t{Align})); } - inline void deallocate(pointer p, size_type) { - std::free(p); + void deallocate(pointer p, size_type) { + ::operator delete(p, std::align_val_t{Align}); } -#endif - inline void construct(pointer p, const value_type& wert) { + void construct(pointer p, const value_type& wert) { new (p) value_type(wert); } - inline void destroy(pointer p) { + void destroy(pointer p) { p->~value_type(); } - inline size_type max_size() const throw() { + size_type max_size() const noexcept { return size_type(-1) / sizeof(value_type); } -- cgit v1.2.3