#include <gvpr/trie.c>
#define BITS_PER_BYTE 8
+
+static void *int2ptr(Sflong_t i) {
+#ifdef HAVE_INTPTR_T
+ return (void*)(intptr_t)i;
+#else
+ return (void*)i;
+#endif
+}
+
#ifdef HAVE_INTPTR_T
-#define INT2PTR(t,v) ((t)(intptr_t)(v))
#define PTR2INT(v) ((Sflong_t)(intptr_t)(v))
#else
-#define INT2PTR(t,v) ((t)(v))
#define PTR2INT(v) ((Sflong_t)(v))
#endif
if (ref == 0)
return objp;
else if (ref->symbol->lex == DYNAMIC) {
- ptr =
- INT2PTR(void *,
- x->data.variable.dyna->data.variable.dyna->data.
+ ptr = int2ptr(x->data.variable.dyna->data.variable.dyna->data.
constant.value.integer);
if (!ptr) {
exerror("null reference %s in expression %s.%s",
v.integer = PTR2INT(gp);
break;
case F_subg:
- gp = INT2PTR(Agraph_t *, args[0].integer);
+ gp = int2ptr(args[0].integer);
if (gp) {
gp = openSubg(gp, args[1].string);
v.integer = PTR2INT(gp);
}
break;
case F_issubg:
- gp = INT2PTR(Agraph_t *, args[0].integer);
+ gp = int2ptr(args[0].integer);
if (gp) {
v.integer = PTR2INT(agsubg(gp, args[1].string, 0));
} else {
}
break;
case F_fstsubg:
- gp = INT2PTR(Agraph_t *, args[0].integer);
+ gp = int2ptr(args[0].integer);
if (gp) {
gp = agfstsubg(gp);
v.integer = PTR2INT(gp);
}
break;
case F_nxtsubg:
- gp = INT2PTR(Agraph_t *, args[0].integer);
+ gp = int2ptr(args[0].integer);
if (gp) {
gp = agnxtsubg(gp);
v.integer = PTR2INT(gp);
}
break;
case F_node:
- gp = INT2PTR(Agraph_t *, args[0].integer);
+ gp = int2ptr(args[0].integer);
if (gp) {
np = openNode(gp, args[1].string);
v.integer = PTR2INT(np);
}
break;
case F_addnode:
- gp = INT2PTR(Agraph_t *, args[0].integer);
- np = INT2PTR(Agnode_t *, args[1].integer);
+ gp = int2ptr(args[0].integer);
+ np = int2ptr(args[1].integer);
if (!gp) {
error(ERROR_WARNING, "NULL graph passed to addNode()");
v.integer = 0;
v.integer = PTR2INT(addNode(gp, np, 1));
break;
case F_fstnode:
- gp = INT2PTR(Agraph_t *, args[0].integer);
+ gp = int2ptr(args[0].integer);
if (gp) {
np = agfstnode(gp);
v.integer = PTR2INT(np);
}
break;
case F_nxtnode:
- np = INT2PTR(Agnode_t *, args[0].integer);
+ np = int2ptr(args[0].integer);
if (np) {
np = agnxtnode(agroot(np), np);
v.integer = PTR2INT(np);
}
break;
case F_nxtnodesg:
- gp = INT2PTR(Agraph_t *, args[0].integer);
- np = INT2PTR(Agnode_t *, args[1].integer);
+ gp = int2ptr(args[0].integer);
+ np = int2ptr(args[1].integer);
if (!gp)
gp = agroot(np);
if (np) {
}
break;
case F_isnode:
- gp = INT2PTR(Agraph_t *, args[0].integer);
+ gp = int2ptr(args[0].integer);
if (gp) {
v.integer = PTR2INT(agnode(gp, args[1].string, 0));
} else {
}
break;
case F_issubnode:
- gp = INT2PTR(Agraph_t *, args[0].integer);
- np = INT2PTR(Agnode_t *, args[1].integer);
+ gp = int2ptr(args[0].integer);
+ np = int2ptr(args[1].integer);
if (!gp)
gp = agroot(np);
if (np) {
}
break;
case F_indegree:
- gp = INT2PTR(Agraph_t *, args[0].integer);
- np = INT2PTR(Agnode_t *, args[1].integer);
+ gp = int2ptr(args[0].integer);
+ np = int2ptr(args[1].integer);
if (!gp)
gp = agroot(np);
if (np) {
}
break;
case F_outdegree:
- gp = INT2PTR(Agraph_t *, args[0].integer);
- np = INT2PTR(Agnode_t *, args[1].integer);
+ gp = int2ptr(args[0].integer);
+ np = int2ptr(args[1].integer);
if (!gp)
gp = agroot(np);
if (np) {
}
break;
case F_degree:
- gp = INT2PTR(Agraph_t *, args[0].integer);
- np = INT2PTR(Agnode_t *, args[1].integer);
+ gp = int2ptr(args[0].integer);
+ np = int2ptr(args[1].integer);
if (!gp)
gp = agroot(np);
if (np) {
}
break;
case F_isin:
- gp = INT2PTR(Agraph_t *, args[0].integer);
- objp = INT2PTR(Agobj_t *, args[1].integer);
+ gp = int2ptr(args[0].integer);
+ objp = int2ptr(args[1].integer);
if (!gp) {
error(ERROR_WARNING, "NULL graph passed to isIn()");
v.integer = 0;
v.integer = agcontains (gp, objp);
break;
case F_compof:
- gp = INT2PTR(Agraph_t *, args[0].integer);
- np = INT2PTR(Agnode_t *, args[1].integer);
+ gp = int2ptr(args[0].integer);
+ np = int2ptr(args[1].integer);
if (!gp) {
error(ERROR_WARNING, "NULL graph passed to compOf()");
v.integer = 0;
v.integer = PTR2INT(compOf(gp, np));
break;
case F_kindof:
- objp = INT2PTR(Agobj_t *, args[0].integer);
+ objp = int2ptr(args[0].integer);
if (!objp) {
exerror("NULL object passed to kindOf()");
v.string = 0;
key = args[2].string;
if (*key == '\0')
key = 0;
- np = INT2PTR(Agnode_t *, args[0].integer);
- hp = INT2PTR(Agnode_t *, args[1].integer);
+ np = int2ptr(args[0].integer);
+ hp = int2ptr(args[1].integer);
if (!np) {
error(ERROR_WARNING, "NULL tail node passed to edge()");
v.integer = 0;
key = args[3].string;
if (*key == '\0')
key = 0;
- gp = INT2PTR(Agraph_t *, args[0].integer);
- np = INT2PTR(Agnode_t *, args[1].integer);
- hp = INT2PTR(Agnode_t *, args[2].integer);
+ gp = int2ptr(args[0].integer);
+ np = int2ptr(args[1].integer);
+ hp = int2ptr(args[2].integer);
if (!np) {
error(ERROR_WARNING, "NULL tail node passed to edge_sg()");
v.integer = 0;
}
break;
case F_addedge:
- gp = INT2PTR(Agraph_t *, args[0].integer);
- ep = INT2PTR(Agedge_t *, args[1].integer);
+ gp = int2ptr(args[0].integer);
+ ep = int2ptr(args[1].integer);
if (!gp) {
error(ERROR_WARNING, "NULL graph passed to addEdge()");
v.integer = 0;
v.integer = PTR2INT(addEdge(gp, ep, 1));
break;
case F_opp:
- ep = INT2PTR(Agedge_t *, args[0].integer);
- np = INT2PTR(Agnode_t *, args[1].integer);
+ ep = int2ptr(args[0].integer);
+ np = int2ptr(args[1].integer);
if (!ep) {
error(ERROR_WARNING, "NULL edge passed to opp()");
v.integer = 0;
key = args[2].string;
if (*key == '\0')
key = 0;
- np = INT2PTR(Agnode_t *, args[0].integer);
- hp = INT2PTR(Agnode_t *, args[1].integer);
+ np = int2ptr(args[0].integer);
+ hp = int2ptr(args[1].integer);
if (!np) {
error(ERROR_WARNING, "NULL tail node passed to isEdge()");
v.integer = 0;
key = args[3].string;
if (*key == '\0')
key = 0;
- gp = INT2PTR(Agraph_t *, args[0].integer);
- np = INT2PTR(Agnode_t *, args[1].integer);
- hp = INT2PTR(Agnode_t *, args[2].integer);
+ gp = int2ptr(args[0].integer);
+ np = int2ptr(args[1].integer);
+ hp = int2ptr(args[2].integer);
if (!gp)
gp = agroot(np);
if (!np) {
v.integer = PTR2INT(isEdge(gp, np, hp, key));
break;
case F_issubedge:
- gp = INT2PTR(Agraph_t *, args[0].integer);
- ep = INT2PTR(Agedge_t *, args[1].integer);
+ gp = int2ptr(args[0].integer);
+ ep = int2ptr(args[1].integer);
if (!gp)
gp = agroot(ep);
if (ep) {
}
break;
case F_fstout:
- np = INT2PTR(Agnode_t *, args[0].integer);
+ np = int2ptr(args[0].integer);
if (np) {
ep = agfstout(agroot(np), np);
v.integer = PTR2INT(ep);
}
break;
case F_fstoutsg:
- gp = INT2PTR(Agraph_t *, args[0].integer);
- np = INT2PTR(Agnode_t *, args[1].integer);
+ gp = int2ptr(args[0].integer);
+ np = int2ptr(args[1].integer);
if (!gp)
gp = agroot(np);
if (np) {
}
break;
case F_nxtout:
- ep = INT2PTR(Agedge_t *, args[0].integer);
+ ep = int2ptr(args[0].integer);
if (ep) {
ep = agnxtout(agroot(ep), ep);
v.integer = PTR2INT(ep);
}
break;
case F_nxtoutsg:
- gp = INT2PTR(Agraph_t *, args[0].integer);
- ep = INT2PTR(Agedge_t *, args[1].integer);
+ gp = int2ptr(args[0].integer);
+ ep = int2ptr(args[1].integer);
if (!gp)
gp = agroot(ep);
if (ep) {
}
break;
case F_fstin:
- np = INT2PTR(Agnode_t *, args[0].integer);
+ np = int2ptr(args[0].integer);
if (np) {
ep = agfstin(agroot(np), np);
v.integer = PTR2INT(ep);
}
break;
case F_fstinsg:
- gp = INT2PTR(Agraph_t *, args[0].integer);
- np = INT2PTR(Agnode_t *, args[1].integer);
+ gp = int2ptr(args[0].integer);
+ np = int2ptr(args[1].integer);
if (!gp)
gp = agroot(np);
if (np) {
}
break;
case F_nxtin:
- ep = INT2PTR(Agedge_t *, args[0].integer);
+ ep = int2ptr(args[0].integer);
if (ep) {
ep = agnxtin(agroot(ep), ep);
v.integer = PTR2INT(ep);
}
break;
case F_nxtinsg:
- gp = INT2PTR(Agraph_t *, args[0].integer);
- ep = INT2PTR(Agedge_t *, args[1].integer);
+ gp = int2ptr(args[0].integer);
+ ep = int2ptr(args[1].integer);
if (!gp)
gp = agroot(ep);
if (ep) {
}
break;
case F_fstedge:
- np = INT2PTR(Agnode_t *, args[0].integer);
+ np = int2ptr(args[0].integer);
if (np) {
ep = agfstedge(agroot(np), np);
v.integer = PTR2INT(ep);
}
break;
case F_fstedgesg:
- gp = INT2PTR(Agraph_t *, args[0].integer);
- np = INT2PTR(Agnode_t *, args[1].integer);
+ gp = int2ptr(args[0].integer);
+ np = int2ptr(args[1].integer);
if (!gp)
gp = agroot(np);
if (np) {
}
break;
case F_nxtedge:
- ep = INT2PTR(Agedge_t *, args[0].integer);
- np = INT2PTR(Agnode_t *, args[1].integer);
+ ep = int2ptr(args[0].integer);
+ np = int2ptr(args[1].integer);
if (!ep) {
error(ERROR_WARNING, "NULL edge passed to nxtedge()");
v.integer = 0;
}
break;
case F_nxtedgesg:
- gp = INT2PTR(Agraph_t *, args[0].integer);
- ep = INT2PTR(Agedge_t *, args[1].integer);
- np = INT2PTR(Agnode_t *, args[2].integer);
+ gp = int2ptr(args[0].integer);
+ ep = int2ptr(args[1].integer);
+ np = int2ptr(args[2].integer);
if (!gp)
gp = agroot(np);
if (!ep) {
}
break;
case F_copy:
- gp = INT2PTR(Agraph_t *, args[0].integer);
- objp = INT2PTR(Agobj_t *, args[1].integer);
+ gp = int2ptr(args[0].integer);
+ objp = int2ptr(args[1].integer);
if (!objp) {
error(ERROR_WARNING, "NULL object passed to clone()");
v.integer = 0;
v.integer = PTR2INT(copy(gp, objp));
break;
case F_clone:
- gp = INT2PTR(Agraph_t *, args[0].integer);
- objp = INT2PTR(Agobj_t *, args[1].integer);
+ gp = int2ptr(args[0].integer);
+ objp = int2ptr(args[1].integer);
if (!objp) {
error(ERROR_WARNING, "NULL object passed to clone()");
v.integer = 0;
v.integer = PTR2INT(clone(gp, objp));
break;
case F_cloneG:
- gp = INT2PTR(Agraph_t *, args[0].integer);
+ gp = int2ptr(args[0].integer);
if (gp) {
gp = cloneG(gp, args[1].string);
v.integer = PTR2INT(gp);
}
break;
case F_copya:
- objp = INT2PTR(Agobj_t *, args[0].integer);
- objp1 = INT2PTR(Agobj_t *, args[1].integer);
+ objp = int2ptr(args[0].integer);
+ objp1 = int2ptr(args[1].integer);
if (!(objp && objp1)) {
error(ERROR_WARNING, "NULL object passed to copyA()");
v.integer = 0;
v.integer = copyAttr(objp, objp1);
break;
case F_induce:
- gp = INT2PTR(Agraph_t *, args[0].integer);
+ gp = int2ptr(args[0].integer);
if (!gp) {
error(ERROR_WARNING, "NULL graph passed to induce()");
v.integer = 1;
}
break;
case F_write:
- gp = INT2PTR(Agraph_t *, args[0].integer);
+ gp = int2ptr(args[0].integer);
if (!gp) {
error(ERROR_WARNING, "NULL graph passed to write()");
v.integer = 1;
v.integer = sfioWrite (gp, state->outFile, state->dfltIO);
break;
case F_writeg:
- gp = INT2PTR(Agraph_t *, args[0].integer);
+ gp = int2ptr(args[0].integer);
if (!gp) {
error(ERROR_WARNING, "NULL graph passed to writeG()");
v.integer = 1;
v.integer = PTR2INT(gp);
break;
case F_fwriteg:
- gp = INT2PTR(Agraph_t *, args[0].integer);
+ gp = int2ptr(args[0].integer);
if (!gp) {
error(ERROR_WARNING, "NULL graph passed to fwriteG()");
v.integer = 1;
v.string = readLine(pgm, args[0].integer);
break;
case F_isdirect:
- gp = INT2PTR(Agraph_t *, args[0].integer);
+ gp = int2ptr(args[0].integer);
if (!gp) {
error(ERROR_WARNING, "NULL graph passed to isDirect()");
v.integer = 0;
}
break;
case F_isstrict:
- gp = INT2PTR(Agraph_t *, args[0].integer);
+ gp = int2ptr(args[0].integer);
if (!gp) {
error(ERROR_WARNING, "NULL graph passed to isStrict()");
v.integer = 0;
}
break;
case F_delete:
- gp = INT2PTR(Agraph_t *, args[0].integer);
- objp = INT2PTR(Agobj_t *, args[1].integer);
+ gp = int2ptr(args[0].integer);
+ objp = int2ptr(args[1].integer);
if (!objp) {
error(ERROR_WARNING, "NULL object passed to delete()");
v.integer = 1;
v.integer = deleteObj(gp, objp);
break;
case F_lock:
- gp = INT2PTR(Agraph_t *, args[0].integer);
+ gp = int2ptr(args[0].integer);
if (!gp) {
error(ERROR_WARNING, "NULL graph passed to lock()");
v.integer = -1;
v.integer = lockGraph(gp, args[1].integer);
break;
case F_nnodes:
- gp = INT2PTR(Agraph_t *, args[0].integer);
+ gp = int2ptr(args[0].integer);
if (!gp) {
error(ERROR_WARNING, "NULL graph passed to nNodes()");
v.integer = 0;
}
break;
case F_nedges:
- gp = INT2PTR(Agraph_t *, args[0].integer);
+ gp = int2ptr(args[0].integer);
if (!gp) {
error(ERROR_WARNING, "NULL graph passed to nEdges()");
v.integer = 0;
break;
case F_hasattr:
case F_get:
- objp = INT2PTR(Agobj_t *, args[0].integer);
+ objp = int2ptr(args[0].integer);
name = args[1].string;
if (!objp) {
exerror("NULL object passed to aget()/hasAttr()");
}
break;
case F_set:
- objp = INT2PTR(Agobj_t *, args[0].integer);
+ objp = int2ptr(args[0].integer);
if (!objp) {
error(ERROR_WARNING, "NULL object passed to aset()");
v.integer = 1;
}
break;
case F_dset:
- gp = INT2PTR(Agraph_t *, args[0].integer);
+ gp = int2ptr(args[0].integer);
if (gp) {
char* kind = args[1].string;
char* name = args[2].string;
}
break;
case F_fstattr:
- gp = INT2PTR(Agraph_t *, args[0].integer);
+ gp = int2ptr(args[0].integer);
if (gp) {
char* kind = args[1].string;
if (!kind) {
case F_nxtattr:
case F_isattr:
case F_dget:
- gp = INT2PTR(Agraph_t *, args[0].integer);
+ gp = int2ptr(args[0].integer);
if (gp) {
char* kind = args[1].string;
char* name = args[2].string;
v.integer = aghtmlstr(args[0].string);
break;
case F_html:
- gp = INT2PTR(Agraph_t *, args[0].integer);
+ gp = int2ptr(args[0].integer);
if (gp) {
v.string = toHtml(gp, args[1].string);
} else {
} else if (MINNAME <= sym->index && sym->index <= MAXNAME) {
switch (sym->index) {
case V_outgraph:
- state->outgraph = INT2PTR(Agraph_t *, v.integer);
+ state->outgraph = int2ptr(v.integer);
break;
case V_travtype:
iv = v.integer;
iv, typeName(pgm, T_tvtyp));
break;
case V_travroot:
- np = INT2PTR(Agnode_t *, v.integer);
+ np = int2ptr(v.integer);
if (!np || agroot(np) == state->curgraph)
state->tvroot = np;
else {
}
break;
case V_travnext:
- np = INT2PTR(Agnode_t *, v.integer);
+ np = int2ptr(v.integer);
if (!np || agroot(np) == state->curgraph) {
state->tvnext = np;
state->flags |= GV_NEXT_SET;
if (r && r->type == T_tvtyp)
return -1;
- lobjp = INT2PTR(Agobj_t *, l->data.constant.value.integer);
+ lobjp = int2ptr(l->data.constant.value.integer);
if (r)
- robjp = INT2PTR(Agobj_t *, r->data.constant.value.integer);
+ robjp = int2ptr(r->data.constant.value.integer);
else
robjp = 0;
switch (ex->op) {
tvtypeToStr (x->data.constant.value.integer)))
rv = -1;
} else {
- objp = INT2PTR(Agobj_t *, x->data.constant.value.integer);
+ objp = int2ptr(x->data.constant.value.integer);
if (!objp) {
exerror("cannot generate name for NULL %s",
typeName(prog, x->type));
if (type != FLOATING && type <= T_obj)
ret = 0;
} else {
- objp = INT2PTR(Agobj_t *, x->data.constant.value.integer);
+ objp = int2ptr(x->data.constant.value.integer);
switch (type) {
case T_graph:
if (!objp || AGTYPE(objp) == AGRAPH)
static Extype_t keyval(Expr_t * pgm, Extype_t v, int type, Exdisc_t * disc)
{
if (type <= T_obj) {
- v.integer = AGID(INT2PTR(Agobj_t *, v.integer));
+ v.integer = AGID(int2ptr(v.integer));
}
return v;
}