GRASS 8 Programmer's Manual 8.6.0dev(2026)-ddeab64dbf
Loading...
Searching...
No Matches
v1-defs.h
Go to the documentation of this file.
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/*
20 * best view tabstop=4
21 */
22
23#define _DGL_V1 1
24#undef _DGL_V2
25
26/*
27 * Define function names
28 */
29
30#if defined(DGL_DEFINE_TREE_PROCS) || defined(DGL_DEFINE_FLAT_PROCS)
31/* sp-template */
32#undef DGL_SP_DIJKSTRA_FUNC
33#undef DGL_SPAN_DEPTHFIRST_SPANNING_FUNC
34#undef DGL_SPAN_MINIMUM_SPANNING_FUNC
35#undef _DGL_OUTEDGESET
36#undef _DGL_INEDGESET
37#undef _DGL_EDGE_TAILNODE
38#undef _DGL_EDGE_HEADNODE
39#endif
40
41/*
42 * TREE version algorithms
43 */
44#if defined(DGL_DEFINE_TREE_PROCS)
45/* sp-template */
46#define DGL_SP_DIJKSTRA_FUNC dgl_dijkstra_V1_TREE
47/* span-template */
48#define DGL_SPAN_DEPTHFIRST_SPANNING_FUNC dgl_span_depthfirst_spanning_V1_TREE
49#define DGL_SPAN_MINIMUM_SPANNING_FUNC dgl_span_minimum_spanning_V1_TREE
50/* portable actions */
51#define _DGL_OUTEDGESET(pg, pn) DGL_GET_NODE_OUTEDGESET_FUNC(pg, pn)
52#define _DGL_INEDGESET(pg, pn) DGL_GET_NODE_INEDGESET_FUNC(pg, pn)
53#define _DGL_EDGE_HEADNODE(pg, pl) \
54 DGL_GET_NODE_FUNC(pg, DGL_EDGE_HEADNODE_OFFSET(pl))
55#define _DGL_EDGE_TAILNODE(pg, pl) \
56 DGL_GET_NODE_FUNC(pg, DGL_EDGE_TAILNODE_OFFSET(pl))
57#endif
58
59/*
60 * FLAT version algorithms
61 */
62#if defined(DGL_DEFINE_FLAT_PROCS)
63/* sp-template */
64#define DGL_SP_DIJKSTRA_FUNC dgl_dijkstra_V1_FLAT
65/* span-template */
66#define DGL_SPAN_DEPTHFIRST_SPANNING_FUNC dgl_span_depthfirst_spanning_V1_FLAT
67#define DGL_SPAN_MINIMUM_SPANNING_FUNC dgl_span_minimum_spanning_V1_FLAT
68/* portable actions */
69#define _DGL_OUTEDGESET(pg, pn) \
70 DGL_EDGEBUFFER_SHIFT(pg, DGL_NODE_EDGESET_OFFSET(pn))
71#define _DGL_INEDGESET(pg, pn) \
72 ((dglInt32_t *)(DGL_EDGEBUFFER_SHIFT(pg, DGL_NODE_EDGESET_OFFSET(pn))) + \
73 *(dglInt32_t *)(DGL_EDGEBUFFER_SHIFT(pg, DGL_NODE_EDGESET_OFFSET(pn))) + \
74 1)
75#define _DGL_EDGE_HEADNODE(pg, pl) \
76 DGL_NODEBUFFER_SHIFT(pg, DGL_EDGE_HEADNODE_OFFSET(pl))
77#define _DGL_EDGE_TAILNODE(pg, pl) \
78 DGL_NODEBUFFER_SHIFT(pg, DGL_EDGE_TAILNODE_OFFSET(pl))
79#endif
80
81#if !defined(DGL_DEFINE_TREE_PROCS) && !defined(DGL_DEFINE_FLAT_PROCS)
82
83/* sp-template */
84#define DGL_SP_CACHE_INITIALIZE_FUNC dgl_sp_cache_initialize_V1
85#define DGL_SP_CACHE_RELEASE_FUNC dgl_sp_cache_release_V1
86#define DGL_SP_CACHE_REPORT_FUNC dgl_sp_cache_report_V1
87#define DGL_SP_CACHE_DISTANCE_FUNC dgl_sp_cache_distance_V1
88
89/* nodemgmt-template */
90#define DGL_ADD_NODE_FUNC dgl_add_node_V1
91#define DGL_DEL_NODE_FUNC dgl_del_node_V1
92#define DGL_GET_NODE_FUNC dgl_get_node_V1
93#define DGL_GET_NODE_OUTEDGESET_FUNC dgl_getnode_outedgeset_V1
94
95/* edgemgmt-template */
96#define DGL_ADD_EDGE_FUNC dgl_add_edge_V1
97#define DGL_GET_EDGE_FUNC dgl_get_edge_V1
98#define DGL_DEL_EDGE_FUNC dgl_del_edge_V1
99
100/* misc-template */
101#define DGL_EDGE_T_INITIALIZE_FUNC dgl_edge_t_initialize_V1
102#define DGL_EDGE_T_RELEASE_FUNC dgl_edge_t_release_V1
103#define DGL_EDGE_T_FIRST_FUNC dgl_edge_t_first_V1
104#define DGL_EDGE_T_NEXT_FUNC dgl_edge_t_next_V1
105#define DGL_NODE_T_INITIALIZE_FUNC dgl_node_t_initialize_V1
106#define DGL_NODE_T_RELEASE_FUNC dgl_node_t_release_V1
107#define DGL_NODE_T_FIRST_FUNC dgl_node_t_first_V1
108#define DGL_NODE_T_NEXT_FUNC dgl_node_t_next_V1
109#define DGL_NODE_T_FIND_FUNC dgl_node_t_find_V1
110#define DGL_EDGESET_T_INITIALIZE_FUNC dgl_edgeset_t_initialize_V1
111#define DGL_EDGESET_T_RELEASE_FUNC dgl_edgeset_t_release_V1
112#define DGL_EDGESET_T_FIRST_FUNC dgl_edgeset_t_first_V1
113#define DGL_EDGESET_T_NEXT_FUNC dgl_edgeset_t_next_V1
114#define DGL_FLATTEN_FUNC dgl_flatten_V1
115#define DGL_UNFLATTEN_FUNC dgl_unflatten_V1
116
117/*
118 *
119 */
120
121/* Node
122 */
123#define DGL_NODE_ALLOC DGL_NODE_ALLOC_v1
124#define DGL_NODE_SIZEOF DGL_NODE_SIZEOF_v1
125#define DGL_NODE_WSIZE DGL_NODE_WSIZE_v1
126#define DGL_NODE_STATUS DGL_NODE_STATUS_v1
127#define DGL_NODE_ID DGL_NODE_ID_v1
128#define DGL_NODE_ATTR_PTR DGL_NODE_ATTR_PTR_v1
129#define DGL_NODE_EDGESET_OFFSET DGL_NODE_EDGESET_OFFSET_v1
130
131/* Edge
132 */
133#define DGL_EDGE_ALLOC DGL_EDGE_ALLOC_v1
134#define DGL_EDGE_SIZEOF DGL_EDGE_SIZEOF_v1
135#define DGL_EDGE_WSIZE DGL_EDGE_WSIZE_v1
136#define DGL_EDGE_STATUS(p) 0
137#define DGL_EDGE_COST DGL_EDGE_COST_v1
138#define DGL_EDGE_ID DGL_EDGE_ID_v1
139#define DGL_EDGE_ATTR_PTR DGL_EDGE_ATTR_PTR_v1
140#define DGL_EDGE_HEADNODE_OFFSET DGL_EDGE_HEADNODE_OFFSET_v1
141#define DGL_EDGE_TAILNODE_OFFSET DGL_EDGE_TAILNODE_OFFSET_v1
142
143/* Edgeset
144 */
145#define DGL_ILA_TOARR DGL_ILA_TOARR_v1
146#define DGL_EDGESET_OFFSET DGL_EDGESET_OFFSET_v1
147#define DGL_EDGESET_EDGEARRAY_PTR DGL_EDGESET_EDGEARRAY_PTR_v1
148#define DGL_EDGESET_EDGECOUNT DGL_EDGESET_EDGECOUNT_v1
149#define DGL_EDGESET_EDGE_PTR DGL_EDGESET_EDGE_PTR_v1
150#define DGL_EDGESET_ALLOC DGL_EDGESET_ALLOC_v1
151#define DGL_EDGESET_REALLOC DGL_EDGESET_REALLOC_v1
152#define DGL_EDGESET_SIZEOF DGL_EDGESET_SIZEOF_v1
153#define DGL_EDGESET_WSIZE DGL_EDGESET_WSIZE_v1
154
155/* Misc
156 */
157#define DGL_NODEBUFFER_SHIFT DGL_NODEBUFFER_SHIFT_v1
158#define DGL_NODEBUFFER_OFFSET DGL_NODEBUFFER_OFFSET_v1
159#define DGL_EDGEBUFFER_SHIFT DGL_EDGEBUFFER_SHIFT_v1
160#define DGL_EDGEBUFFER_OFFSET DGL_EDGEBUFFER_OFFSET_v1
161
162#define DGL_FOREACH_NODE DGL_FOREACH_NODE_v1
163#define DGL_FOREACH_EDGE DGL_FOREACH_EDGE_v1
164
165/*
166 * Tree-node portability
167 */
168#define DGL_T_NODEITEM_TYPE dglTreeNode_s
169#define DGL_T_NODEITEM_NodePTR(p) ((p)->pv)
170#define DGL_T_NODEITEM_Set_NodePTR(p, ptr) ((p)->pv = (ptr))
171#define DGL_T_NODEITEM_OutEdgesetPTR(p) ((p)->pv2)
172#define DGL_T_NODEITEM_Set_OutEdgesetPTR(p, ptr) ((p)->pv2 = (ptr))
173#define DGL_T_NODEITEM_InEdgesetPTR(p) NULL
174#define DGL_T_NODEITEM_Set_InEdgesetPTR(p, ptr)
175#define DGL_T_NODEITEM_Compare dglTreeNodeCompare
176#define DGL_T_NODEITEM_Cancel dglTreeNodeCancel
177#define DGL_T_NODEITEM_Add dglTreeNodeAdd
178#define DGL_T_NODEITEM_Alloc dglTreeNodeAlloc
179
180#endif