]> git.cworth.org Git - apitrace/commitdiff
trim: Abstract common stringstream idioms into shared functions.
authorCarl Worth <cworth@cworth.org>
Wed, 15 Aug 2012 00:13:30 +0000 (17:13 -0700)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Thu, 22 Nov 2012 08:03:16 +0000 (08:03 +0000)
Using the new providef, linkf, and unlinkf functions shrinks the code
a bit. It's tempting to provide <stdargs> functions with full
printf-like formatting, but it's really not necessary as of yet.

cli/cli_trim.cpp

index 22cdcd13367d3c0760bc88db5cc189d2f733a912..1a1608447f5c0b0befcc34338b482ba32235e02c 100644 (file)
@@ -173,6 +173,14 @@ class TraceAnalyzer {
         resources[resource].insert(call_no);
     }
 
+    /* Like provide, but with a simply-formatted string, (appending an
+     * integer to the given string). */
+    void providef(std::string resource, int resource_no, trace::CallNo call_no) {
+        std::stringstream ss;
+        ss << resource << resource_no;
+        provide(ss.str(), call_no);
+    }
+
     /* Link: Establish a dependency between resource 'resource' and
      * resource 'dependency'. This dependency is captured by name so
      * that if the list of calls that provide 'dependency' grows
@@ -182,6 +190,15 @@ class TraceAnalyzer {
         dependencies[resource].insert(dependency);
     }
 
+    /* Like link, but with a simply-formatted string, (appending an
+     * integer to the given string). */
+    void linkf(std::string resource, std::string dependency, int dep_no) {
+
+        std::stringstream ss;
+        ss << dependency << dep_no;
+        link(resource, ss.str());
+    }
+
     /* Unlink: Remove dependency from 'resource' on 'dependency'. */
     void unlink(std::string resource, std::string dependency) {
         dependencies[resource].erase(dependency);
@@ -190,6 +207,15 @@ class TraceAnalyzer {
         }
     }
 
+    /* Like unlink, but with a simply-formated string, (appending an
+     * integer to the given string). */
+    void unlinkf(std::string resource, std::string dependency, int dep_no) {
+
+        std::stringstream ss;
+        ss << dependency << dep_no;
+        unlink(resource, ss.str());
+    }
+
     /* Unlink all: Remove dependencies from 'resource' to all other
      * resources. */
     void unlinkAll(std::string resource) {
@@ -348,12 +374,8 @@ class TraceAnalyzer {
 
             if (textures) {
                 for (i = 0; i < textures->size(); i++) {
-                    std::stringstream ss;
-
                     texture = textures->values[i]->toUInt();
-                    ss << "texture-" << texture;
-
-                    provide(ss.str(), call->no);
+                    providef("texture-", texture, call->no);
                 }
             }
             return;
@@ -423,15 +445,10 @@ class TraceAnalyzer {
                 cap == GL_TEXTURE_3D ||
                 cap == GL_TEXTURE_CUBE_MAP)
             {
-                std::stringstream ss;
-
-                ss << "texture-target-" << cap;
-
-                link("render-state", ss.str());
+                linkf("render-state", "texture-target-", cap);
             }
 
             provide("state", call->no);
-
             return;
         }
 
@@ -445,30 +462,18 @@ class TraceAnalyzer {
                 cap == GL_TEXTURE_3D ||
                 cap == GL_TEXTURE_CUBE_MAP)
             {
-                std::stringstream ss;
-
-                ss << "texture-target-" << cap;
-
-                unlink("render-state", ss.str());
+                unlinkf("render-state", "texture-target-", cap);
             }
 
             provide("state", call->no);
-
             return;
         }
 
         if (strcmp(name, "glCreateShader") == 0 ||
             strcmp(name, "glCreateShaderObjectARB") == 0) {
 
-            GLuint shader;
-            std::stringstream ss;
-
-            shader = call->ret->toUInt();
-
-            ss << "shader-" << shader;
-
-            provide(ss.str(), call->no);
-
+            GLuint shader = call->ret->toUInt();
+            providef("shader-", shader, call->no);
             return;
         }
 
@@ -479,30 +484,16 @@ class TraceAnalyzer {
             strcmp(name, "glGetShaderiv") == 0 ||
             strcmp(name, "glGetShaderInfoLog") == 0) {
 
-            GLuint shader;
-            std::stringstream ss;
-
-            shader = call->arg(0).toUInt();
-
-            ss << "shader-" << shader;
-
-            provide(ss.str(), call->no);
-
+            GLuint shader = call->arg(0).toUInt();
+            providef("shader-", shader, call->no);
             return;
         }
 
         if (strcmp(name, "glCreateProgram") == 0 ||
             strcmp(name, "glCreateProgramObjectARB") == 0) {
 
-            GLuint program;
-            std::stringstream ss;
-
-            program = call->ret->toUInt();
-
-            ss << "program-" << program;
-
-            provide(ss.str(), call->no);
-
+            GLuint program = call->ret->toUInt();
+            providef("program-", program, call->no);
             return;
         }
 
@@ -576,14 +567,9 @@ class TraceAnalyzer {
             strcmp(name, "glGetProgramResourceLocationIndex") == 0 ||
             strcmp(name, "glGetVaryingLocationNV") == 0) {
 
-            GLuint program;
-            std::stringstream ss;
-
-            program = call->arg(0).toUInt();
-
-            ss << "program-" << program;
+            GLuint program = call->arg(0).toUInt();
 
-            provide(ss.str(), call->no);
+            providef("program-", program, call->no);
 
             return;
         }
@@ -594,12 +580,7 @@ class TraceAnalyzer {
         if (call->sig->num_args > 0 &&
             strcmp(call->sig->arg_names[0], "location") == 0) {
 
-            std::stringstream ss;
-
-            ss << "program-" << activeProgram;
-
-            provide(ss.str(), call->no);
-
+            providef("program-", activeProgram, call->no);
             return;
         }
 
@@ -618,15 +599,8 @@ class TraceAnalyzer {
              (strcmp(call->sig->arg_names[0], "program") == 0 ||
               strcmp(call->sig->arg_names[0], "programObj") == 0))) {
 
-            GLuint program;
-            std::stringstream ss;
-
-            program = call->arg(0).toUInt();
-
-            ss << "program-" << program;
-
-            provide(ss.str(), call->no);
-
+            GLuint program = call->arg(0).toUInt();
+            providef("program-", program, call->no);
             return;
         }