| Index: base/memory/aligned_memory.h
|
| diff --git a/base/memory/aligned_memory.h b/base/memory/aligned_memory.h
|
| index d8290115dbeefe3f5cf2d62a72cc9179dc81963f..ddd50bef51e144ad9a42a4182305b4c8003c6fd7 100644
|
| --- a/base/memory/aligned_memory.h
|
| +++ b/base/memory/aligned_memory.h
|
| @@ -8,7 +8,7 @@
|
| // is constructed and destructed (you don't want static initialization and
|
| // destruction), use AlignedMemory:
|
| //
|
| -// static AlignedMemory<sizeof(MyClass), ALIGNOF(MyClass)> my_class;
|
| +// static AlignedMemory<sizeof(MyClass), alignof(MyClass)> my_class;
|
| //
|
| // // ... at runtime:
|
| // new(my_class.void_data()) MyClass();
|
| @@ -48,51 +48,25 @@
|
|
|
| namespace base {
|
|
|
| -// AlignedMemory is specialized for all supported alignments.
|
| -// Make sure we get a compiler error if someone uses an unsupported alignment.
|
| template <size_t Size, size_t ByteAlignment>
|
| -struct AlignedMemory {};
|
| -
|
| -#define BASE_DECL_ALIGNED_MEMORY(byte_alignment) \
|
| - template <size_t Size> \
|
| - class AlignedMemory<Size, byte_alignment> { \
|
| - public: \
|
| - ALIGNAS(byte_alignment) uint8_t data_[Size]; \
|
| - void* void_data() { return static_cast<void*>(data_); } \
|
| - const void* void_data() const { return static_cast<const void*>(data_); } \
|
| - template <typename Type> \
|
| - Type* data_as() { \
|
| - return static_cast<Type*>(void_data()); \
|
| - } \
|
| - template <typename Type> \
|
| - const Type* data_as() const { \
|
| - return static_cast<const Type*>(void_data()); \
|
| - } \
|
| - \
|
| - private: \
|
| - void* operator new(size_t); \
|
| - void operator delete(void*); \
|
| +class AlignedMemory {
|
| + public:
|
| + alignas(ByteAlignment) uint8_t data_[Size];
|
| + void* void_data() { return static_cast<void*>(data_); }
|
| + const void* void_data() const { return static_cast<const void*>(data_); }
|
| + template <typename Type>
|
| + Type* data_as() {
|
| + return static_cast<Type*>(void_data());
|
| + }
|
| + template <typename Type>
|
| + const Type* data_as() const {
|
| + return static_cast<const Type*>(void_data());
|
| }
|
|
|
| -// Specialization for all alignments is required because MSVC (as of VS 2008)
|
| -// does not understand ALIGNAS(ALIGNOF(Type)) or ALIGNAS(template_param).
|
| -// Greater than 4096 alignment is not supported by some compilers, so 4096 is
|
| -// the maximum specified here.
|
| -BASE_DECL_ALIGNED_MEMORY(1);
|
| -BASE_DECL_ALIGNED_MEMORY(2);
|
| -BASE_DECL_ALIGNED_MEMORY(4);
|
| -BASE_DECL_ALIGNED_MEMORY(8);
|
| -BASE_DECL_ALIGNED_MEMORY(16);
|
| -BASE_DECL_ALIGNED_MEMORY(32);
|
| -BASE_DECL_ALIGNED_MEMORY(64);
|
| -BASE_DECL_ALIGNED_MEMORY(128);
|
| -BASE_DECL_ALIGNED_MEMORY(256);
|
| -BASE_DECL_ALIGNED_MEMORY(512);
|
| -BASE_DECL_ALIGNED_MEMORY(1024);
|
| -BASE_DECL_ALIGNED_MEMORY(2048);
|
| -BASE_DECL_ALIGNED_MEMORY(4096);
|
| -
|
| -#undef BASE_DECL_ALIGNED_MEMORY
|
| + private:
|
| + void* operator new(size_t);
|
| + void operator delete(void*);
|
| +};
|
|
|
| BASE_EXPORT void* AlignedAlloc(size_t size, size_t alignment);
|
|
|
|
|