util/u_debug: add description field to debug_named_value
authorJoakim Sindholt <opensource@zhasha.com>
Tue, 1 Jun 2010 18:11:02 +0000 (20:11 +0200)
committerJoakim Sindholt <opensource@zhasha.com>
Thu, 3 Jun 2010 11:45:05 +0000 (13:45 +0200)
src/gallium/auxiliary/util/u_debug.c
src/gallium/auxiliary/util/u_debug.h

index 86db2c2e4b49db693d0810e0fddc785aa866a049..3d913be60626acbc414c7e8de77b844a5ebad9d0 100644 (file)
@@ -42,6 +42,7 @@
 #include "util/u_tile.h" 
 #include "util/u_prim.h" 
 
+#include <limits.h> /* CHAR_BIT */
 
 void _debug_vprintf(const char *format, va_list ap)
 {
@@ -173,6 +174,12 @@ debug_get_num_option(const char *name, long dfault)
    return result;
 }
 
+static INLINE int
+max( int a,
+     int b )
+{
+    return (a > b) ? a : b;
+}
 
 unsigned long
 debug_get_flags_option(const char *name, 
@@ -181,16 +188,21 @@ debug_get_flags_option(const char *name,
 {
    unsigned long result;
    const char *str;
+   const struct debug_named_value *orig = flags;
+   int namealign = 0;
    
    str = os_get_option(name);
    if(!str)
       result = dfault;
    else if (!util_strcmp(str, "help")) {
       result = dfault;
-      while (flags->name) {
-         debug_printf("%s: help for %s: %s [0x%lx]\n", __FUNCTION__, name, flags->name, flags->value);
-         flags++;
-      }
+      debug_printf("%s: help for %s:\n", __FUNCTION__, name);
+      for (; flags->name; ++flags)
+         namealign = max(namealign, strlen(flags->name));
+      for (flags = orig; flags->name; ++flags)
+         debug_printf("| %*s [0x%0*lx]%s%s\n", namealign, flags->name,
+                      sizeof(unsigned long)*CHAR_BIT/4, flags->value,
+                      flags->desc ? " " : "", flags->desc ? flags->desc : "");
    }
    else {
       result = 0;
index e8ff2773e697abcc0f4a59d2ace6c9933a2e9741..1c9624ea3edb9d2881728f51572e47afc921f433 100644 (file)
@@ -230,6 +230,7 @@ struct debug_named_value
 {
    const char *name;
    unsigned long value;
+   const char *desc;
 };
 
 
@@ -252,8 +253,9 @@ struct debug_named_value
  *    ...
  * @endcode
  */
-#define DEBUG_NAMED_VALUE(__symbol) {#__symbol, (unsigned long)__symbol} 
-#define DEBUG_NAMED_VALUE_END {NULL, 0} 
+#define DEBUG_NAMED_VALUE(__symbol) DEBUG_NAMED_VALUE_WITH_DESCRIPTION(__symbol, NULL)
+#define DEBUG_NAMED_VALUE_WITH_DESCRIPTION(__symbol, __desc) {#__symbol, (unsigned long)__symbol, __desc}
+#define DEBUG_NAMED_VALUE_END {NULL, 0, NULL}
 
 
 /**