tree.h 5.0 KB

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