16 #ifndef INCLUDE_NN_NLIB_DYNAMICALIGNEDSTORAGE_H_ 17 #define INCLUDE_NN_NLIB_DYNAMICALIGNEDSTORAGE_H_ 20 #include "nn/nlib/Swap.h" 27 #ifdef __cpp_rvalue_references 29 rhs.storage_ =
nullptr;
32 storage_ = rhs.storage_;
33 rhs.storage_ =
nullptr;
38 #ifdef NN_PLATFORM_CTR 39 : storage_(rhs.storage_),
42 : storage_(rhs.storage_)
45 rhs.storage_ =
nullptr;
48 #ifdef NN_PLATFORM_CTR 51 storage_ = rhs.storage_;
52 rhs.storage_ =
nullptr;
56 if (align == 0)
return EINVAL;
57 if ((align & (align - 1)) != 0)
return EINVAL;
58 #ifdef NN_PLATFORM_CTR 60 #elif defined(_MSC_VER) 61 void* p = _aligned_malloc(size, align);
65 if (!p)
return ENOMEM;
67 #ifdef NN_PLATFORM_CTR 74 _aligned_free(storage_);
80 #ifndef NN_PLATFORM_CTR 83 uintptr_t pos = (
reinterpret_cast<uintptr_t
>(storage_) + (align_ - 1)) & ~(align_ - 1);
84 return reinterpret_cast<void*
>(pos);
90 #ifdef NN_PLATFORM_CTR 98 NLIB_DEFINE_STD_SWAP(NLIB_NS::DynamicAlignedStorage)
100 #endif // INCLUDE_NN_NLIB_DYNAMICALIGNEDSTORAGE_H_ DynamicAlignedStorage & operator=(DynamicAlignedStorage &&rhs) noexcept
ムーブ代入演算子です。
DynamicAlignedStorage(DynamicAlignedStorage &rhs, move_tag) noexcept
ムーブコンストラクタに相当します。
#define NLIB_DISALLOW_COPY_AND_ASSIGN(TypeName)
TypeName で指定されたクラスのコピーコンストラクタと代入演算子を禁止します。
errno_t Init(size_t size, size_t align) noexcept
メモリの割り当てを行います。
DynamicAlignedStorage & assign(DynamicAlignedStorage &rhs, move_tag) noexcept
ムーブ代入演算子に相当します。
~DynamicAlignedStorage() noexcept
デストラクタです。
空の構造体で、関数の引数をムーブすべきことを示すために利用されます。
#define NLIB_NOEXCEPT
環境に合わせてnoexcept 又は同等の定義がされます。
void * Get() noexcept
割り当てられた領域へのポインタを返します。
#define NLIB_CEXPR
利用可能であればconstexprが定義されます。そうでない場合は空文字列です。
constexpr DynamicAlignedStorage() noexcept
デフォルトコンストラクタです。
#define NLIB_FINAL
利用可能であればfinalが定義されます。そうでない場合は空文字列です。
DynamicAlignedStorage(DynamicAlignedStorage &&rhs) noexcept
ムーブコンストラクタです。