123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- /* LIBDGL -- a Directed Graph Library implementation
- * Copyright (C) 2002 Roberto Micarelli
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
- /* best view tabstop=4
- */
- #ifndef _DGL_TREE_H_
- #define _DGL_TREE_H_
- #define USE_THREADED_AVL
- #if defined(USE_THREADED_AVL)
- #include "tavl.h"
- #define avl_table tavl_table
- #define avl_traverser tavl_traverser
- #define avl_create tavl_create
- #define avl_copy tavl_copy
- #define avl_destroy tavl_destroy
- #define avl_probe tavl_probe
- #define avl_insert tavl_insert
- #define avl_replace tavl_replace
- #define avl_delete tavl_delete
- #define avl_find tavl_find
- #define avl_assert_insert tavl_assert_insert
- #define avl_assert_delete tavl_assert_delete
- #define avl_t_init tavl_t_init
- #define avl_t_first tavl_t_first
- #define avl_t_last tavl_t_last
- #define avl_t_find tavl_t_find
- #define avl_t_insert tavl_t_insert
- #define avl_t_copy tavl_t_copy
- #define avl_t_next tavl_t_next
- #define avl_t_prev tavl_t_prev
- #define avl_t_cur tavl_t_cur
- #define avl_t_replace tavl_t_replace
- #else
- #include "avl.h"
- #endif
- extern void *dglTreeGetAllocator();
- /*
- * Define a node as it is hosted in pNodeTree
- */
- typedef struct _dglTreeNode
- {
- long nKey;
- void *pv;
- void *pv2;
- } dglTreeNode_s;
- extern dglTreeNode_s *dglTreeNodeAlloc();
- extern void dglTreeNodeCancel(void *pvNode, void *pvParam);
- extern int dglTreeNodeCompare(const void *pvNodeA, const void *pvNodeB,
- void *pvParam);
- extern dglTreeNode_s *dglTreeNodeAdd(void *pvAVL, dglInt32_t nKey);
- /*
- * Define a version-2 node as it is hosted in pNodeTree
- */
- typedef struct _dglTreeNode2
- {
- long nKey;
- void *pv;
- void *pv2;
- void *pv3;
- } dglTreeNode2_s;
- extern dglTreeNode2_s *dglTreeNode2Alloc();
- extern void dglTreeNode2Cancel(void *pvNode, void *pvParam);
- extern int dglTreeNode2Compare(const void *pvNodeA, const void *pvNodeB,
- void *pvParam);
- extern dglTreeNode2_s *dglTreeNode2Add(void *pvAVL, dglInt32_t nKey);
- /*
- * Define a edge as it is hosted in pEdgeTree
- */
- typedef struct _dglTreeEdge
- {
- dglInt32_t nKey;
- void *pv;
- } dglTreeEdge_s;
- extern dglTreeEdge_s *dglTreeEdgeAlloc();
- extern void dglTreeEdgeCancel(void *pvEdge, void *pvParam);
- extern int dglTreeEdgeCompare(const void *pvEdgeA, const void *pvEdgeB,
- void *pvParam);
- extern dglTreeEdge_s *dglTreeEdgeAdd(void *pvAVL, dglInt32_t nKey);
- /*
- * Define a dummy entry to 'touch' selected item with a dglInt32_t key
- * i.e. used to mark visited nodes in a greedy or tree-growing algorithm
- */
- typedef struct _dglTreeTouchI32
- {
- dglInt32_t nKey;
- } dglTreeTouchI32_s;
- extern dglTreeTouchI32_s *dglTreeTouchI32Alloc();
- extern void dglTreeTouchI32Cancel(void *pvTouchI32, void *pvParam);
- extern int dglTreeTouchI32Compare(const void *pvTouchI32A,
- const void *pvTouchI32B, void *pvParam);
- extern dglTreeTouchI32_s *dglTreeTouchI32Add(void *pvAVL, dglInt32_t nKey);
- /*
- * Define a entry to maintain a predecessor/distance network in shortest-path computation
- */
- typedef struct _dglTreePredist
- {
- dglInt32_t nKey;
- dglInt32_t nFrom;
- dglInt32_t nDistance;
- dglInt32_t nCost;
- dglInt32_t *pnEdge;
- dglByte_t bFlags;
- } dglTreePredist_s;
- extern dglTreePredist_s *dglTreePredistAlloc();
- extern void dglTreePredistCancel(void *pvPredist, void *pvParam);
- extern int dglTreePredistCompare(const void *pvPredistA,
- const void *pvPredistB, void *pvParam);
- extern dglTreePredist_s *dglTreePredistAdd(void *pvAVL, dglInt32_t nKey);
- /*
- * 32bit-key Node Prioritizer
- */
- typedef struct _dglTreeNodePri32
- {
- dglInt32_t nKey;
- dglInt32_t cnVal;
- dglInt32_t *pnVal;
- } dglTreeNodePri32_s;
- extern dglTreeNodePri32_s *dglTreeNodePri32Alloc();
- extern void dglTreeNodePri32Cancel(void *pvNodePri32, void *pvParam);
- extern int dglTreeNodePri32Compare(const void *pvNodePri32A,
- const void *pvNodePri32B, void *pvParam);
- extern dglTreeNodePri32_s *dglTreeNodePri32Add(void *pvAVL, dglInt32_t nKey);
- /*
- * 32bit-key Edge Prioritizer
- */
- typedef struct _dglTreeEdgePri32
- {
- dglInt32_t nKey;
- dglInt32_t cnData;
- dglInt32_t *pnData;
- } dglTreeEdgePri32_s;
- extern dglTreeEdgePri32_s *dglTreeEdgePri32Alloc();
- extern void dglTreeEdgePri32Cancel(void *pvEdgePri32, void *pvParam);
- extern int dglTreeEdgePri32Compare(const void *pvEdgePri32A,
- const void *pvEdgePri32B, void *pvParam);
- extern dglTreeEdgePri32_s *dglTreeEdgePri32Add(void *pvAVL, dglInt32_t nKey);
- #endif
|