1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178
|
/* struct::graph - critcl - layer 2 definitions
*
* -> Support for the graph methods in layer 3.
*/
#include <methods.h>
#include <objcmd.h>
/*
*---------------------------------------------------------------------------
*
* g_objcmd --
*
* Implementation of graph objects, the main dispatcher function.
*
* Results:
* A standard Tcl result code.
*
* Side effects:
* Per the called methods.
*
*---------------------------------------------------------------------------
*/
int
g_objcmd (ClientData cd, Tcl_Interp* interp, int objc, Tcl_Obj* CONST* objv)
{
G* g = (G*) cd;
int m;
static CONST char* methods [] = {
"-->", "=", "append", "arc", "arcs", "deserialize",
"destroy", "get", "getall", "keyexists", "keys", "lappend",
"node", "nodes", "serialize", "set", "swap", "unset",
"walk",
NULL
};
enum methods {
M_GSET, M_GASSIGN, M_APPEND, M_ARC, M_ARCS, M_DESERIALIZE,
M_DESTROY, M_GET, M_GETALL, M_KEYEXISTS, M_KEYS, M_LAPPEND,
M_NODE, M_NODES, M_SERIALIZE, M_SET, M_SWAP, M_UNSET,
M_WALK
};
static CONST char* a_methods [] = {
"append", "attr", "delete", "exists", "flip",
"get", "getall", "getunweighted", "getweight", "hasweight", "insert",
"keyexists", "keys", "lappend", "move", "move-source",
"move-target", "nodes", "rename", "set", "setunweighted", "setweight",
"source", "target", "unset", "unsetweight", "weights",
NULL
};
enum a_methods {
MA_APPEND, MA_ATTR, MA_DELETE, MA_EXISTS, MA_FLIP,
MA_GET, MA_GETALL, MA_GETUNWEIGHTED, MA_GETWEIGHT, MA_HASWEIGHT,
MA_INSERT, MA_KEYEXISTS, MA_KEYS, MA_LAPPEND, MA_MOVE,
MA_MOVE_SOURCE, MA_MOVE_TARGET, MA_NODES, MA_RENAME, MA_SET, MA_SETUNWEIGHTED,
MA_SETWEIGHT, MA_SOURCE, MA_TARGET, MA_UNSET, MA_UNSETWEIGHT,
MA_WEIGHTS
};
static CONST char* n_methods [] = {
"append", "attr", "degree", "delete", "exists",
"get", "getall", "insert", "keyexists", "keys",
"lappend", "opposite", "rename", "set", "unset",
NULL
};
enum n_methods {
MN_APPEND, MN_ATTR, MN_DEGREE, MN_DELETE, MN_EXISTS,
MN_GET, MN_GETALL, MN_INSERT, MN_KEYEXISTS, MN_KEYS,
MN_LAPPEND, MN_OPPOSITE, MN_RENAME, MN_SET, MN_UNSET
};
if (objc < 2) {
Tcl_WrongNumArgs (interp, objc, objv, "option ?arg arg ...?");
return TCL_ERROR;
} else if (Tcl_GetIndexFromObj (interp, objv [1], methods, "option",
0, &m) != TCL_OK) {
return TCL_ERROR;
}
/* Dispatch to methods. They check the #args in detail before performing
* the requested functionality
*/
switch (m) {
case M_GSET: return gm_GSET (g, interp, objc, objv);
case M_GASSIGN: return gm_GASSIGN (g, interp, objc, objv);
case M_APPEND: return gm_APPEND (g, interp, objc, objv);
case M_ARC:
if (objc < 3) {
Tcl_WrongNumArgs (interp, objc, objv, "option ?arg arg ...?");
return TCL_ERROR;
} else if (Tcl_GetIndexFromObj (interp, objv [2], a_methods, "option",
0, &m) != TCL_OK) {
return TCL_ERROR;
}
switch (m) {
case MA_APPEND: return gm_arc_APPEND (g, interp, objc, objv);
case MA_ATTR: return gm_arc_ATTR (g, interp, objc, objv);
case MA_DELETE: return gm_arc_DELETE (g, interp, objc, objv);
case MA_EXISTS: return gm_arc_EXISTS (g, interp, objc, objv);
case MA_FLIP: return gm_arc_FLIP (g, interp, objc, objv);
case MA_GET: return gm_arc_GET (g, interp, objc, objv);
case MA_GETALL: return gm_arc_GETALL (g, interp, objc, objv);
case MA_GETUNWEIGHTED: return gm_arc_GETUNWEIGH (g, interp, objc, objv);
case MA_GETWEIGHT: return gm_arc_GETWEIGHT (g, interp, objc, objv);
case MA_HASWEIGHT: return gm_arc_HASWEIGHT (g, interp, objc, objv);
case MA_INSERT: return gm_arc_INSERT (g, interp, objc, objv);
case MA_KEYEXISTS: return gm_arc_KEYEXISTS (g, interp, objc, objv);
case MA_KEYS: return gm_arc_KEYS (g, interp, objc, objv);
case MA_LAPPEND: return gm_arc_LAPPEND (g, interp, objc, objv);
case MA_MOVE: return gm_arc_MOVE (g, interp, objc, objv);
case MA_MOVE_SOURCE: return gm_arc_MOVE_SRC (g, interp, objc, objv);
case MA_MOVE_TARGET: return gm_arc_MOVE_TARG (g, interp, objc, objv);
case MA_NODES: return gm_arc_NODES (g, interp, objc, objv);
case MA_RENAME: return gm_arc_RENAME (g, interp, objc, objv);
case MA_SET: return gm_arc_SET (g, interp, objc, objv);
case MA_SETUNWEIGHTED: return gm_arc_SETUNWEIGH (g, interp, objc, objv);
case MA_SETWEIGHT: return gm_arc_SETWEIGHT (g, interp, objc, objv);
case MA_SOURCE: return gm_arc_SOURCE (g, interp, objc, objv);
case MA_TARGET: return gm_arc_TARGET (g, interp, objc, objv);
case MA_UNSET: return gm_arc_UNSET (g, interp, objc, objv);
case MA_UNSETWEIGHT: return gm_arc_UNSETWEIGH (g, interp, objc, objv);
case MA_WEIGHTS: return gm_arc_WEIGHTS (g, interp, objc, objv);
}
break;
case M_ARCS: return gm_ARCS (g, interp, objc, objv);
case M_DESERIALIZE: return gm_DESERIALIZE (g, interp, objc, objv);
case M_DESTROY: return gm_DESTROY (g, interp, objc, objv);
case M_GET: return gm_GET (g, interp, objc, objv);
case M_GETALL: return gm_GETALL (g, interp, objc, objv);
case M_KEYEXISTS: return gm_KEYEXISTS (g, interp, objc, objv);
case M_KEYS: return gm_KEYS (g, interp, objc, objv);
case M_LAPPEND: return gm_LAPPEND (g, interp, objc, objv);
case M_NODE:
if (objc < 3) {
Tcl_WrongNumArgs (interp, objc, objv, "option ?arg arg ...?");
return TCL_ERROR;
} else if (Tcl_GetIndexFromObj (interp, objv [2], n_methods, "option",
0, &m) != TCL_OK) {
return TCL_ERROR;
}
switch (m) {
case MN_APPEND: return gm_node_APPEND (g, interp, objc, objv);
case MN_ATTR: return gm_node_ATTR (g, interp, objc, objv);
case MN_DEGREE: return gm_node_DEGREE (g, interp, objc, objv);
case MN_DELETE: return gm_node_DELETE (g, interp, objc, objv);
case MN_EXISTS: return gm_node_EXISTS (g, interp, objc, objv);
case MN_GET: return gm_node_GET (g, interp, objc, objv);
case MN_GETALL: return gm_node_GETALL (g, interp, objc, objv);
case MN_INSERT: return gm_node_INSERT (g, interp, objc, objv);
case MN_KEYEXISTS: return gm_node_KEYEXISTS (g, interp, objc, objv);
case MN_KEYS: return gm_node_KEYS (g, interp, objc, objv);
case MN_LAPPEND: return gm_node_LAPPEND (g, interp, objc, objv);
case MN_OPPOSITE: return gm_node_OPPOSITE (g, interp, objc, objv);
case MN_RENAME: return gm_node_RENAME (g, interp, objc, objv);
case MN_SET: return gm_node_SET (g, interp, objc, objv);
case MN_UNSET: return gm_node_UNSET (g, interp, objc, objv);
}
break;
case M_NODES: return gm_NODES (g, interp, objc, objv);
case M_SERIALIZE: return gm_SERIALIZE (g, interp, objc, objv);
case M_SET: return gm_SET (g, interp, objc, objv);
case M_SWAP: return gm_SWAP (g, interp, objc, objv);
case M_UNSET: return gm_UNSET (g, interp, objc, objv);
case M_WALK: return gm_WALK (g, interp, objc, objv);
}
/* Not coming to this place */
}
/*
* Local Variables:
* mode: c
* c-basic-offset: 4
* fill-column: 78
* End:
*/
|