tlds
Transactional Operations for Linked Data Structures
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
element.h
Go to the documentation of this file.
1 /* =============================================================================
2  *
3  * element.h
4  *
5  * =============================================================================
6  *
7  * Copyright (C) Stanford University, 2006. All Rights Reserved.
8  * Author: Chi Cao Minh
9  *
10  * =============================================================================
11  *
12  * For the license of bayes/sort.h and bayes/sort.c, please see the header
13  * of the files.
14  *
15  * ------------------------------------------------------------------------
16  *
17  * For the license of kmeans, please see kmeans/LICENSE.kmeans
18  *
19  * ------------------------------------------------------------------------
20  *
21  * For the license of ssca2, please see ssca2/COPYRIGHT
22  *
23  * ------------------------------------------------------------------------
24  *
25  * For the license of lib/mt19937ar.c and lib/mt19937ar.h, please see the
26  * header of the files.
27  *
28  * ------------------------------------------------------------------------
29  *
30  * For the license of lib/rbtree.h and lib/rbtree.c, please see
31  * lib/LEGALNOTICE.rbtree and lib/LICENSE.rbtree
32  *
33  * ------------------------------------------------------------------------
34  *
35  * Unless otherwise noted, the following license applies to STAMP files:
36  *
37  * Copyright (c) 2007, Stanford University
38  * All rights reserved.
39  *
40  * Redistribution and use in source and binary forms, with or without
41  * modification, are permitted provided that the following conditions are
42  * met:
43  *
44  * * Redistributions of source code must retain the above copyright
45  * notice, this list of conditions and the following disclaimer.
46  *
47  * * Redistributions in binary form must reproduce the above copyright
48  * notice, this list of conditions and the following disclaimer in
49  * the documentation and/or other materials provided with the
50  * distribution.
51  *
52  * * Neither the name of Stanford University nor the names of its
53  * contributors may be used to endorse or promote products derived
54  * from this software without specific prior written permission.
55  *
56  * THIS SOFTWARE IS PROVIDED BY STANFORD UNIVERSITY ``AS IS'' AND ANY
57  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
58  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
59  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE
60  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
61  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
62  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
63  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
64  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
65  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
66  * THE POSSIBILITY OF SUCH DAMAGE.
67  *
68  * =============================================================================
69  */
70 
71 
72 #ifndef ELEMENT_H
73 #define ELEMENT_H 1
74 
75 
76 #include "coordinate.h"
77 #include "list.h"
78 #include "pair.h"
79 #include "tm.h"
80 #include "types.h"
81 
82 
83 typedef pair_t edge_t;
84 typedef struct element element_t;
85 
86 
87 /* =============================================================================
88  * element_compare
89  * =============================================================================
90  */
91 long
92 element_compare (element_t* aElementPtr, element_t* bElementPtr);
93 long
94 TMelement_compare (TM_ARGDECL element_t* aElementPtr, element_t* bElementPtr);
95 
96 
97 /* =============================================================================
98  * element_listCompare
99  *
100  * For use in list_t
101  * =============================================================================
102  */
103 long
104 element_listCompare (const void* aPtr, const void* bPtr);
105 long
106 TMelement_listCompare (TM_ARGDECL const void* aPtr, const void* bPtr);
107 
108 
109 /* =============================================================================
110  * element_mapCompare
111  *
112  * For use in MAP_T
113  * =============================================================================
114  */
115 long
116 element_mapCompare (const pair_t* aPtr, const pair_t* bPtr);
117 
118 
119 /* =============================================================================
120  * element_alloc
121  *
122  * Contains a copy of input arg 'coordinates'
123  * =============================================================================
124  */
125 element_t*
127 
128 
129 /* =============================================================================
130  * Pelement_alloc
131  *
132  * Contains a copy of input arg 'coordinates'
133  * =============================================================================
134  */
135 element_t*
137 
138 
139 /* =============================================================================
140  * TMelement_alloc
141  *
142  * Contains a copy of input arg 'coordinates'
143  * =============================================================================
144  */
145 element_t*
147 
148 
149 /* =============================================================================
150  * element_free
151  * =============================================================================
152  */
153 void
154 element_free (element_t* elementPtr);
155 
156 
157 /* =============================================================================
158  * Pelement_free
159  * =============================================================================
160  */
161 void
162 Pelement_free (element_t* elementPtr);
163 
164 
165 /* =============================================================================
166  * TMelement_free
167  * =============================================================================
168  */
169 void
170 TMelement_free (TM_ARGDECL element_t* elementPtr);
171 
172 
173 /* =============================================================================
174  * element_getNumEdge
175  * =============================================================================
176  */
177 long
178 element_getNumEdge (element_t* elementPtr);
179 
180 
181 /* =============================================================================
182  * element_getEdge
183  *
184  * Returned edgePtr is sorted; i.e., coordinate_compare(first, second) < 0
185  * =============================================================================
186  */
187 edge_t*
188 element_getEdge (element_t* elementPtr, long i);
189 
190 
191 /* ============================================================================
192  * element_listCompareEdge
193  *
194  * For use in list_t
195  * ============================================================================
196  */
197 long
198 element_listCompareEdge (const void* aPtr, const void* bPtr);
199 long
200 TMelement_listCompareEdge (TM_ARGDECL const void* aPtr, const void* bPtr);
201 
202 
203 /* =============================================================================
204  * element_mapCompareEdge
205  *
206  * For use in MAP_T
207  * =============================================================================
208  */
209 long
210 element_mapCompareEdge (const pair_t* aPtr, const pair_t* bPtr);
211 
212 
213 /* =============================================================================
214  * element_heapCompare
215  *
216  * For use in heap_t
217  * =============================================================================
218  */
219 long
220 element_heapCompare (const void* aPtr, const void* bPtr);
221 long
222 TMelement_heapCompare (TM_ARGDECL const void* aPtr, const void* bPtr);
223 
224 
225 /* =============================================================================
226  * element_isInCircumCircle
227  * =============================================================================
228  */
229 bool_t
230 element_isInCircumCircle (element_t* elementPtr, coordinate_t* coordinatePtr);
231 
232 
233 /* =============================================================================
234  * element_clearEncroached
235  * =============================================================================
236  */
237 void
238 element_clearEncroached (element_t* elementPtr);
239 
240 
241 /* =============================================================================
242  * element_getEncroachedPtr
243  * =============================================================================
244  */
245 edge_t*
246 element_getEncroachedPtr (element_t* elementPtr);
247 
248 
249 /* =============================================================================
250  * element_isSkinny
251  * =============================================================================
252  */
253 bool_t
254 element_isSkinny (element_t* elementPtr);
255 
256 
257 /* =============================================================================
258  * element_isBad
259  * -- Does it need to be refined?
260  * =============================================================================
261  */
262 bool_t
263 element_isBad (element_t* elementPtr);
264 
265 
266 /* =============================================================================
267  * element_isReferenced
268  * =============================================================================
269  */
270 bool_t
271 element_isReferenced (element_t* elementPtr);
272 
273 
274 /* =============================================================================
275  * TMelement_isReferenced
276  * =============================================================================
277  */
279 bool_t
281 
282 
283 /* =============================================================================
284  * element_setIsReferenced
285  * =============================================================================
286  */
287 void
288 element_setIsReferenced (element_t* elementPtr, bool_t status);
289 
290 
291 /* =============================================================================
292  * TMelement_setIsReferenced
293  * =============================================================================
294  */
296 void
298 
299 
300 /* =============================================================================
301  * element_isGarbage
302  * -- Can we deallocate?
303  * =============================================================================
304  */
305 bool_t
306 element_isGarbage (element_t* elementPtr);
307 
308 
309 /* =============================================================================
310  * TMelement_isGarbage
311  * -- Can we deallocate?
312  * =============================================================================
313  */
315 bool_t
317 
318 
319 /* =============================================================================
320  * element_setIsGarbage
321  * =============================================================================
322  */
323 void
324 element_setIsGarbage (element_t* elementPtr, bool_t status);
325 
326 
327 /* =============================================================================
328  * TMelement_setIsGarbage
329  * =============================================================================
330  */
332 void
333 TMelement_setIsGarbage (TM_ARGDECL element_t* elementPtr, bool_t status);
334 
335 
336 /* =============================================================================
337  * element_addNeighbor
338  * =============================================================================
339  */
340 void
341 element_addNeighbor (element_t* elementPtr, element_t* neighborPtr);
342 
343 
344 /* =============================================================================
345  * TMelement_addNeighbor
346  * =============================================================================
347  */
348 void
349 TMelement_addNeighbor (TM_ARGDECL element_t* elementPtr, element_t* neighborPtr);
350 
351 
352 /* =============================================================================
353  * element_getNeighborListPtr
354  * =============================================================================
355  */
356 list_t*
358 list_t*
360 
361 
362 /* =============================================================================
363  * element_getCommonEdge
364  * -- Returns pointer to aElementPtr's shared edge
365  * =============================================================================
366  */
367 edge_t*
368 element_getCommonEdge (element_t* aElementPtr, element_t* bElementPtr);
369 edge_t*
370 TMelement_getCommonEdge (TM_ARGDECL element_t* aElementPtr, element_t* bElementPtr);
371 
372 
373 /* =============================================================================
374  * element_getNewPoint
375  * -- Either the element is encroached or is skinny, so get the new point to add
376  * =============================================================================
377  */
379 element_getNewPoint (element_t* elementPtr);
382 
383 
384 /* =============================================================================
385  * element_checkAngles
386  *
387  * Return FALSE if minimum angle constraint not met
388  * =============================================================================
389  */
390 bool_t
391 element_checkAngles (element_t* elementPtr);
392 
393 
394 /* =============================================================================
395  * element_print
396  * =============================================================================
397  */
398 void
399 element_print (element_t* elementPtr);
400 
401 
402 /* =============================================================================
403  * element_printEdge
404  * =============================================================================
405  */
406 void
407 element_printEdge (edge_t* edgePtr);
408 
409 
410 /* =============================================================================
411  * element_printAngles
412  * =============================================================================
413  */
414 void
415 element_printAngles (element_t* elementPtr);
416 
417 
418 #define PELEMENT_ALLOC(c, n) Pelement_alloc(c, n)
419 #define PELEMENT_FREE(e) /*Pelement_free(e)*/
420 
421 
422 #define TMELEMENT_ALLOC(c, n) TMelement_alloc(TM_ARG c, n)
423 #define TMELEMENT_FREE(e) /*TMelement_free(TM_ARG e)*/
424 #define TMELEMENT_ISREFERENCED(e) TMelement_isReferenced(TM_ARG e)
425 #define TMELEMENT_SETISREFERENCED(e, s) TMelement_setIsReferenced(TM_ARG e, s)
426 #define TMELEMENT_ISGARBAGE(e) TMelement_isGarbage(TM_ARG e)
427 #define TMELEMENT_SETISGARBAGE(e, s) TMelement_setIsGarbage(TM_ARG e, s)
428 #define TMELEMENT_ADDNEIGHBOR(e, n) TMelement_addNeighbor(TM_ARG e, n)
429 #define TMELEMENT_GETNEIGHBORLIST(e) TMelement_getNeighborListPtr(TM_ARG e)
430 
431 
432 #endif /* ELEMENT_H */
433 
434 
435 /* =============================================================================
436  *
437  * End of element.h
438  *
439  * =============================================================================
440  */
bool_t element_isSkinny(element_t *elementPtr)
Definition: element.c:747
bool_t element_isBad(element_t *elementPtr)
Definition: element.c:759
list_t * element_getNeighborListPtr(element_t *elementPtr)
Definition: element.c:886
long element_listCompareEdge(const void *aPtr, const void *bPtr)
Definition: element.c:612
#define TM_CALLABLE
Definition: cxxtm.hpp:32
long TMelement_listCompareEdge(TM_ARGDECL const void *aPtr, const void *bPtr)
Definition: element.c:621
pair_t edge_t
Definition: element.h:83
bool_t element_isInCircumCircle(element_t *elementPtr, coordinate_t *coordinatePtr)
Definition: element.c:700
edge_t * element_getEdge(element_t *elementPtr, long i)
Definition: element.c:566
long TMelement_compare(TM_ARGDECL element_t *aElementPtr, element_t *bElementPtr)
Definition: element.c:355
element_t * TMelement_alloc(TM_ARGDECL coordinate_t *coordinates, long numCoordinate)
Definition: element.c:487
long element_listCompare(const void *aPtr, const void *bPtr)
Definition: element.c:345
TM_CALLABLE bool_t TMelement_isReferenced(TM_ARGDECL element_t *elementPtr)
Definition: element.c:784
long element_mapCompareEdge(const pair_t *aPtr, const pair_t *bPtr)
Definition: element.c:637
void TMelement_free(TM_ARGDECL element_t *elementPtr)
Definition: element.c:541
long element_heapCompare(const void *aPtr, const void *bPtr)
Definition: element.c:653
TM_CALLABLE void TMelement_setIsReferenced(TM_ARGDECL element_t *elementPtr, bool_t status)
Definition: element.c:806
element_t * element_alloc(coordinate_t *coordinates, long numCoordinate)
Definition: element.c:423
void element_addNeighbor(element_t *elementPtr, element_t *neighborPtr)
Definition: element.c:863
void TMelement_addNeighbor(TM_ARGDECL element_t *elementPtr, element_t *neighborPtr)
Definition: element.c:875
int bool_t
Definition: portable_defns.h:32
long TMelement_listCompare(TM_ARGDECL const void *aPtr, const void *bPtr)
Definition: element.c:391
#define TM_ARGDECL
Definition: tm.h:532
Definition: element.c:84
coordinate_t coordinates[3]
Definition: element.c:85
TM_CALLABLE bool_t TMelement_isGarbage(TM_ARGDECL element_t *elementPtr)
Definition: element.c:830
bool_t element_checkAngles(element_t *elementPtr)
Definition: element.c:1005
void Pelement_free(element_t *elementPtr)
Definition: element.c:529
element_t * Pelement_alloc(coordinate_t *coordinates, long numCoordinate)
Definition: element.c:455
void element_print(element_t *elementPtr)
Definition: element.c:1032
void element_clearEncroached(element_t *elementPtr)
Definition: element.c:725
void element_free(element_t *elementPtr)
Definition: element.c:517
edge_t * element_getCommonEdge(element_t *aElementPtr, element_t *bElementPtr)
Definition: element.c:905
Definition: coordinate.h:79
coordinate_t TMelement_getNewPoint(TM_ARGDECL element_t *elementPtr)
Definition: element.c:976
long element_mapCompare(const pair_t *aPtr, const pair_t *bPtr)
Definition: element.c:406
void element_setIsReferenced(element_t *elementPtr, bool_t status)
Definition: element.c:795
void element_setIsGarbage(element_t *elementPtr, bool_t status)
Definition: element.c:841
long element_getNumEdge(element_t *elementPtr)
Definition: element.c:553
long numCoordinate
Definition: element.c:86
edge_t * TMelement_getCommonEdge(TM_ARGDECL element_t *aElementPtr, element_t *bElementPtr)
Definition: element.c:928
bool_t element_isGarbage(element_t *elementPtr)
Definition: element.c:818
coordinate_t element_getNewPoint(element_t *elementPtr)
Definition: element.c:957
Definition: list.h:93
long TMelement_heapCompare(TM_ARGDECL const void *aPtr, const void *bPtr)
Definition: element.c:674
Definition: pair.h:82
TM_CALLABLE void TMelement_setIsGarbage(TM_ARGDECL element_t *elementPtr, bool_t status)
Definition: element.c:852
void element_printAngles(element_t *elementPtr)
Definition: element.c:1063
bool_t element_isReferenced(element_t *elementPtr)
Definition: element.c:772
void element_printEdge(edge_t *edgePtr)
Definition: element.c:1050
list_t * TMelement_getNeighborListPtr(TM_ARGDECL element_t *elementPtr)
Definition: element.c:892
edge_t * element_getEncroachedPtr(element_t *elementPtr)
Definition: element.c:736
long element_compare(element_t *aElementPtr, element_t *bElementPtr)
Definition: element.c:312