]> granicus.if.org Git - graphviz/commitdiff
tcldot: inline and simplify 'MATCHES_OPTION'
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Tue, 16 Aug 2022 03:35:13 +0000 (20:35 -0700)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Sat, 20 Aug 2022 00:23:26 +0000 (17:23 -0700)
I guess in the past this was an optimization. In a modern environment this does
little other than obscure the intent of this code.

tclpkg/tcldot/tcldot-edgecmd.c
tclpkg/tcldot/tcldot-graphcmd.c
tclpkg/tcldot/tcldot-nodecmd.c
tclpkg/tcldot/tcldot.c
tclpkg/tcldot/tcldot.h

index cace4dd814aaee29847c1a40e7671ebdd9fbe958..9d7efd60fe842ec4161bb13aa3b643148f4192b7 100644 (file)
@@ -8,6 +8,7 @@
  * Contributors: Details at https://graphviz.org
  *************************************************************************/
 
+#include <string.h>
 #include "tcldot.h"
 
 int edgecmd(ClientData clientData, Tcl_Interp * interp,
@@ -18,8 +19,8 @@ int edgecmd(ClientData clientData, Tcl_Interp * interp,
 #endif                         /* TCLOBJ */
     )
 {
-    char c, *s, **argv2;
-    int i, j, length, argc2;
+    char *s, **argv2;
+    int i, j, argc2;
     Agraph_t *g;
     Agedge_t *e;
     Agsym_t *a;
@@ -36,23 +37,20 @@ int edgecmd(ClientData clientData, Tcl_Interp * interp,
     }
     g = agraphof(agtail(e));
 
-    c = argv[1][0];
-    length = strlen(argv[1]);
-
-    if (MATCHES_OPTION("delete", argv[1], c, length)) {
+    if (strcmp("delete", argv[1]) == 0) {
        deleteEdge(gctx, g, e);
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("listattributes", argv[1], c, length)) {
+    } else if (strcmp("listattributes", argv[1]) == 0) {
        listEdgeAttrs (interp, g);
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("listnodes", argv[1], c, length)) {
+    } else if (strcmp("listnodes", argv[1]) == 0) {
        Tcl_AppendElement(interp, obj2cmd(agtail(e)));
        Tcl_AppendElement(interp, obj2cmd(aghead(e)));
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("queryattributes", argv[1], c, length)) {
+    } else if (strcmp("queryattributes", argv[1]) == 0) {
        for (i = 2; i < argc; i++) {
            if (Tcl_SplitList
                (interp, argv[i], &argc2,
@@ -70,7 +68,7 @@ int edgecmd(ClientData clientData, Tcl_Interp * interp,
        }
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("queryattributevalues", argv[1], c, length)) {
+    } else if (strcmp("queryattributevalues", argv[1]) == 0) {
        for (i = 2; i < argc; i++) {
            if (Tcl_SplitList
                (interp, argv[i], &argc2,
@@ -89,7 +87,7 @@ int edgecmd(ClientData clientData, Tcl_Interp * interp,
        }
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("setattributes", argv[1], c, length)) {
+    } else if (strcmp("setattributes", argv[1]) == 0) {
        if (argc == 3) {
            if (Tcl_SplitList
                (interp, argv[2], &argc2,
@@ -115,7 +113,7 @@ int edgecmd(ClientData clientData, Tcl_Interp * interp,
        }
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("showname", argv[1], c, length)) {
+    } else if (strcmp("showname", argv[1]) == 0) {
        if (agisdirected(g))
            s = "->";
        else
index e7ee1deaefb6afe8255d7ef728f1466f00c41a6b..f858b3e66a5d9d27c2394f5eddb47fa507a0f8fc 100644 (file)
@@ -9,6 +9,7 @@
  *************************************************************************/
 
 #include <stdbool.h>
+#include <string.h>
 #include "tcldot.h"
 
 int graphcmd(ClientData clientData, Tcl_Interp * interp,
@@ -26,9 +27,8 @@ int graphcmd(ClientData clientData, Tcl_Interp * interp,
     gctx_t *gctx = (gctx_t *)clientData;
     ictx_t *ictx = gctx->ictx;
     Agsym_t *a;
-    char c, buf[256], **argv2;
+    char buf[256], **argv2;
     int i, j, argc2;
-    size_t length;
     GVC_t *gvc = ictx->gvc;
     GVJ_t *job = gvc->job;
 
@@ -42,10 +42,7 @@ int graphcmd(ClientData clientData, Tcl_Interp * interp,
        return TCL_ERROR;
     }
 
-    c = argv[1][0];
-    length = strlen(argv[1]);
-
-    if (MATCHES_OPTION("addedge", argv[1], c, length)) {
+    if (strcmp("addedge", argv[1]) == 0) {
        if ((argc < 4) || (argc % 2)) {
            Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
                             " addedge tail head ?attributename attributevalue? ?...?\"",
@@ -79,7 +76,7 @@ int graphcmd(ClientData clientData, Tcl_Interp * interp,
        setedgeattributes(agroot(g), e, &argv[4], argc - 4);
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("addnode", argv[1], c, length)) {
+    } else if (strcmp("addnode", argv[1]) == 0) {
        if (argc % 2) {
            /* if odd number of args then argv[2] is name */
            n = agnode(g, argv[2], 1);
@@ -92,7 +89,7 @@ int graphcmd(ClientData clientData, Tcl_Interp * interp,
        setnodeattributes(agroot(g), n, &argv[i], argc - i);
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("addsubgraph", argv[1], c, length)) {
+    } else if (strcmp("addsubgraph", argv[1]) == 0) {
        if (argc < 2) {
            Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
                             "\" addsubgraph ?name? ?attributename attributevalue? ?...?",
@@ -110,21 +107,21 @@ int graphcmd(ClientData clientData, Tcl_Interp * interp,
        setgraphattributes(sg, &argv[i], argc - i);
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("countnodes", argv[1], c, length)) {
+    } else if (strcmp("countnodes", argv[1]) == 0) {
        sprintf(buf, "%d", agnnodes(g));
        Tcl_AppendResult(interp, buf, NULL);
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("countedges", argv[1], c, length)) {
+    } else if (strcmp("countedges", argv[1]) == 0) {
        sprintf(buf, "%d", agnedges(g));
        Tcl_AppendResult(interp, buf, NULL);
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("delete", argv[1], c, length)) {
+    } else if (strcmp("delete", argv[1]) == 0) {
        deleteGraph(gctx, g);
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("findedge", argv[1], c, length)) {
+    } else if (strcmp("findedge", argv[1]) == 0) {
        if (argc < 4) {
            Tcl_AppendResult(interp, "wrong # args: should be \"",
                             argv[0], " findedge tailnodename headnodename\"", NULL);
@@ -145,7 +142,7 @@ int graphcmd(ClientData clientData, Tcl_Interp * interp,
        Tcl_AppendElement(interp, obj2cmd(e));
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("findnode", argv[1], c, length)) {
+    } else if (strcmp("findnode", argv[1]) == 0) {
        if (argc < 3) {
            Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " findnode nodename\"", NULL);
            return TCL_ERROR;
@@ -157,31 +154,31 @@ int graphcmd(ClientData clientData, Tcl_Interp * interp,
        Tcl_AppendResult(interp, obj2cmd(n), NULL);
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("layoutedges", argv[1], c, length)) {
+    } else if (strcmp("layoutedges", argv[1]) == 0) {
        g = agroot(g);
        if (!aggetrec (g, "Agraphinfo_t",0))
            tcldot_layout(gvc, g, (argc > 2) ? argv[2] : NULL);
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("layoutnodes", argv[1], c, length)) {
+    } else if (strcmp("layoutnodes", argv[1]) == 0) {
        g = agroot(g);
        if (!aggetrec (g, "Agraphinfo_t",0))
            tcldot_layout(gvc, g, (argc > 2) ? argv[2] : NULL);
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("listattributes", argv[1], c, length)) {
+    } else if (strcmp("listattributes", argv[1]) == 0) {
        listGraphAttrs(interp, g);
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("listedgeattributes", argv[1], c, length)) {
+    } else if (strcmp("listedgeattributes", argv[1]) == 0) {
        listEdgeAttrs (interp, g);
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("listnodeattributes", argv[1], c, length)) {
+    } else if (strcmp("listnodeattributes", argv[1]) == 0) {
        listNodeAttrs (interp, g);
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("listedges", argv[1], c, length)) {
+    } else if (strcmp("listedges", argv[1]) == 0) {
        for (n = agfstnode(g); n; n = agnxtnode(g, n)) {
            for (e = agfstout(g, n); e; e = agnxtout(g, e)) {
                Tcl_AppendElement(interp, obj2cmd(e));
@@ -189,26 +186,26 @@ int graphcmd(ClientData clientData, Tcl_Interp * interp,
        }
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("listnodes", argv[1], c, length)) {
+    } else if (strcmp("listnodes", argv[1]) == 0) {
        for (n = agfstnode(g); n; n = agnxtnode(g, n)) {
            Tcl_AppendElement(interp, obj2cmd(n));
            
        }
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("listnodesrev", argv[1], c, length)) {
+    } else if (strcmp("listnodesrev", argv[1]) == 0) {
        for (n = aglstnode(g); n; n = agprvnode(g, n)) {
            Tcl_AppendElement(interp, obj2cmd(n));
        }
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("listsubgraphs", argv[1], c, length)) {
+    } else if (strcmp("listsubgraphs", argv[1]) == 0) {
        for (sg = agfstsubg(g); sg; sg = agnxtsubg(sg)) {
            Tcl_AppendElement(interp, obj2cmd(sg));
        }
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("queryattributes", argv[1], c, length)) {
+    } else if (strcmp("queryattributes", argv[1]) == 0) {
        for (i = 2; i < argc; i++) {
            if (Tcl_SplitList
                (interp, argv[i], &argc2,
@@ -226,7 +223,7 @@ int graphcmd(ClientData clientData, Tcl_Interp * interp,
        }
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("queryattributevalues", argv[1], c, length)) {
+    } else if (strcmp("queryattributevalues", argv[1]) == 0) {
        for (i = 2; i < argc; i++) {
            if (Tcl_SplitList
                (interp, argv[i], &argc2,
@@ -245,7 +242,7 @@ int graphcmd(ClientData clientData, Tcl_Interp * interp,
        }
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("queryedgeattributes", argv[1], c, length)) {
+    } else if (strcmp("queryedgeattributes", argv[1]) == 0) {
        for (i = 2; i < argc; i++) {
            if (Tcl_SplitList
                (interp, argv[i], &argc2,
@@ -263,7 +260,7 @@ int graphcmd(ClientData clientData, Tcl_Interp * interp,
        }
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("queryedgeattributevalues", argv[1], c, length)) {
+    } else if (strcmp("queryedgeattributevalues", argv[1]) == 0) {
        for (i = 2; i < argc; i++) {
            if (Tcl_SplitList
                (interp, argv[i], &argc2,
@@ -283,7 +280,7 @@ int graphcmd(ClientData clientData, Tcl_Interp * interp,
        }
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("querynodeattributes", argv[1], c, length)) {
+    } else if (strcmp("querynodeattributes", argv[1]) == 0) {
        for (i = 2; i < argc; i++) {
            if (Tcl_SplitList
                (interp, argv[i], &argc2,
@@ -302,7 +299,7 @@ int graphcmd(ClientData clientData, Tcl_Interp * interp,
        }
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("querynodeattributevalues", argv[1], c, length)) {
+    } else if (strcmp("querynodeattributevalues", argv[1]) == 0) {
        for (i = 2; i < argc; i++) {
            if (Tcl_SplitList
                (interp, argv[i], &argc2,
@@ -321,7 +318,7 @@ int graphcmd(ClientData clientData, Tcl_Interp * interp,
        }
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("render", argv[1], c, length)) {
+    } else if (strcmp("render", argv[1]) == 0) {
        char *canvas;
 
        if (argc < 3) {
@@ -355,7 +352,7 @@ int graphcmd(ClientData clientData, Tcl_Interp * interp,
        gvjobs_delete(gvc);
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("setattributes", argv[1], c, length)) {
+    } else if (strcmp("setattributes", argv[1]) == 0) {
        if (argc == 3) {
            if (Tcl_SplitList
                (interp, argv[2], &argc2,
@@ -385,7 +382,7 @@ int graphcmd(ClientData clientData, Tcl_Interp * interp,
        }
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("setedgeattributes", argv[1], c, length)) {
+    } else if (strcmp("setedgeattributes", argv[1]) == 0) {
        if (argc == 3) {
            if (Tcl_SplitList
                (interp, argv[2], &argc2,
@@ -410,7 +407,7 @@ int graphcmd(ClientData clientData, Tcl_Interp * interp,
        }
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("setnodeattributes", argv[1], c, length)) {
+    } else if (strcmp("setnodeattributes", argv[1]) == 0) {
        if (argc == 3) {
            if (Tcl_SplitList
                (interp, argv[2], &argc2,
@@ -435,10 +432,10 @@ int graphcmd(ClientData clientData, Tcl_Interp * interp,
        }
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("showname", argv[1], c, length)) {
+    } else if (strcmp("showname", argv[1]) == 0) {
        Tcl_SetResult(interp, agnameof(g), TCL_STATIC);
        return TCL_OK;
-    } else if (MATCHES_OPTION("write", argv[1], c, length)) {
+    } else if (strcmp("write", argv[1]) == 0) {
        g = agroot(g);
        if (argc < 3) {
            Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0],
index b52e7875e837159588adf934ea73c00a424d88fe..1fd1603363a73bfef0cbc8884592a32074e15eab 100644 (file)
@@ -8,6 +8,7 @@
  * Contributors: Details at https://graphviz.org
  *************************************************************************/
 
+#include <string.h>
 #include "tcldot.h"
 
 int nodecmd(ClientData clientData, Tcl_Interp * interp,
@@ -18,9 +19,8 @@ int nodecmd(ClientData clientData, Tcl_Interp * interp,
 #endif                         /* TCLOBJ */
     )
 {
-    char c, **argv2;
+    char **argv2;
     int i, j, argc2;
-    size_t length;
     Agraph_t *g;
     Agnode_t *n, *head;
     Agedge_t *e;
@@ -38,11 +38,7 @@ int nodecmd(ClientData clientData, Tcl_Interp * interp,
     }
     g = agraphof(n);
 
-    c = argv[1][0];
-    length = strlen(argv[1]);
-
-
-    if (MATCHES_OPTION("addedge", argv[1], c, length)) {
+    if (strcmp("addedge", argv[1]) == 0) {
        if ((argc < 3) || (!(argc % 2))) {
            Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " addedge head ?attributename attributevalue? ?...?\"", NULL);
            return TCL_ERROR;
@@ -63,11 +59,11 @@ int nodecmd(ClientData clientData, Tcl_Interp * interp,
        setedgeattributes(agroot(g), e, &argv[3], argc - 3);
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("delete", argv[1], c, length)) {
+    } else if (strcmp("delete", argv[1]) == 0) {
        deleteNode(gctx, g, n);
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("findedge", argv[1], c, length)) {
+    } else if (strcmp("findedge", argv[1]) == 0) {
        if (argc < 3) {
            Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], " findedge headnodename\"", NULL);
            return TCL_ERROR;
@@ -83,29 +79,29 @@ int nodecmd(ClientData clientData, Tcl_Interp * interp,
        Tcl_AppendElement(interp, obj2cmd(head));
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("listattributes", argv[1], c, length)) {
+    } else if (strcmp("listattributes", argv[1]) == 0) {
        listNodeAttrs (interp, g);
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("listedges", argv[1], c, length)) {
+    } else if (strcmp("listedges", argv[1]) == 0) {
        for (e = agfstedge(g, n); e; e = agnxtedge(g, e, n)) {
            Tcl_AppendElement(interp, obj2cmd(e));
        }
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("listinedges", argv[1], c, length)) {
+    } else if (strcmp("listinedges", argv[1]) == 0) {
        for (e = agfstin(g, n); e; e = agnxtin(g, e)) {
            Tcl_AppendElement(interp, obj2cmd(e));
        }
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("listoutedges", argv[1], c, length)) {
+    } else if (strcmp("listoutedges", argv[1]) == 0) {
        for (e = agfstout(g, n); e; e = agnxtout(g, e)) {
            Tcl_AppendElement(interp, obj2cmd(e));
        }
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("queryattributes", argv[1], c, length)) {
+    } else if (strcmp("queryattributes", argv[1]) == 0) {
        for (i = 2; i < argc; i++) {
            if (Tcl_SplitList
                (interp, argv[i], &argc2,
@@ -123,7 +119,7 @@ int nodecmd(ClientData clientData, Tcl_Interp * interp,
        }
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("queryattributevalues", argv[1], c, length)) {
+    } else if (strcmp("queryattributevalues", argv[1]) == 0) {
        for (i = 2; i < argc; i++) {
            if (Tcl_SplitList
                (interp, argv[i], &argc2,
@@ -142,7 +138,7 @@ int nodecmd(ClientData clientData, Tcl_Interp * interp,
        }
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("setattributes", argv[1], c, length)) {
+    } else if (strcmp("setattributes", argv[1]) == 0) {
        g = agroot(g);
        if (argc == 3) {
            if (Tcl_SplitList
@@ -169,7 +165,7 @@ int nodecmd(ClientData clientData, Tcl_Interp * interp,
        }
        return TCL_OK;
 
-    } else if (MATCHES_OPTION("showname", argv[1], c, length)) {
+    } else if (strcmp("showname", argv[1]) == 0) {
        Tcl_SetResult(interp, agnameof(n), TCL_STATIC);
        return TCL_OK;
 
index b747124cf1e78363251e823f95afd83f86fe25b3..36adce920ecc0134183dff0cda0510bb36264d50 100644 (file)
@@ -8,7 +8,7 @@
  * Contributors: Details at https://graphviz.org
  *************************************************************************/
 
-
+#include <string.h>
 #include "tcldot.h"
 
 static int dotnew(ClientData clientData, Tcl_Interp * interp,
@@ -21,9 +21,7 @@ static int dotnew(ClientData clientData, Tcl_Interp * interp,
 {
     ictx_t *ictx = (ictx_t *)clientData;
     Agraph_t *g;
-    char c;
     int i;
-    size_t length;
     Agdesc_t kind;
 
     if ((argc < 2)) {
@@ -32,15 +30,13 @@ static int dotnew(ClientData clientData, Tcl_Interp * interp,
                         NULL);
        return TCL_ERROR;
     }
-    c = argv[1][0];
-    length = strlen(argv[1]);
-    if (MATCHES_OPTION("digraph", argv[1], c, length)) {
+    if (strcmp("digraph", argv[1]) == 0) {
        kind = Agdirected;
-    } else if (MATCHES_OPTION("digraphstrict", argv[1], c, length)) {
+    } else if (strcmp("digraphstrict", argv[1]) == 0) {
        kind = Agstrictdirected;
-    } else if (MATCHES_OPTION("graph", argv[1], c, length)) {
+    } else if (strcmp("graph", argv[1]) == 0) {
        kind = Agundirected;
-    } else if (MATCHES_OPTION("graphstrict", argv[1], c, length)) {
+    } else if (strcmp("graphstrict", argv[1]) == 0) {
        kind = Agstrictundirected;
     } else {
        Tcl_AppendResult(interp, "bad graphtype \"", argv[1], "\": must be one of:",
index ca5be8358762b6b180fc0e92696c069f5874cbf6..ce3822b099e092099e6f04e2bffa0168ff52516b 100644 (file)
@@ -99,11 +99,3 @@ extern size_t Tcldot_string_writer(GVJ_t *job, const char *s, size_t len);
 extern size_t Tcldot_channel_writer(GVJ_t *job, const char *s, size_t len);
 
 extern void tcldot_layout(GVC_t *gvc, Agraph_t * g, char *engine);
-
-/* Check whether string str corresponds to option opname.
- * opname: literal string.
- * str: the string to check.
- * str0: first character of str.
- * strn: length of str. */
-#define MATCHES_OPTION(opname, str, str0, strn) \
-       (opname[0] == str0) && (sizeof(opname)-1 == strn) && (strncmp(opname, str, sizeof(opname)) == 0)