v2-defs.h 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. /*
  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. #define _DGL_V2 1
  22. #undef _DGL_V1
  23. /*
  24. * Define function names
  25. */
  26. #if defined(DGL_DEFINE_TREE_PROCS) || defined(DGL_DEFINE_FLAT_PROCS)
  27. /* sp-template */
  28. #undef DGL_SP_DIJKSTRA_FUNC
  29. #undef DGL_SPAN_DEPTHFIRST_SPANNING_FUNC
  30. #undef DGL_SPAN_MINIMUM_SPANNING_FUNC
  31. #undef _DGL_OUTEDGESET
  32. #undef _DGL_INEDGESET
  33. #undef _DGL_EDGE_TAILNODE
  34. #undef _DGL_EDGE_HEADNODE
  35. #endif
  36. /*
  37. * TREE version algorithms
  38. */
  39. #if defined(DGL_DEFINE_TREE_PROCS)
  40. /* sp-template */
  41. #define DGL_SP_DIJKSTRA_FUNC dgl_dijkstra_V2_TREE
  42. /* span-template */
  43. #define DGL_SPAN_DEPTHFIRST_SPANNING_FUNC dgl_span_depthfirst_spanning_V2_TREE
  44. #define DGL_SPAN_MINIMUM_SPANNING_FUNC dgl_span_minimum_spanning_V2_TREE
  45. /* portable actions */
  46. #define _DGL_OUTEDGESET(pg,pn) DGL_GET_NODE_OUTEDGESET_FUNC(pg,pn)
  47. #define _DGL_INEDGESET(pg,pn) DGL_GET_NODE_INEDGESET_FUNC(pg,pn)
  48. #define _DGL_EDGE_HEADNODE(pg,pl) DGL_GET_NODE_FUNC(pg, DGL_EDGE_HEADNODE_OFFSET(pl))
  49. #define _DGL_EDGE_TAILNODE(pg,pl) DGL_GET_NODE_FUNC(pg, DGL_EDGE_TAILNODE_OFFSET(pl))
  50. #endif
  51. /*
  52. * FLAT version algorithms
  53. */
  54. #if defined(DGL_DEFINE_FLAT_PROCS)
  55. /* sp-template */
  56. #define DGL_SP_DIJKSTRA_FUNC dgl_dijkstra_V2_FLAT
  57. /* span-template */
  58. #define DGL_SPAN_DEPTHFIRST_SPANNING_FUNC dgl_span_depthfirst_spanning_V2_FLAT
  59. #define DGL_SPAN_MINIMUM_SPANNING_FUNC dgl_span_minimum_spanning_V2_FLAT
  60. /* portable actions */
  61. #define _DGL_OUTEDGESET(pg,pn) DGL_EDGEBUFFER_SHIFT(pg, DGL_NODE_EDGESET_OFFSET(pn))
  62. #define _DGL_INEDGESET(pg,pn) ((dglInt32_t*)(DGL_EDGEBUFFER_SHIFT(pg, DGL_NODE_EDGESET_OFFSET(pn))) + \
  63. *(dglInt32_t*)(DGL_EDGEBUFFER_SHIFT(pg, DGL_NODE_EDGESET_OFFSET(pn))) + 1)
  64. #define _DGL_EDGE_HEADNODE(pg,pl) DGL_NODEBUFFER_SHIFT(pg, DGL_EDGE_HEADNODE_OFFSET(pl))
  65. #define _DGL_EDGE_TAILNODE(pg,pl) DGL_NODEBUFFER_SHIFT(pg, DGL_EDGE_TAILNODE_OFFSET(pl))
  66. #endif
  67. #if !defined(DGL_DEFINE_TREE_PROCS) && !defined(DGL_DEFINE_FLAT_PROCS)
  68. /* sp-template */
  69. #define DGL_SP_CACHE_INITIALIZE_FUNC dgl_sp_cache_initialize_V2
  70. #define DGL_SP_CACHE_RELEASE_FUNC dgl_sp_cache_release_V2
  71. #define DGL_SP_CACHE_REPORT_FUNC dgl_sp_cache_report_V2
  72. #define DGL_SP_CACHE_DISTANCE_FUNC dgl_sp_cache_distance_V2
  73. /* nodemgmt-template */
  74. #define DGL_ADD_NODE_FUNC dgl_add_node_V2
  75. #define DGL_DEL_NODE_OUTEDGE_FUNC dgl_del_node_outedge_V2
  76. #define DGL_DEL_NODE_INEDGE_FUNC dgl_del_node_inedge_V2
  77. #define DGL_DEL_NODE_FUNC dgl_del_node_V2
  78. #define DGL_GET_NODE_FUNC dgl_get_node_V2
  79. #define DGL_GET_NODE_OUTEDGESET_FUNC dgl_getnode_outedgeset_V2
  80. #define DGL_GET_NODE_INEDGESET_FUNC dgl_getnode_inedgeset_V2
  81. /* edgemgmt-template */
  82. #define DGL_ADD_EDGE_FUNC dgl_add_edge_V2
  83. #define DGL_GET_EDGE_FUNC dgl_get_edge_V2
  84. #define DGL_DEL_EDGE_FUNC dgl_del_edge_V2
  85. /* misc-template */
  86. #define DGL_EDGE_T_INITIALIZE_FUNC dgl_edge_t_initialize_V2
  87. #define DGL_EDGE_T_RELEASE_FUNC dgl_edge_t_release_V2
  88. #define DGL_EDGE_T_FIRST_FUNC dgl_edge_t_first_V2
  89. #define DGL_EDGE_T_NEXT_FUNC dgl_edge_t_next_V2
  90. #define DGL_NODE_T_INITIALIZE_FUNC dgl_node_t_initialize_V2
  91. #define DGL_NODE_T_RELEASE_FUNC dgl_node_t_release_V2
  92. #define DGL_NODE_T_FIRST_FUNC dgl_node_t_first_V2
  93. #define DGL_NODE_T_NEXT_FUNC dgl_node_t_next_V2
  94. #define DGL_NODE_T_FIND_FUNC dgl_node_t_find_V2
  95. #define DGL_EDGESET_T_INITIALIZE_FUNC dgl_edgeset_t_initialize_V2
  96. #define DGL_EDGESET_T_RELEASE_FUNC dgl_edgeset_t_release_V2
  97. #define DGL_EDGESET_T_FIRST_FUNC dgl_edgeset_t_first_V2
  98. #define DGL_EDGESET_T_NEXT_FUNC dgl_edgeset_t_next_V2
  99. #define DGL_FLATTEN_FUNC dgl_flatten_V2
  100. #define DGL_UNFLATTEN_FUNC dgl_unflatten_V2
  101. /*
  102. *
  103. */
  104. /* Node
  105. */
  106. #define DGL_NODE_ALLOC DGL_NODE_ALLOC_v2
  107. #define DGL_NODE_SIZEOF DGL_NODE_SIZEOF_v2
  108. #define DGL_NODE_WSIZE DGL_NODE_WSIZE_v2
  109. #define DGL_NODE_STATUS DGL_NODE_STATUS_v2
  110. #define DGL_NODE_ID DGL_NODE_ID_v2
  111. #define DGL_NODE_ATTR_PTR DGL_NODE_ATTR_PTR_v2
  112. #define DGL_NODE_EDGESET_OFFSET DGL_NODE_EDGESET_OFFSET_v2
  113. /* Edge
  114. */
  115. #define DGL_EDGE_ALLOC DGL_EDGE_ALLOC_v2
  116. #define DGL_EDGE_SIZEOF DGL_EDGE_SIZEOF_v2
  117. #define DGL_EDGE_WSIZE DGL_EDGE_WSIZE_v2
  118. #define DGL_EDGE_STATUS DGL_EDGE_STATUS_v2
  119. #define DGL_EDGE_COST DGL_EDGE_COST_v2
  120. #define DGL_EDGE_ID DGL_EDGE_ID_v2
  121. #define DGL_EDGE_ATTR_PTR DGL_EDGE_ATTR_PTR_v2
  122. #define DGL_EDGE_HEADNODE_OFFSET DGL_EDGE_HEADNODE_OFFSET_v2
  123. #define DGL_EDGE_TAILNODE_OFFSET DGL_EDGE_TAILNODE_OFFSET_v2
  124. /* Edgeset
  125. */
  126. #define DGL_ILA_TOARR DGL_ILA_TOARR_v2
  127. #define DGL_EDGESET_OFFSET DGL_EDGESET_OFFSET_v2
  128. #define DGL_EDGESET_EDGEARRAY_PTR DGL_EDGESET_EDGEARRAY_PTR_v2
  129. #define DGL_EDGESET_EDGECOUNT DGL_EDGESET_EDGECOUNT_v2
  130. #define DGL_EDGESET_EDGE_PTR DGL_EDGESET_EDGE_PTR_v2
  131. #define DGL_EDGESET_ALLOC DGL_EDGESET_ALLOC_v2
  132. #define DGL_EDGESET_REALLOC DGL_EDGESET_REALLOC_v2
  133. #define DGL_EDGESET_SIZEOF DGL_EDGESET_SIZEOF_v2
  134. #define DGL_EDGESET_WSIZE DGL_EDGESET_WSIZE_v2
  135. /* Misc
  136. */
  137. #define DGL_NODEBUFFER_SHIFT DGL_NODEBUFFER_SHIFT_v2
  138. #define DGL_NODEBUFFER_OFFSET DGL_NODEBUFFER_OFFSET_v2
  139. #define DGL_EDGEBUFFER_SHIFT DGL_EDGEBUFFER_SHIFT_v2
  140. #define DGL_EDGEBUFFER_OFFSET DGL_EDGEBUFFER_OFFSET_v2
  141. #define DGL_FOREACH_NODE DGL_FOREACH_NODE_v2
  142. #define DGL_FOREACH_EDGE DGL_FOREACH_EDGE_v2
  143. /*
  144. * Tree-node portability
  145. */
  146. #define DGL_T_NODEITEM_TYPE dglTreeNode2_s
  147. #define DGL_T_NODEITEM_NodePTR(p) ((p)->pv)
  148. #define DGL_T_NODEITEM_Set_NodePTR(p,ptr) ((p)->pv=(ptr))
  149. #define DGL_T_NODEITEM_OutEdgesetPTR(p) ((p)->pv2)
  150. #define DGL_T_NODEITEM_Set_OutEdgesetPTR(p,ptr) ((p)->pv2=(ptr))
  151. #define DGL_T_NODEITEM_InEdgesetPTR(p) ((p)->pv3)
  152. #define DGL_T_NODEITEM_Set_InEdgesetPTR(p,ptr) ((p)->pv3=(ptr))
  153. #define DGL_T_NODEITEM_Compare dglTreeNode2Compare
  154. #define DGL_T_NODEITEM_Cancel dglTreeNode2Cancel
  155. #define DGL_T_NODEITEM_Add dglTreeNode2Add
  156. #define DGL_T_NODEITEM_Alloc dglTreeNode2Alloc
  157. #endif