删除以 Graphviz 为库的节点

Deletion of nodes with Graphviz as library

我正在使用 graphviz 作为 C++ 中的库。我用它来布局我的图表,例如计算节点和边缘的位置,但自己进行渲染。

我的问题涉及节点的删除及其对相邻边的影响。不幸的是,graphviz 主页上提供的 none 文档解决了这个问题。在这个 post (Questions about Graphviz API (Graphviz as a library)) 中被隐含地询问但也没有回答。希望能在这里找到答案。

我有: Agraph_t* myGraph 和它的节点之一作为 Agnode_t* myNode。 当我使用 agdelnode(myGraph, myNode) 时,与 myNode 相邻的边会发生什么变化?他们是否已从 head/tail 中删除或分离?

return 类型的 agdelnode(还有 agdeledge 和 agclose)是什么意思?我的猜测是它表明函数成功(0 = 成功)和(所有其他值 = 发生错误)。

这是我从 this 站点获取的 agdelnode() 的源代码。您可以通读并回答您的问题。

int agdelnode(Agraph_t * g, Agnode_t * n) {
  Agedge_t *e, *f;

  if (!agfindnode_by_id(g, AGID(n)))
    return FAILURE; /* bad arg */

    if (g == agroot(g)) {
      for (e = agfstedge(g, n); e; e = f) {
        f = agnxtedge(g, e, n);
        agdeledge(g, e);
      }

      if (g->desc.has_attrs)
        agnodeattr_delete(n);

      agmethod_delete(g, n);
      agrecclose((Agobj_t *) n);
      agfreeid(g, AGNODE, AGID(n));
    }

    if (agapply (g, (Agobj_t *) n, (agobjfn_t) agdelnodeimage, NILnode, FALSE) == SUCCESS) {
      if (g == agroot(g))
        agfree(g, n); 

      return SUCCESS;

   } else
       return FAILURE;
}

When I use agdelnode(myGraph, myNode), what happens to the edges adjacent to myNode? Are they deleted or detatched from their head/tail?

所有与 myNode 相邻的边都将被删除并释放它们的内存。

And what does the return type of agdelnode (also agdeledge and agclose) mean? My guess is that it indicates the function's success with (0 = succesfull) and (every other value = error occurred).

如果节点的内存已成功释放,则返回值为 SUCCESS;否则,返回值为 FAILURE。

这是我对 source code 的解释(link 摘自 Tim Biegeleisen 的回答)。