| Index: core/fxcrt/include/fx_memory.h
|
| diff --git a/core/fxcrt/include/fx_memory.h b/core/fxcrt/include/fx_memory.h
|
| index c3dafc8d5e0e52acc9c991a574c94347358fb8d2..2614016550d3d57251d9adbffa9c2ab05e309ba8 100644
|
| --- a/core/fxcrt/include/fx_memory.h
|
| +++ b/core/fxcrt/include/fx_memory.h
|
| @@ -74,6 +74,32 @@ inline void* FX_ReallocOrDie(void* ptr,
|
|
|
| #define FX_Free(ptr) free(ptr)
|
|
|
| +// The FX_ArraySize(arr) macro returns the # of elements in an array arr.
|
| +// The expression is a compile-time constant, and therefore can be
|
| +// used in defining new arrays, for example. If you use FX_ArraySize on
|
| +// a pointer by mistake, you will get a compile-time error.
|
| +//
|
| +// One caveat is that FX_ArraySize() doesn't accept any array of an
|
| +// anonymous type or a type defined inside a function.
|
| +#define FX_ArraySize(array) (sizeof(ArraySizeHelper(array)))
|
| +
|
| +// This template function declaration is used in defining FX_ArraySize.
|
| +// Note that the function doesn't need an implementation, as we only
|
| +// use its type.
|
| +template <typename T, size_t N>
|
| +char(&ArraySizeHelper(T(&array)[N]))[N];
|
| +
|
| +// Used with std::unique_ptr to FX_Free raw memory.
|
| +struct FxFreeDeleter {
|
| + inline void operator()(void* ptr) const { FX_Free(ptr); }
|
| +};
|
| +
|
| +// Used with std::unique_ptr to Release() objects that can't be deleted.
|
| +template <class T>
|
| +struct ReleaseDeleter {
|
| + inline void operator()(T* ptr) const { ptr->Release(); }
|
| +};
|
| +
|
| class CFX_DestructObject {
|
| public:
|
| virtual ~CFX_DestructObject() {}
|
|
|