]> git.cworth.org Git - apitrace/blobdiff - trace.py
More efficient enum representation.
[apitrace] / trace.py
index da7f9ce5f9dedc5ccb8cd11f64e21146049c1cce..47360a88f2940eea7996381cd783ac7c1146f381 100644 (file)
--- a/trace.py
+++ b/trace.py
@@ -68,15 +68,22 @@ class DumpDeclarator(stdapi.OnceVisitor):
 
     def visit_enum(self, enum):
         print 'static void __traceEnum%s(const %s value) {' % (enum.id, enum.expr)
+        n = len(enum.values)
+        for i in range(n):
+            value = enum.values[i]
+            print '    static const Trace::EnumSig sig%u = {%u, "%s", %s};' % (i, enum.vid + i, value, value)
+        print '    const Trace::EnumSig *sig;'
         print '    switch(value) {'
-        for value in enum.values:
+        for i in range(n):
+            value = enum.values[i]
             print '    case %s:' % value
-            print '        Trace::LiteralNamedConstant("%s", %s);' % (value, value)
+            print '        sig = &sig%u;' % i
             print '        break;'
         print '    default:'
         print '        Trace::LiteralSInt(value);'
-        print '        break;'
+        print '        return;'
         print '    }'
+        print '        Trace::LiteralEnum(sig);'
         print '}'
         print