/* 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", "insert", "keyexists", "keys",
"lappend", "move", "move-source", "move-target", "rename",
"set", "source", "target", "unset",
NULL
};
enum a_methods {
MA_APPEND, MA_ATTR, MA_DELETE, MA_EXISTS, MA_FLIP,
MA_GET, MA_GETALL, MA_INSERT, MA_KEYEXISTS, MA_KEYS,
MA_LAPPEND, MA_MOVE, MA_MOVE_SOURCE, MA_MOVE_TARGET, MA_RENAME,
MA_SET, MA_SOURCE, MA_TARGET, MA_UNSET
};
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_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_RENAME: return gm_arc_RENAME (g, interp, objc, objv);
case MA_SET: return gm_arc_SET (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);
}
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:
*/
syntax highlighted by Code2HTML, v. 0.9.1