Index: mojo/public/system/macros.h |
diff --git a/mojo/public/system/macros.h b/mojo/public/system/macros.h |
index 49c49f2f1f2802f8130ec9855d2837ebba32a79c..ff73658e74b5dfa5b630460214c8ef3cdf891777 100644 |
--- a/mojo/public/system/macros.h |
+++ b/mojo/public/system/macros.h |
@@ -5,10 +5,12 @@ |
#ifndef MOJO_PUBLIC_SYSTEM_MACROS_H_ |
#define MOJO_PUBLIC_SYSTEM_MACROS_H_ |
+#include <stddef.h> |
+ |
#ifdef __cplusplus |
-// Annotate a virtual method indicating it must be overriding a virtual |
-// method in the parent class. |
+// Annotate a virtual method indicating it must be overriding a virtual method |
+// in the parent class. |
// Use like: |
// virtual void foo() OVERRIDE; |
#if defined(_MSC_VER) || defined(__clang__) |
@@ -17,17 +19,29 @@ |
#define MOJO_OVERRIDE |
#endif |
-// A macro to disallow the copy constructor and operator= functions |
-// This should be used in the private: declarations for a class |
+// A macro to disallow the copy constructor and operator= functions. |
+// This should be used in the private: declarations for a class. |
#define MOJO_DISALLOW_COPY_AND_ASSIGN(TypeName) \ |
- TypeName(const TypeName&); \ |
- void operator=(const TypeName&) |
+ TypeName(const TypeName&); \ |
+ void operator=(const TypeName&) |
// Used to assert things at compile time. |
namespace mojo { template <bool> struct CompileAssert {}; } |
#define MOJO_COMPILE_ASSERT(expr, msg) \ |
typedef ::mojo::CompileAssert<(bool(expr))> msg[bool(expr) ? 1 : -1] |
+// Use to calculate the number of elements in an array. |
+// (See |arraysize()| in Chromium's base/basictypes.h for more details.) |
+namespace mojo { |
+template <typename T, size_t N> |
+char (&ArraySizeHelper(T (&array)[N]))[N]; |
+#if !defined(_MSC_VER) |
+template <typename T, size_t N> |
+char (&ArraySizeHelper(const T (&array)[N]))[N]; |
+#endif |
+} // namespace mojo |
+#define MOJO_ARRAYSIZE(array) (sizeof(::mojo::ArraySizeHelper(array))) |
+ |
#endif // __cplusplus |
#endif // MOJO_PUBLIC_SYSTEM_MACROS_H_ |