GRASS 8 Programmer's Manual 8.6.0dev(2026)-1d1e47ad9d
Loading...
Searching...
No Matches
tree.h
Go to the documentation of this file.
1/* LIBDGL -- a Directed Graph Library implementation
2 * Copyright (C) 2002 Roberto Micarelli
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18
19/* best view tabstop=4
20 */
21
22#ifndef _DGL_TREE_H_
23#define _DGL_TREE_H_
24
25#define USE_THREADED_AVL
26
27#if defined(USE_THREADED_AVL)
28#include "tavl.h"
29#define avl_table tavl_table
30#define avl_traverser tavl_traverser
31#define avl_create tavl_create
32#define avl_copy tavl_copy
33#define avl_destroy tavl_destroy
34#define avl_probe tavl_probe
35#define avl_insert tavl_insert
36#define avl_replace tavl_replace
37#define avl_delete tavl_delete
38#define avl_find tavl_find
39#define avl_assert_insert tavl_assert_insert
40#define avl_assert_delete tavl_assert_delete
41#define avl_t_init tavl_t_init
42#define avl_t_first tavl_t_first
43#define avl_t_last tavl_t_last
44#define avl_t_find tavl_t_find
45#define avl_t_insert tavl_t_insert
46#define avl_t_copy tavl_t_copy
47#define avl_t_next tavl_t_next
48#define avl_t_prev tavl_t_prev
49#define avl_t_cur tavl_t_cur
50#define avl_t_replace tavl_t_replace
51#else
52#include "avl.h"
53#endif
54
55extern void *dglTreeGetAllocator(void);
56
57/*
58 * Define a node as it is hosted in pNodeTree
59 */
60typedef struct _dglTreeNode {
61 long nKey;
62 void *pv;
63 void *pv2;
66extern void dglTreeNodeCancel(void *pvNode, void *pvParam);
67extern int dglTreeNodeCompare(const void *pvNodeA, const void *pvNodeB,
68 void *pvParam);
69extern dglTreeNode_s *dglTreeNodeAdd(void *pvAVL, dglInt32_t nKey);
70
71/*
72 * Define a version-2 node as it is hosted in pNodeTree
73 */
74typedef struct _dglTreeNode2 {
75 long nKey;
76 void *pv;
77 void *pv2;
78 void *pv3;
81extern void dglTreeNode2Cancel(void *pvNode, void *pvParam);
82extern int dglTreeNode2Compare(const void *pvNodeA, const void *pvNodeB,
83 void *pvParam);
84extern dglTreeNode2_s *dglTreeNode2Add(void *pvAVL, dglInt32_t nKey);
85
86/*
87 * Define a edge as it is hosted in pEdgeTree
88 */
94extern void dglTreeEdgeCancel(void *pvEdge, void *pvParam);
95extern int dglTreeEdgeCompare(const void *pvEdgeA, const void *pvEdgeB,
96 void *pvParam);
97extern dglTreeEdge_s *dglTreeEdgeAdd(void *pvAVL, dglInt32_t nKey);
98
99/*
100 * Define a dummy entry to 'touch' selected item with a dglInt32_t key
101 * i.e. used to mark visited nodes in a greedy or tree-growing algorithm
102 */
107extern void dglTreeTouchI32Cancel(void *pvTouchI32, void *pvParam);
108extern int dglTreeTouchI32Compare(const void *pvTouchI32A,
109 const void *pvTouchI32B, void *pvParam);
110extern dglTreeTouchI32_s *dglTreeTouchI32Add(void *pvAVL, dglInt32_t nKey);
111
112/*
113 * Define a entry to maintain a predecessor/distance network in shortest-path
114 * computation
115 */
125extern void dglTreePredistCancel(void *pvPredist, void *pvParam);
126extern int dglTreePredistCompare(const void *pvPredistA, const void *pvPredistB,
127 void *pvParam);
128extern dglTreePredist_s *dglTreePredistAdd(void *pvAVL, dglInt32_t nKey);
129
130/*
131 * 32bit-key Node Prioritizer
132 */
139extern void dglTreeNodePri32Cancel(void *pvNodePri32, void *pvParam);
140extern int dglTreeNodePri32Compare(const void *pvNodePri32A,
141 const void *pvNodePri32B, void *pvParam);
142extern dglTreeNodePri32_s *dglTreeNodePri32Add(void *pvAVL, dglInt32_t nKey);
143
144/*
145 * 32bit-key Edge Prioritizer
146 */
153extern void dglTreeEdgePri32Cancel(void *pvEdgePri32, void *pvParam);
154extern int dglTreeEdgePri32Compare(const void *pvEdgePri32A,
155 const void *pvEdgePri32B, void *pvParam);
156extern dglTreeEdgePri32_s *dglTreeEdgePri32Add(void *pvAVL, dglInt32_t nKey);
157
158#endif
dglInt32_t * pnData
Definition tree.h:150
dglInt32_t nKey
Definition tree.h:148
dglInt32_t cnData
Definition tree.h:149
dglInt32_t nKey
Definition tree.h:90
void * pv
Definition tree.h:91
void * pv
Definition tree.h:76
void * pv3
Definition tree.h:78
void * pv2
Definition tree.h:77
long nKey
Definition tree.h:75
dglInt32_t cnVal
Definition tree.h:135
dglInt32_t * pnVal
Definition tree.h:136
dglInt32_t nKey
Definition tree.h:134
void * pv2
Definition tree.h:63
long nKey
Definition tree.h:61
void * pv
Definition tree.h:62
dglByte_t bFlags
Definition tree.h:122
dglInt32_t nKey
Definition tree.h:117
dglInt32_t nDistance
Definition tree.h:119
dglInt32_t nCost
Definition tree.h:120
dglInt32_t nFrom
Definition tree.h:118
dglInt32_t * pnEdge
Definition tree.h:121
dglInt32_t nKey
Definition tree.h:104
int dglTreeNode2Compare(const void *pvNodeA, const void *pvNodeB, void *pvParam)
Definition tree.c:108
void dglTreePredistCancel(void *pvPredist, void *pvParam)
Definition tree.c:252
int dglTreeTouchI32Compare(const void *pvTouchI32A, const void *pvTouchI32B, void *pvParam)
Definition tree.c:207
void dglTreeEdgePri32Cancel(void *pvEdgePri32, void *pvParam)
Definition tree.c:352
dglTreeEdgePri32_s * dglTreeEdgePri32Alloc(void)
Definition tree.c:343
struct _dglTreeNode dglTreeNode_s
dglTreeNode2_s * dglTreeNode2Add(void *pvAVL, dglInt32_t nKey)
Definition tree.c:120
void dglTreeEdgeCancel(void *pvEdge, void *pvParam)
Definition tree.c:152
int dglTreePredistCompare(const void *pvPredistA, const void *pvPredistB, void *pvParam)
Definition tree.c:257
int dglTreeNodeCompare(const void *pvNodeA, const void *pvNodeB, void *pvParam)
Definition tree.c:54
struct _dglTreeEdgePri32 dglTreeEdgePri32_s
dglTreeNode2_s * dglTreeNode2Alloc(void)
Definition tree.c:89
dglTreeEdge_s * dglTreeEdgeAlloc(void)
Definition tree.c:143
struct _dglTreeNode2 dglTreeNode2_s
dglTreeEdge_s * dglTreeEdgeAdd(void *pvAVL, dglInt32_t nKey)
Definition tree.c:171
dglTreeNode_s * dglTreeNodeAdd(void *pvAVL, dglInt32_t nKey)
Definition tree.c:66
void dglTreeNode2Cancel(void *pvNode, void *pvParam)
Definition tree.c:97
dglTreeNodePri32_s * dglTreeNodePri32Add(void *pvAVL, dglInt32_t nKey)
Definition tree.c:320
void * dglTreeGetAllocator(void)
Definition tree.c:406
struct _dglTreeNodePri32 dglTreeNodePri32_s
void dglTreeNodePri32Cancel(void *pvNodePri32, void *pvParam)
Definition tree.c:302
dglTreeTouchI32_s * dglTreeTouchI32Add(void *pvAVL, dglInt32_t nKey)
Definition tree.c:220
struct _dglTreeTouchI32 dglTreeTouchI32_s
void dglTreeNodeCancel(void *pvNode, void *pvParam)
Definition tree.c:45
dglTreeTouchI32_s * dglTreeTouchI32Alloc(void)
Definition tree.c:194
dglTreePredist_s * dglTreePredistAlloc(void)
Definition tree.c:243
int dglTreeEdgeCompare(const void *pvEdgeA, const void *pvEdgeB, void *pvParam)
Definition tree.c:159
dglTreePredist_s * dglTreePredistAdd(void *pvAVL, dglInt32_t nKey)
Definition tree.c:270
dglTreeNodePri32_s * dglTreeNodePri32Alloc(void)
Definition tree.c:293
dglTreeEdgePri32_s * dglTreeEdgePri32Add(void *pvAVL, dglInt32_t nKey)
Definition tree.c:373
struct _dglTreePredist dglTreePredist_s
dglTreeNode_s * dglTreeNodeAlloc(void)
Definition tree.c:36
int dglTreeEdgePri32Compare(const void *pvEdgePri32A, const void *pvEdgePri32B, void *pvParam)
Definition tree.c:360
void dglTreeTouchI32Cancel(void *pvTouchI32, void *pvParam)
Definition tree.c:202
struct _dglTreeEdge dglTreeEdge_s
int dglTreeNodePri32Compare(const void *pvNodePri32A, const void *pvNodePri32B, void *pvParam)
Definition tree.c:307
long dglInt32_t
Definition type.h:36