util/dump: Use static assertion to detect string table size mismatches.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Sat, 23 Feb 2013 10:50:14 +0000 (10:50 +0000)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Sat, 23 Feb 2013 13:32:34 +0000 (13:32 +0000)
Suggested by Brian Paul.

Could probably be extended to other enums.

Reviewed-by: Brian Paul <brianp@vmware.com>
src/gallium/auxiliary/util/u_dump_defines.c

index 2a996b276de71b0eaa08276df31fc38b98f5a232..cc626877382c9ae8b27cc43a7ed842598770ae9e 100644 (file)
@@ -73,6 +73,23 @@ util_dump_enum_continuous(unsigned value,
    }
 
 
+/**
+ * Same as DEFINE_UTIL_DUMP_CONTINUOUS but with static assertions to detect
+ * failures to update lists.
+ */
+#define DEFINE_UTIL_DUMP_CONTINUOUS_COUNT(_name, _count) \
+   const char * \
+   util_dump_##_name(unsigned value, boolean shortened) \
+   { \
+      STATIC_ASSERT(Elements(util_dump_##_name##_names) == _count); \
+      STATIC_ASSERT(Elements(util_dump_##_name##_short_names) == _count); \
+      if(shortened) \
+         return util_dump_enum_continuous(value, Elements(util_dump_##_name##_short_names), util_dump_##_name##_short_names); \
+      else \
+         return util_dump_enum_continuous(value, Elements(util_dump_##_name##_names), util_dump_##_name##_names); \
+   }
+
+
 static const char *
 util_dump_blend_factor_names[] = {
    UTIL_DUMP_INVALID_NAME, /* 0x0 */
@@ -282,7 +299,7 @@ util_dump_tex_target_short_names[] = {
    "cube_array",
 };
 
-DEFINE_UTIL_DUMP_CONTINUOUS(tex_target)
+DEFINE_UTIL_DUMP_CONTINUOUS_COUNT(tex_target, PIPE_MAX_TEXTURE_TYPES)
 
 
 static const char *