16 #ifndef INCLUDE_NN_NLIB_EXI_EXIALLOCATOR_H_ 17 #define INCLUDE_NN_NLIB_EXI_EXIALLOCATOR_H_ 23 #include "nn/nlib/Swap.h" 25 #if defined(_MSC_VER) && defined(nx_exi_EXPORTS) 26 #undef NLIB_VIS_PUBLIC 27 #define NLIB_VIS_PUBLIC NLIB_WINEXPORT 33 struct ExiAllocatorInfo;
47 swap(rhs.m_Ptr, m_Ptr);
53 void* Realloc(
void* ptr,
size_t from_nbytes,
size_t nbytes)
NLIB_NOEXCEPT;
60 bool IsValid() const NLIB_NOEXCEPT {
return m_Ptr != NULL; }
65 ExiAllocatorInfo* m_Ptr;
74 static void* Realloc(
void* ptr,
size_t from_nbytes,
size_t nbytes)
NLIB_NOEXCEPT;
93 if (m_Al) ExiAllocator::Swap(rhs);
96 if (m_Swapped) ExiAllocator::Swap(m_Al);
105 #ifdef NN_PLATFORM_CTR 107 #define NEXI_DEF_NEW_DELETE(typeName) \ 108 static void* operator new(size_t size) throw() { \ 109 NLIB_ASSERT(size == sizeof(typeName)); \ 110 return ExiAllocator::Alloc(size); \ 112 static void* operator new(size_t size, const std::nothrow_t&) throw() { \ 113 NLIB_ASSERT(size == sizeof(typeName)); \ 114 return ExiAllocator::Alloc(size); \ 116 static void* operator new(size_t size, void* ptr) throw() { \ 117 return ::operator new(size, ptr); \ 119 static void operator delete(void* p) throw() { ExiAllocator::Dealloc(p); } \ 120 static void* operator new[](size_t size, void* p) throw(); \ 121 static void operator delete[](void* p) throw() 123 #define NEXI_DISALLOW_NEW_DELETE(typeName) \ 125 static void* operator new(size_t size, void* ptr) throw() { \ 126 return ::operator new(size, ptr); \ 129 static void* operator new(size_t size) throw(); \ 130 static void* operator new(size_t size, const std::nothrow_t&) throw(); \ 131 static void operator delete(void* p) throw(); \ 132 static void* operator new[](size_t size, void* p) throw(); \ 133 static void* operator new[](size_t size, const std::nothrow_t&) throw(); \ 134 static void operator delete[](void* p) throw() 136 #define NEXI_DEF_NEW_DELETE(typeName) \ 138 static void* operator new[](size_t size); \ 139 static void* operator new[](size_t size, void* p) NLIB_NOEXCEPT; \ 140 static void* operator new[](size_t size, const std::nothrow_t&) NLIB_NOEXCEPT; \ 141 static void operator delete[](void* p) NLIB_NOEXCEPT; \ 142 static void operator delete[](void* p, void* ptr) NLIB_NOEXCEPT; \ 143 static void operator delete[](void* p, const std::nothrow_t&) NLIB_NOEXCEPT; \ 145 static void* operator new(size_t size) { \ 146 NLIB_ASSERT(size == sizeof(typeName)); \ 147 return ExiAllocator::Alloc(size); \ 149 static void* operator new(size_t size, const std::nothrow_t&) NLIB_NOEXCEPT { \ 150 NLIB_ASSERT(size == sizeof(typeName)); \ 151 return ExiAllocator::Alloc(size); \ 153 static void* operator new(size_t size, void* ptr) NLIB_NOEXCEPT { \ 154 return ::operator new(size, ptr); \ 156 static void operator delete(void* p) NLIB_NOEXCEPT { ExiAllocator::Dealloc(p); } \ 157 static void operator delete(void* p, const std::nothrow_t&) NLIB_NOEXCEPT { \ 158 ExiAllocator::Dealloc(p); \ 160 static void operator delete(void* p, void* ptr) NLIB_NOEXCEPT { \ 161 return ::operator delete(p, ptr); \ 165 #define NEXI_DISALLOW_NEW_DELETE(typeName) \ 167 static void* operator new(size_t size, void* ptr) NLIB_NOEXCEPT { \ 168 return ::operator new(size, ptr); \ 170 static void operator delete(void* p, void* ptr) NLIB_NOEXCEPT { \ 171 return ::operator delete(p, ptr); \ 173 static void operator delete(void* p) NLIB_NOEXCEPT { \ 178 static void* operator new(size_t size); \ 179 static void* operator new(size_t size, const std::nothrow_t&) NLIB_NOEXCEPT; \ 180 static void operator delete(void* p, const std::nothrow_t&) NLIB_NOEXCEPT; \ 181 static void* operator new[](size_t size); \ 182 static void* operator new[](size_t size, void* p) NLIB_NOEXCEPT; \ 183 static void* operator new[](size_t size, const std::nothrow_t&) NLIB_NOEXCEPT; \ 184 static void operator delete[](void* p) NLIB_NOEXCEPT; \ 185 static void operator delete[](void* p, void* ptr) NLIB_NOEXCEPT; \ 186 static void operator delete[](void* p, const std::nothrow_t&) NLIB_NOEXCEPT 188 #define NEXI_DISALLOW_NEW_DELETE(typeName) NLIB_STATIC_ASSERT(true) 195 #if defined(_MSC_VER) && defined(nx_exi_EXPORTS) 196 #undef NLIB_VIS_PUBLIC 197 #define NLIB_VIS_PUBLIC NLIB_WINIMPORT 200 #endif // INCLUDE_NN_NLIB_EXI_EXIALLOCATOR_H_ XMLパーサーが内部で利用するアロケータです。ユーザーが利用することもできます。
文字列型のtypedefやユーティリティマクロ等が定義されています。
#define NLIB_DISALLOW_COPY_AND_ASSIGN(TypeName)
TypeName で指定されたクラスのコピーコンストラクタと代入演算子を禁止します。
#define NLIB_SAFE_BOOL(class_name, exp)
クラス内に安全なoperator bool()を定義します。 可能であればC++11のexplicit boolを利用します。 ...
bool IsValid() const noexcept
アロケータが初期化されていればtrueを返します。
void swap(ExiAllocatorEx &rhs) noexcept
オブジェクトの内容をスワップします。
constexpr ExiAllocatorEx() noexcept
デフォルトコンストラクタです。
XmlStreamReader, XmlStreamWriter の各インスタンス毎に設定できるアロケータです。
ExiAllocatorEx & operator=(const ExiAllocatorEx &rhs) noexcept
代入演算子です。
#define NLIB_NOEXCEPT
環境に合わせてnoexcept 又は同等の定義がされます。
#define NLIB_CEXPR
利用可能であればconstexprが定義されます。そうでない場合は空文字列です。
~ExiAllocatorEx() noexcept
デストラクタです。
#define NLIB_FINAL
利用可能であればfinalが定義されます。そうでない場合は空文字列です。
ExiAllocatorEx(const ExiAllocatorEx &rhs) noexcept
コピーコンストラクタです。