Index: core/include/fxcrt/fx_basic.h |
diff --git a/core/include/fxcrt/fx_basic.h b/core/include/fxcrt/fx_basic.h |
index 0c84f540e9d17985b8da126b569171322fa83f9d..2a77e6e9473ca7b2d0ec40ee6222881c938698da 100644 |
--- a/core/include/fxcrt/fx_basic.h |
+++ b/core/include/fxcrt/fx_basic.h |
@@ -18,6 +18,22 @@ |
#ifndef _FX_STREAM_H_ |
#include "fx_stream.h" |
#endif |
+ |
+// 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]; |
+ |
class CFX_BinaryBuf : public CFX_Object |
{ |
public: |