Beispiel #1
0
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;
}
Beispiel #2
0
/*
 * 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;
}
Beispiel #3
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);
}
Beispiel #4
0
/*-------------------------------------------------------------------------*\
 * 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;
}
Beispiel #5
0
void GVNode::renameGVNode(QString name)
{
    QString temp(gv_node->name);
    agstrfree(gv_node->name);
    gv_node->name = agstrdup(name.toUtf8().data());
}
Beispiel #6
0
static void idfree(void *state, int objtype, unsigned long id)
{
    NOTUSED(objtype);
    if (id % 2 == 0)
	agstrfree((Agraph_t *) state, (char *) id);
}
Beispiel #7
0
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;
}