VERIFY_SIZE_OF (CHAR8, 1);\r
VERIFY_SIZE_OF (CHAR16, 2);\r
\r
+typedef enum {\r
+ __VerifyUint8EnumValue = 0xff\r
+} __VERIFY_UINT8_ENUM_SIZE;\r
+\r
+typedef enum {\r
+ __VerifyUint16EnumValue = 0xffff\r
+} __VERIFY_UINT16_ENUM_SIZE;\r
+\r
+typedef enum {\r
+ __VerifyUint32EnumValue = 0xffffffff\r
+} __VERIFY_UINT32_ENUM_SIZE;\r
+\r
+VERIFY_SIZE_OF (__VERIFY_UINT8_ENUM_SIZE, 4);\r
+VERIFY_SIZE_OF (__VERIFY_UINT16_ENUM_SIZE, 4);\r
+VERIFY_SIZE_OF (__VERIFY_UINT32_ENUM_SIZE, 4);\r
+\r
//\r
// The Microsoft* C compiler can removed references to unreferenced data items\r
// if the /OPT:REF linker option is used. We defined a macro as this is a\r
\r
//\r
// UEFI specification claims 1 and 0. We are concerned about the\r
-// complier portability so we did it this way.\r
+// compiler portability so we did it this way.\r
//\r
\r
///\r
#define RETURN_ADDRESS(L) ((VOID *) 0)\r
#endif\r
\r
+/**\r
+ Return the number of elements in an array.\r
+\r
+ @param Array An object of array type. Array is only used as an argument to\r
+ the sizeof operator, therefore Array is never evaluated. The\r
+ caller is responsible for ensuring that Array's type is not\r
+ incomplete; that is, Array must have known constant size.\r
+\r
+ @return The number of elements in Array. The result has type UINTN.\r
+\r
+**/\r
+#define ARRAY_SIZE(Array) (sizeof (Array) / sizeof ((Array)[0]))\r
+\r
#endif\r
\r