File: HTBTree.html

package info (click to toggle)
cern-httpd 3.0A-1
  • links: PTS
  • area: main
  • in suites: hamm
  • size: 5,392 kB
  • ctags: 6,554
  • sloc: ansic: 37,902; makefile: 1,746; perl: 535; csh: 167; sh: 143
file content (90 lines) | stat: -rw-r--r-- 2,036 bytes parent folder | download | duplicates (6)
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<HEADER>
<TITLE>/Net/dxcern/userd/timbl/hypertext/WWW/Library/Implementation/HTBTree.html</TITLE>
<NEXTID N="1">
</HEADER>
<BODY>
<H1>Balanced Binary Tree for sorting
things</H1>Tree creation, traversal and freeing.
 User-supplied comparison routine.<P>
Author: Arthur Secret, CERN. Public
domain.  Please mail bugs and changes
to www-request@info.cern.ch<P>
part of <A
NAME=z0 HREF="Overview.html">libWWW</A>
<PRE>#ifdef SHORT_NAMES
#define	HTBTree_new		HTBTNew
#define	HTBTree_free		HTBTFree
#define HTBTreeAndObject_free	HTBTAOFr
#define HTBTree_add		HTBTAdd
#define	HTBTree_next		HTBTNext
/* #define	HTBTree_object		HTBTObje already a macro */
#endif


</PRE>
<H2>Data structures</H2>
<PRE>typedef struct _HTBTree_element {
    void			*object;	/* User object */
    struct _HTBTree_element	*up;
    struct _HTBTree_element	*left;
    int				left_depth;
    struct _HTBTree_element	*right;
    int				right_depth;
} HTBTElement;

typedef int (*HTComparer) PARAMS((void * a, void * b));

typedef struct _HTBTree_top {
    HTComparer			compare;
    struct _HTBTree_element	*top;   
} HTBTree;


</PRE>
<H2>Create a binary tree given its discrimination
routine</H2>
<PRE>extern HTBTree * HTBTree_new PARAMS((HTComparer comp));



</PRE>
<H2>Free storage of the tree but not
of the objects</H2>
<PRE>extern void HTBTree_free PARAMS((HTBTree* tree));



</PRE>
<H2>Free storage of the tree and of the
objects</H2>
<PRE>extern void HTBTreeAndObject_free PARAMS((HTBTree* tree));



</PRE>
<H2>Add an object to a binary tree</H2>
<PRE>
extern void HTBTree_add PARAMS((HTBTree* tree, void * object));


</PRE>
<H2>Find user object for element</H2>
<PRE>#define HTBTree_object(element)  ((element)->object)


</PRE>
<H2>Find next element in depth-first
order</H2>
<H3>On entry,</H3>
<DL>
<DT>ele
<DD>if NULL, start with leftmost element.
if != 0 give next object to the right.
<DT>returns
<DD>Pointer to element ot NULL
if none left.
</DL>

<PRE>extern HTBTElement * HTBTree_next PARAMS((HTBTree* tree, HTBTElement * ele));

</PRE>end</BODY>