int agxset(void *obj, int index, char *buf) { char **p; if (index >= 0) { p = ((Agraph_t *) obj)->attr; agstrfree(p[index]); p[index] = agstrdup(buf); return 0; } else return -1; }
/* * Delete an object from Lua registry. */ int del_object(lua_State *L, void *key) { char *skey; TRACE("del_object(): key=%p\n", key); lua_pushlightuserdata(L, key); /* ?, key */ lua_pushnil(L); /* ?, key, nil */ lua_rawset(L, LUA_REGISTRYINDEX); /* ? */ skey = agget(key, ".attrib"); if (skey && (strlen(skey) != 0)) { lua_pushstring(L, skey); lua_pushnil(L); lua_rawset(L, LUA_REGISTRYINDEX); agset(key, ".attrib", NULL); agstrfree(skey); } return 0; }
static void myiddisc_free(void *state, int objtype, unsigned long id) { gctx_t *gctx = (gctx_t *)state; /* FIXME no obj* available ictx_t *ictx = gctx->ictx; char buf[32] = ""; switch (objtype) { case AGRAPH: sprintf(buf,"graph%lu",id); break; case AGNODE: sprintf(buf,"node%lu",id); break; case AGINEDGE: case AGOUTEDGE: sprintf(buf,"edge%lu",id); break; } Tcl_DeleteCommand(ictx->interp, buf); */ if (id % 2 == 0) agstrfree(gctx->g, (char *) id); }
/*-------------------------------------------------------------------------*\ * Method: n.rename(self, name) * Renames a graph. Null name will assign an auto-name 'node@ID'. * Returns old name. * Example: * oldname, err = n:rename("NODENEWNAME") or n:rename() \*-------------------------------------------------------------------------*/ static int gr_rename(lua_State *L) { char sbuf[32]; gr_node_t *ud = tonode(L, 1, STRICT); char *name = (char *) lua_tostring(L, 2); char *oldname = agnameof(ud->n); if (!name){ sprintf(sbuf, "node@%d", AGID(ud->n)); agrename(ud->n, agstrdup(sbuf)); free(ud->name); ud->name = strdup(sbuf); } else { agrename(ud->n, agstrdup(name)); free(ud->name); ud->name = strdup(name); } lua_pushstring(L, oldname); agstrfree(oldname); return 1; }
void GVNode::renameGVNode(QString name) { QString temp(gv_node->name); agstrfree(gv_node->name); gv_node->name = agstrdup(name.toUtf8().data()); }
static void idfree(void *state, int objtype, unsigned long id) { NOTUSED(objtype); if (id % 2 == 0) agstrfree((Agraph_t *) state, (char *) id); }
static void end_edgestmt(void) { objstack_t *old_SP; objlist_t *tailptr,*headptr,*freeptr; Agraph_t *t_graph,*h_graph; Agnode_t *t_node,*h_node,*t_first,*h_first; Agedge_t *e; char *tport,*hport; for (tailptr = SP->list; tailptr->link; tailptr = tailptr->link) { headptr = tailptr->link; tport = tailptr->data.port; hport = headptr->data.port; if (TAG_OF(tailptr->data.obj) == TAG_NODE) { t_graph = NULL; t_first = (Agnode_t*)(tailptr->data.obj); } else { t_graph = (Agraph_t*)(tailptr->data.obj); t_first = agfstnode(t_graph); } if (TAG_OF(headptr->data.obj) == TAG_NODE) { h_graph = NULL; h_first = (Agnode_t*)(headptr->data.obj); } else { h_graph = (Agraph_t*)(headptr->data.obj); h_first = agfstnode(h_graph); } for (t_node = t_first; t_node; t_node = t_graph ? agnxtnode(t_graph,t_node) : NULL) { for (h_node = h_first; h_node; h_node = h_graph ? agnxtnode(h_graph,h_node) : NULL ) { e = agedge(G,t_node,h_node); if (e) { char *tp = tport; char *hp = hport; if ((e->tail != e->head) && (e->head == t_node)) { /* could happen with an undirected edge */ char *temp; temp = tp; tp = hp; hp = temp; } if (tp && tp[0]) { agxset(e,TAILX,tp); agstrfree(tp); } if (hp && hp[0]) { agxset(e,HEADX,hp); agstrfree(hp); } } } } } tailptr = SP->list; while (tailptr) { freeptr = tailptr; tailptr = tailptr->link; if (TAG_OF(freeptr->data.obj) == TAG_NODE) free(freeptr); } if (G != SP->subg) abort(); agpopproto(G); In_edge_stmt = SP->in_edge_stmt; old_SP = SP; SP = SP->link; In_decl = FALSE; free(old_SP); Current_class = TAG_GRAPH; }