From: Matthew Fernandez Date: Tue, 16 Aug 2022 03:35:13 +0000 (-0700) Subject: tcldot: inline and simplify 'MATCHES_OPTION' X-Git-Tag: 5.0.1~3^2~3 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=45935340d4beea9dc026fb72073799eb5c85b9cf;p=graphviz tcldot: inline and simplify 'MATCHES_OPTION' I guess in the past this was an optimization. In a modern environment this does little other than obscure the intent of this code. --- diff --git a/tclpkg/tcldot/tcldot-edgecmd.c b/tclpkg/tcldot/tcldot-edgecmd.c index cace4dd81..9d7efd60f 100644 --- a/tclpkg/tcldot/tcldot-edgecmd.c +++ b/tclpkg/tcldot/tcldot-edgecmd.c @@ -8,6 +8,7 @@ * Contributors: Details at https://graphviz.org *************************************************************************/ +#include #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 diff --git a/tclpkg/tcldot/tcldot-graphcmd.c b/tclpkg/tcldot/tcldot-graphcmd.c index e7ee1deae..f858b3e66 100644 --- a/tclpkg/tcldot/tcldot-graphcmd.c +++ b/tclpkg/tcldot/tcldot-graphcmd.c @@ -9,6 +9,7 @@ *************************************************************************/ #include +#include #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], diff --git a/tclpkg/tcldot/tcldot-nodecmd.c b/tclpkg/tcldot/tcldot-nodecmd.c index b52e7875e..1fd160336 100644 --- a/tclpkg/tcldot/tcldot-nodecmd.c +++ b/tclpkg/tcldot/tcldot-nodecmd.c @@ -8,6 +8,7 @@ * Contributors: Details at https://graphviz.org *************************************************************************/ +#include #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; diff --git a/tclpkg/tcldot/tcldot.c b/tclpkg/tcldot/tcldot.c index b747124cf..36adce920 100644 --- a/tclpkg/tcldot/tcldot.c +++ b/tclpkg/tcldot/tcldot.c @@ -8,7 +8,7 @@ * Contributors: Details at https://graphviz.org *************************************************************************/ - +#include #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:", diff --git a/tclpkg/tcldot/tcldot.h b/tclpkg/tcldot/tcldot.h index ca5be8358..ce3822b09 100644 --- a/tclpkg/tcldot/tcldot.h +++ b/tclpkg/tcldot/tcldot.h @@ -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)