tree.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  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. /* best view tabstop=4
  19. */
  20. #ifndef _DGL_TREE_H_
  21. #define _DGL_TREE_H_
  22. #define USE_THREADED_AVL
  23. #if defined(USE_THREADED_AVL)
  24. #include "tavl.h"
  25. #define avl_table tavl_table
  26. #define avl_traverser tavl_traverser
  27. #define avl_create tavl_create
  28. #define avl_copy tavl_copy
  29. #define avl_destroy tavl_destroy
  30. #define avl_probe tavl_probe
  31. #define avl_insert tavl_insert
  32. #define avl_replace tavl_replace
  33. #define avl_delete tavl_delete
  34. #define avl_find tavl_find
  35. #define avl_assert_insert tavl_assert_insert
  36. #define avl_assert_delete tavl_assert_delete
  37. #define avl_t_init tavl_t_init
  38. #define avl_t_first tavl_t_first
  39. #define avl_t_last tavl_t_last
  40. #define avl_t_find tavl_t_find
  41. #define avl_t_insert tavl_t_insert
  42. #define avl_t_copy tavl_t_copy
  43. #define avl_t_next tavl_t_next
  44. #define avl_t_prev tavl_t_prev
  45. #define avl_t_cur tavl_t_cur
  46. #define avl_t_replace tavl_t_replace
  47. #else
  48. #include "avl.h"
  49. #endif
  50. extern void *dglTreeGetAllocator();
  51. /*
  52. * Define a node as it is hosted in pNodeTree
  53. */
  54. typedef struct _dglTreeNode
  55. {
  56. long nKey;
  57. void *pv;
  58. void *pv2;
  59. } dglTreeNode_s;
  60. extern dglTreeNode_s *dglTreeNodeAlloc();
  61. extern void dglTreeNodeCancel(void *pvNode, void *pvParam);
  62. extern int dglTreeNodeCompare(const void *pvNodeA, const void *pvNodeB,
  63. void *pvParam);
  64. extern dglTreeNode_s *dglTreeNodeAdd(void *pvAVL, dglInt32_t nKey);
  65. /*
  66. * Define a version-2 node as it is hosted in pNodeTree
  67. */
  68. typedef struct _dglTreeNode2
  69. {
  70. long nKey;
  71. void *pv;
  72. void *pv2;
  73. void *pv3;
  74. } dglTreeNode2_s;
  75. extern dglTreeNode2_s *dglTreeNode2Alloc();
  76. extern void dglTreeNode2Cancel(void *pvNode, void *pvParam);
  77. extern int dglTreeNode2Compare(const void *pvNodeA, const void *pvNodeB,
  78. void *pvParam);
  79. extern dglTreeNode2_s *dglTreeNode2Add(void *pvAVL, dglInt32_t nKey);
  80. /*
  81. * Define a edge as it is hosted in pEdgeTree
  82. */
  83. typedef struct _dglTreeEdge
  84. {
  85. dglInt32_t nKey;
  86. void *pv;
  87. } dglTreeEdge_s;
  88. extern dglTreeEdge_s *dglTreeEdgeAlloc();
  89. extern void dglTreeEdgeCancel(void *pvEdge, void *pvParam);
  90. extern int dglTreeEdgeCompare(const void *pvEdgeA, const void *pvEdgeB,
  91. void *pvParam);
  92. extern dglTreeEdge_s *dglTreeEdgeAdd(void *pvAVL, dglInt32_t nKey);
  93. /*
  94. * Define a dummy entry to 'touch' selected item with a dglInt32_t key
  95. * i.e. used to mark visited nodes in a greedy or tree-growing algorithm
  96. */
  97. typedef struct _dglTreeTouchI32
  98. {
  99. dglInt32_t nKey;
  100. } dglTreeTouchI32_s;
  101. extern dglTreeTouchI32_s *dglTreeTouchI32Alloc();
  102. extern void dglTreeTouchI32Cancel(void *pvTouchI32, void *pvParam);
  103. extern int dglTreeTouchI32Compare(const void *pvTouchI32A,
  104. const void *pvTouchI32B, void *pvParam);
  105. extern dglTreeTouchI32_s *dglTreeTouchI32Add(void *pvAVL, dglInt32_t nKey);
  106. /*
  107. * Define a entry to maintain a predecessor/distance network in shortest-path computation
  108. */
  109. typedef struct _dglTreePredist
  110. {
  111. dglInt32_t nKey;
  112. dglInt32_t nFrom;
  113. dglInt32_t nDistance;
  114. dglInt32_t nCost;
  115. dglInt32_t *pnEdge;
  116. dglByte_t bFlags;
  117. } dglTreePredist_s;
  118. extern dglTreePredist_s *dglTreePredistAlloc();
  119. extern void dglTreePredistCancel(void *pvPredist, void *pvParam);
  120. extern int dglTreePredistCompare(const void *pvPredistA,
  121. const void *pvPredistB, void *pvParam);
  122. extern dglTreePredist_s *dglTreePredistAdd(void *pvAVL, dglInt32_t nKey);
  123. /*
  124. * 32bit-key Node Prioritizer
  125. */
  126. typedef struct _dglTreeNodePri32
  127. {
  128. dglInt32_t nKey;
  129. dglInt32_t cnVal;
  130. dglInt32_t *pnVal;
  131. } dglTreeNodePri32_s;
  132. extern dglTreeNodePri32_s *dglTreeNodePri32Alloc();
  133. extern void dglTreeNodePri32Cancel(void *pvNodePri32, void *pvParam);
  134. extern int dglTreeNodePri32Compare(const void *pvNodePri32A,
  135. const void *pvNodePri32B, void *pvParam);
  136. extern dglTreeNodePri32_s *dglTreeNodePri32Add(void *pvAVL, dglInt32_t nKey);
  137. /*
  138. * 32bit-key Edge Prioritizer
  139. */
  140. typedef struct _dglTreeEdgePri32
  141. {
  142. dglInt32_t nKey;
  143. dglInt32_t cnData;
  144. dglInt32_t *pnData;
  145. } dglTreeEdgePri32_s;
  146. extern dglTreeEdgePri32_s *dglTreeEdgePri32Alloc();
  147. extern void dglTreeEdgePri32Cancel(void *pvEdgePri32, void *pvParam);
  148. extern int dglTreeEdgePri32Compare(const void *pvEdgePri32A,
  149. const void *pvEdgePri32B, void *pvParam);
  150. extern dglTreeEdgePri32_s *dglTreeEdgePri32Add(void *pvAVL, dglInt32_t nKey);
  151. #endif