GRASS 8 Programmer's Manual 8.6.0dev(2026)-55de52a352
Loading...
Searching...
No Matches
tree.h
Go to the documentation of this file.
1/* LIBDGL -- a Directed Graph Library implementation
2 * SPDX-FileCopyrightText: 2002 Roberto Micarelli
3 * SPDX-FileCopyrightText: GRASS Development Team
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7/* best view tabstop=4
8 */
9
10#ifndef _DGL_TREE_H_
11#define _DGL_TREE_H_
12
13#define USE_THREADED_AVL
14
15#if defined(USE_THREADED_AVL)
16#include "tavl.h"
17#define avl_table tavl_table
18#define avl_traverser tavl_traverser
19#define avl_create tavl_create
20#define avl_copy tavl_copy
21#define avl_destroy tavl_destroy
22#define avl_probe tavl_probe
23#define avl_insert tavl_insert
24#define avl_replace tavl_replace
25#define avl_delete tavl_delete
26#define avl_find tavl_find
27#define avl_assert_insert tavl_assert_insert
28#define avl_assert_delete tavl_assert_delete
29#define avl_t_init tavl_t_init
30#define avl_t_first tavl_t_first
31#define avl_t_last tavl_t_last
32#define avl_t_find tavl_t_find
33#define avl_t_insert tavl_t_insert
34#define avl_t_copy tavl_t_copy
35#define avl_t_next tavl_t_next
36#define avl_t_prev tavl_t_prev
37#define avl_t_cur tavl_t_cur
38#define avl_t_replace tavl_t_replace
39#else
40#include "avl.h"
41#endif
42
43extern void *dglTreeGetAllocator(void);
44
45/*
46 * Define a node as it is hosted in pNodeTree
47 */
48typedef struct _dglTreeNode {
49 long nKey;
50 void *pv;
51 void *pv2;
54extern void dglTreeNodeCancel(void *pvNode, void *pvParam);
55extern int dglTreeNodeCompare(const void *pvNodeA, const void *pvNodeB,
56 void *pvParam);
57extern dglTreeNode_s *dglTreeNodeAdd(void *pvAVL, dglInt32_t nKey);
58
59/*
60 * Define a version-2 node as it is hosted in pNodeTree
61 */
62typedef struct _dglTreeNode2 {
63 long nKey;
64 void *pv;
65 void *pv2;
66 void *pv3;
69extern void dglTreeNode2Cancel(void *pvNode, void *pvParam);
70extern int dglTreeNode2Compare(const void *pvNodeA, const void *pvNodeB,
71 void *pvParam);
72extern dglTreeNode2_s *dglTreeNode2Add(void *pvAVL, dglInt32_t nKey);
73
74/*
75 * Define a edge as it is hosted in pEdgeTree
76 */
82extern void dglTreeEdgeCancel(void *pvEdge, void *pvParam);
83extern int dglTreeEdgeCompare(const void *pvEdgeA, const void *pvEdgeB,
84 void *pvParam);
85extern dglTreeEdge_s *dglTreeEdgeAdd(void *pvAVL, dglInt32_t nKey);
86
87/*
88 * Define a dummy entry to 'touch' selected item with a dglInt32_t key
89 * i.e. used to mark visited nodes in a greedy or tree-growing algorithm
90 */
95extern void dglTreeTouchI32Cancel(void *pvTouchI32, void *pvParam);
96extern int dglTreeTouchI32Compare(const void *pvTouchI32A,
97 const void *pvTouchI32B, void *pvParam);
98extern dglTreeTouchI32_s *dglTreeTouchI32Add(void *pvAVL, dglInt32_t nKey);
99
100/*
101 * Define a entry to maintain a predecessor/distance network in shortest-path
102 * computation
103 */
113extern void dglTreePredistCancel(void *pvPredist, void *pvParam);
114extern int dglTreePredistCompare(const void *pvPredistA, const void *pvPredistB,
115 void *pvParam);
116extern dglTreePredist_s *dglTreePredistAdd(void *pvAVL, dglInt32_t nKey);
117
118/*
119 * 32bit-key Node Prioritizer
120 */
127extern void dglTreeNodePri32Cancel(void *pvNodePri32, void *pvParam);
128extern int dglTreeNodePri32Compare(const void *pvNodePri32A,
129 const void *pvNodePri32B, void *pvParam);
130extern dglTreeNodePri32_s *dglTreeNodePri32Add(void *pvAVL, dglInt32_t nKey);
131
132/*
133 * 32bit-key Edge Prioritizer
134 */
141extern void dglTreeEdgePri32Cancel(void *pvEdgePri32, void *pvParam);
142extern int dglTreeEdgePri32Compare(const void *pvEdgePri32A,
143 const void *pvEdgePri32B, void *pvParam);
144extern dglTreeEdgePri32_s *dglTreeEdgePri32Add(void *pvAVL, dglInt32_t nKey);
145
146#endif
dglInt32_t * pnData
Definition tree.h:138
dglInt32_t nKey
Definition tree.h:136
dglInt32_t cnData
Definition tree.h:137
dglInt32_t nKey
Definition tree.h:78
void * pv
Definition tree.h:79
void * pv
Definition tree.h:64
void * pv3
Definition tree.h:66
void * pv2
Definition tree.h:65
long nKey
Definition tree.h:63
dglInt32_t cnVal
Definition tree.h:123
dglInt32_t * pnVal
Definition tree.h:124
dglInt32_t nKey
Definition tree.h:122
void * pv2
Definition tree.h:51
long nKey
Definition tree.h:49
void * pv
Definition tree.h:50
dglByte_t bFlags
Definition tree.h:110
dglInt32_t nKey
Definition tree.h:105
dglInt32_t nDistance
Definition tree.h:107
dglInt32_t nCost
Definition tree.h:108
dglInt32_t nFrom
Definition tree.h:106
dglInt32_t * pnEdge
Definition tree.h:109
dglInt32_t nKey
Definition tree.h:92
int dglTreeNode2Compare(const void *pvNodeA, const void *pvNodeB, void *pvParam)
Definition tree.c:96
void dglTreePredistCancel(void *pvPredist, void *pvParam)
Definition tree.c:240
int dglTreeTouchI32Compare(const void *pvTouchI32A, const void *pvTouchI32B, void *pvParam)
Definition tree.c:195
void dglTreeEdgePri32Cancel(void *pvEdgePri32, void *pvParam)
Definition tree.c:340
dglTreeEdgePri32_s * dglTreeEdgePri32Alloc(void)
Definition tree.c:331
struct _dglTreeNode dglTreeNode_s
dglTreeNode2_s * dglTreeNode2Add(void *pvAVL, dglInt32_t nKey)
Definition tree.c:108
void dglTreeEdgeCancel(void *pvEdge, void *pvParam)
Definition tree.c:140
int dglTreePredistCompare(const void *pvPredistA, const void *pvPredistB, void *pvParam)
Definition tree.c:245
int dglTreeNodeCompare(const void *pvNodeA, const void *pvNodeB, void *pvParam)
Definition tree.c:42
struct _dglTreeEdgePri32 dglTreeEdgePri32_s
dglTreeNode2_s * dglTreeNode2Alloc(void)
Definition tree.c:77
dglTreeEdge_s * dglTreeEdgeAlloc(void)
Definition tree.c:131
struct _dglTreeNode2 dglTreeNode2_s
dglTreeEdge_s * dglTreeEdgeAdd(void *pvAVL, dglInt32_t nKey)
Definition tree.c:159
dglTreeNode_s * dglTreeNodeAdd(void *pvAVL, dglInt32_t nKey)
Definition tree.c:54
void dglTreeNode2Cancel(void *pvNode, void *pvParam)
Definition tree.c:85
dglTreeNodePri32_s * dglTreeNodePri32Add(void *pvAVL, dglInt32_t nKey)
Definition tree.c:308
void * dglTreeGetAllocator(void)
Definition tree.c:394
struct _dglTreeNodePri32 dglTreeNodePri32_s
void dglTreeNodePri32Cancel(void *pvNodePri32, void *pvParam)
Definition tree.c:290
dglTreeTouchI32_s * dglTreeTouchI32Add(void *pvAVL, dglInt32_t nKey)
Definition tree.c:208
struct _dglTreeTouchI32 dglTreeTouchI32_s
void dglTreeNodeCancel(void *pvNode, void *pvParam)
Definition tree.c:33
dglTreeTouchI32_s * dglTreeTouchI32Alloc(void)
Definition tree.c:182
dglTreePredist_s * dglTreePredistAlloc(void)
Definition tree.c:231
int dglTreeEdgeCompare(const void *pvEdgeA, const void *pvEdgeB, void *pvParam)
Definition tree.c:147
dglTreePredist_s * dglTreePredistAdd(void *pvAVL, dglInt32_t nKey)
Definition tree.c:258
dglTreeNodePri32_s * dglTreeNodePri32Alloc(void)
Definition tree.c:281
dglTreeEdgePri32_s * dglTreeEdgePri32Add(void *pvAVL, dglInt32_t nKey)
Definition tree.c:361
struct _dglTreePredist dglTreePredist_s
dglTreeNode_s * dglTreeNodeAlloc(void)
Definition tree.c:24
int dglTreeEdgePri32Compare(const void *pvEdgePri32A, const void *pvEdgePri32B, void *pvParam)
Definition tree.c:348
void dglTreeTouchI32Cancel(void *pvTouchI32, void *pvParam)
Definition tree.c:190
struct _dglTreeEdge dglTreeEdge_s
int dglTreeNodePri32Compare(const void *pvNodePri32A, const void *pvNodePri32B, void *pvParam)
Definition tree.c:295
long dglInt32_t
Definition type.h:24