File: component.c

package info (click to toggle)
graphviz 1.7.16-2
  • links: PTS
  • area: non-free
  • in suites: woody
  • size: 11,124 kB
  • ctags: 12,650
  • sloc: ansic: 131,002; sh: 7,483; makefile: 1,954; tcl: 1,760; yacc: 1,758; perl: 253; awk: 150; lex: 96
file content (49 lines) | stat: -rw-r--r-- 823 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/* component.c
 */

#include "structs.h"
#include "component.h"

#ifdef DMALLOC
#include "dmalloc.h"
#endif

static Agnode_t*  
getRoot (Agnode_t* n)
{
    Agnode_t*  root = n;
    Agnode_t*  pp;

    while ((pp = rootOf(root)) != 0) root = pp;
    for (; n != root; n = pp) {
      pp = rootOf(n);
      rootOf(n) = root;
    }
    return root;
}

int 
sameComponent (Agnode_t* p, Agnode_t* q)
{
    return (getRoot(p) == getRoot(q));
}

void 
merge (Agnode_t* p, Agnode_t* q)
{
    Agnode_t*  rootp;
    Agnode_t*  rootq;

    rootp = getRoot (p);
    rootq = getRoot (q);
    if (rootp != rootq) {
      if (sizeOf(rootp) > sizeOf(rootq)) {
        rootOf(rootq) = rootp;
        sizeOf(rootp) += sizeOf(rootq);
      }
      else {
        rootOf(rootp) = rootq;
        sizeOf(rootq) += sizeOf(rootp);
      }
    }
}