Woolz Image Processing  Version 1.7.5
AlcType.h
Go to the documentation of this file.
1 #ifndef ALCTYPE_H
2 #define ALCTYPE_H
3 #if defined(__GNUC__)
4 #ident "University of Edinburgh $Id: 14ccf7e6d5f0ab8e6bf936ff665bcc49c50a7542 $"
5 #else
6 static char _AlcType_h[] = "University of Edinburgh $Id: 14ccf7e6d5f0ab8e6bf936ff665bcc49c50a7542 $";
7 #endif
8 /*!
9 * \file libAlc/AlcType.h
10 * \author Bill Hill
11 * \date March 1999
12 * \version $Id: 14ccf7e6d5f0ab8e6bf936ff665bcc49c50a7542 $
13 * \par
14 * Address:
15 * MRC Human Genetics Unit,
16 * MRC Institute of Genetics and Molecular Medicine,
17 * University of Edinburgh,
18 * Western General Hospital,
19 * Edinburgh, EH4 2XU, UK.
20 * \par
21 * Copyright (C), [2012],
22 * The University Court of the University of Edinburgh,
23 * Old College, Edinburgh, UK.
24 *
25 * This program is free software; you can redistribute it and/or
26 * modify it under the terms of the GNU General Public License
27 * as published by the Free Software Foundation; either version 2
28 * of the License, or (at your option) any later version.
29 *
30 * This program is distributed in the hope that it will be
31 * useful but WITHOUT ANY WARRANTY; without even the implied
32 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
33 * PURPOSE. See the GNU General Public License for more
34 * details.
35 *
36 * You should have received a copy of the GNU General Public
37 * License along with this program; if not, write to the Free
38 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
39 * Boston, MA 02110-1301, USA.
40 * \brief Type definitions for the Woolz type allocation
41 * library.
42 */
43 
44 #ifndef WLZ_EXT_BIND
45 #ifdef __cplusplus
46 extern "C" {
47 #endif
48 #endif /* WLZ_EXT_BIND */
49 
50 /************************************************************************
51 * Portability macros. *
52 ************************************************************************/
53 #ifndef CTYPESGEN
54 #ifdef HAVE_STRTOK_R
55 #define ALC_STRTOK_R(S,D,P) strtok_r((S),(D),(P))
56 #else
57 #define ALC_STRTOK_R(S,D,P) strtok((S),(D))
58 #endif
59 #ifdef HAVE_TIMERSUB
60 #define ALC_TIMERSUB(A,B,R) timersub((A),(B),(R))
61 #else
62 #define ALC_TIMERSUB(A,B,R) \
63 { \
64  (R)->tv_sec = (A)->tv_sec - (B)->tv_sec; \
65  (R)->tv_usec = (A)->tv_usec - (B)->tv_usec; \
66  if((R)->tv_usec < 0) \
67  { \
68  (R)->tv_sec -= 1; \
69  (R)->tv_usec += 1000000; \
70  } \
71 }
72 #endif
73 #endif
74 
75 
76 /*!
77 * \enum _AlcErrno
78 * \ingroup AlcError
79 * \brief Error codes returned by functions of the
80 * memory allocation and fundamental type library.
81 * Typedef: ::AlcErrno
82 */
83 typedef enum _AlcErrno
84 {
85  ALC_ER_NONE = 0, /*!< Noe error */
86  ALC_ER_ALLOC, /*!< Memory allocation error */
87  ALC_ER_NULLPTR, /*!< Null pointer detected */
88  ALC_ER_NUMELEM, /*!< Inappropriate number of elements */
89  ALC_ER_PARAM, /*!< Inappropriate function paramerter */
90  ALC_ER_READ, /*!< File read failure */
91  ALC_ER_WRITE /*!< File write failure */
92 } AlcErrno;
93 
94 
95 /*!
96 * \struct _AlcBlockStack
97 * \ingroup AlcBlockStack
98 * \brief General purpose data structure for maintaining blocks
99 * of some data type. Useful for efficient memory allocation.
100 * It's not a stack but a doubly linked list of blocks of
101 * data which can be used as a stack, heap, list, ....
102 * Typedef: ::AlcBlockStack
103 */
104 typedef struct _AlcBlockStack
105 {
106  size_t elmCnt; /*!< Number of elements used in block */
107  size_t maxElm; /*!< Number of elements space allocated for
108  in block */
109  void *elements; /*!< Block of elements */
110  struct _AlcBlockStack *prev; /*!< Previous block up in stack */
111  struct _AlcBlockStack *next; /*!< Next block down, remember it's a
112  doubly linked list not a stack! */
113 } AlcBlockStack;
114 
115 #ifndef WLZ_EXT_BIND
116 /*!
117 * \typedef AlcLRUCKeyFn
118 * \ingroup AlcLRUCache
119 * \brief Function called to compute a ::AlcLRUCache item's numeric
120 * key given it's entry.
121 * The required function parameters are the cache and the
122 * entry.
123 */
124 struct _AlcLRUCache;
125 typedef unsigned int (*AlcLRUCKeyFn)(struct _AlcLRUCache *, void *);
126 
127 /*!
128 * \typedef AlcLRUCCmpFn
129 * \ingroup AlcLRUCache
130 * \brief Function called to compare two entries in a ::AlcLRUCache.
131 * This function must return zero only iff the two entries
132 * match.
133 * The required function parameters are the two cache entry
134 * data structures with sufficient fields set to make a
135 * comparison.
136 */
137 typedef int (*AlcLRUCCmpFn)(const void *, const void *);
138 
139 /*!
140 * \typedef AlcLRUCCmpFn
141 * \ingroup AlcLRUCache
142 * \brief Function called when a ::AlcLRUCache item is unlinked and
143 * removed from the cache. It may be used, for example, to
144 * free the item's entry.
145 * The required function parameters are the cache and the
146 * entry that will be unlinked and removed.
147 */
148 struct _AlcLRUCache;
149 struct _AlcLRUCItem;
150 typedef void (*AlcLRUCUnlinkFn)(struct _AlcLRUCache *, void *);
151 
152 /*!
153 * \struct _AlcLRUCItem
154 * \ingroup AlcLRUCache
155 * \brief A cache item for a ::AlcLRUCache.
156 * Typedef: ::AlcLRUCItem
157 */
158 typedef struct _AlcLRUCItem
159 {
160  unsigned int key; /*!< Numeric key used as input to a hash
161  function to locate the item. */
162  size_t sz; /*!< Size of the item's entry. */
163  void *entry; /*!< User supplied entry. */
164  struct _AlcLRUCItem *rankPrv; /*!< Previous item in priority rank table. */
165  struct _AlcLRUCItem *rankNxt; /*!< Next item in priority rank table. */
166  struct _AlcLRUCItem *hashNxt; /*!< Next item in hash table or free
167  item list. */
168 } AlcLRUCItem;
169 
170 /*!
171 * \struct _AlcLRUCache
172 * \ingroup AlcLRUCache
173 * \brief A least recent use removal cache allowing rank and random
174 * access to it's entries. Rank access is via a doubly linked
175 * list (using rankPrv and rankNxt), while random access is
176 * via hash table (using the item's key and hashNxt).
177 * The cache will unlink items as required to maintain the
178 * set maximum number of entries and maximum total entry
179 * size.
180 * Typedef: ::AlcLRUCache
181 */
182 typedef struct _AlcLRUCache
183 {
184  unsigned int numItem; /*!< Current number of items in the cache. */
185  unsigned int maxItem; /*!< Maximum number of items in the cache. */
186  size_t curSz; /*!< Current total cache size. */
187  size_t maxSz; /*!< Maximum total cache size. */
188  unsigned int hashTblSz; /*!< Size of the hash table. */
189  unsigned int itemBlkSz; /*!< Number of items to allocate in a block. */
190  AlcLRUCKeyFn keyFn; /*!< Function called to compute a numeric
191  key for an entry. */
192  AlcLRUCCmpFn cmpFn; /*!< Function called to compare two entries,
193  returning zero only iff the entries
194  match. */
195  AlcLRUCUnlinkFn unlinkFn; /*!< Function called before unlinking and
196  removing an item from the cache. */
197  struct _AlcBlockStack *freeStack; /*!< Stack of blocks of items. */
198  struct _AlcLRUCItem *freeList; /*!< Head of the linked list of free cache
199  items available for use. */
200  struct _AlcLRUCItem *rankHead; /*!< Head of the linked list of cache items
201  in priority rank order. This is
202  maintained with the most recently used
203  item at the head and the least recently
204  used item at the tail. */
205  struct _AlcLRUCItem *rankTail; /*!< Tail of the linked list of cache items
206  in rank order. */
207  struct _AlcLRUCItem **hashTbl; /*!< Hash table of cache items. */
208 } AlcLRUCache;
209 #endif /* WLZ_EXT_BIND */
210 
211 /*!
212 * \struct _AlcCPQQueue
213 * \ingroup AlcCPQ
214 * \brief An \f$O(1)\f$ priority queue based on the Calendar
215 * Priority Queue data structure.
216 * Typedef: ::AlcCPQQueue.
217 */
218 typedef struct _AlcCPQQueue
219 {
220  int nItem; /*!< Number of items in the queue. */
221  int nBucket; /*!< Number of buckets for items. */
222  int nItemIncThr; /*!< Threshold number of items, at
223  which the number of buckets is
224  increased. */
225  int nItemDecThr; /*!< Threshold number of items, at
226  which the number of buckets is
227  decreased. */
228  int lastIdx; /*!< The index (offset by bucketBase) of
229  the last bucket from which an item
230  was dequeued or the index of a top
231  priority item that has been inserted.
232  A negative value is used to indicate
233  that the index is invalid. */
234  int itemBlockSz; /*!< Number of items allocated in each
235  block by AlcBlockStackNew(). */
236  int bucketBase; /*!< The offset into the allocated buckets
237  of the current buckets. */
238  int maxBucket; /*!< The total number of buckets that have
239  been allocated. */
240  int resizable; /*!< Non-zero if the queue is resizable. */
241  float lastPriority; /*!< The priority of either the last item
242  dequeued or of the top priority item
243  that has been inserted. */
244  double bucketWidth; /*!< The width of each bucket. */
245  double bucketMin; /*!< The minimum priority for the bucket
246  with (offset) index lastIdx. A negative
247  value is used to indicate that the
248  minimum priority is invalid. */
249  struct _AlcCPQItem **buckets; /*!< Contiguous array of buckets. */
250  struct _AlcCPQItem *freeItem; /*!< List of items available for use in the
251  priority queue. */
252  struct _AlcBlockStack *freeStack; /*!< Free stack used to efficiently
253  allocate and free blocks of queue
254  items. */
255 } AlcCPQQueue;
256 
257 /*!
258 * \struct _AlcCPQItem
259 * \ingroup AlcCPQ
260 * \brief An item in a calendar priority queue.
261 * Typedef: ::AlcCPQItem.
262 */
263 typedef struct _AlcCPQItem
264 {
265  float priority; /*!< Priority of the item, which must be
266  \f$ \geq 0\f$. Priority is greater
267  for greater priority values. */
268  void *entry; /*!< User supplied entry. May be NULL. */
269  struct _AlcCPQItem *prev; /*!< Previous item in bucket or free
270  item list. */
271  struct _AlcCPQItem *next; /*!< Next item in bucket or free
272  item list. */
273 } AlcCPQItem;
274 
275 /*!
276 * \enum _AlcDirection
277 * \ingroup AlcBlockStack
278 * \brief Data structure traversal direction.
279 * Typedef: ::AlcDirection
280 */
281 typedef enum _AlcDirection
282 {
283  ALC_DIRECTION_FWD, /*!< Towards end of a data structure,
284  eg the tail of a list */
285  ALC_DIRECTION_REV /*!< Towards begining of a data structure,
286  eg the head of a list */
287 } AlcDirection;
288 
289 
290 /*!
291 * \struct _AlcDLPItem
292 * \ingroup AlcDLPList
293 * \brief A doubly linked list item.
294 * Typedef: ::AlcDLPItem
295 */
296 typedef struct _AlcDLPItem
297 {
298 #ifdef WLZ_EXT_BIND
299  void *freeFn;
300 #else /* WLZ_EXT_BIND */
301  void (*freeFn)(void *); /*!< Function to free list item, may be
302  NULL */
303 #endif /* WLZ_EXT_BIND */
304  void *entry; /*!< The list item's entry */
305  struct _AlcDLPItem *next; /*!< The next item in the list, towards the
306  tail of the list*/
307  struct _AlcDLPItem *prev; /*!< The previous item in the list, towards
308  the head of the list */
309 } AlcDLPItem;
310 
311 /*!
312 * \struct _AlcDLPList
313 * \ingroup AlcDLPList
314 * \brief A doubly linked list of pointers.
315 * Typedef: ::AlcDLPList
316 */
317 typedef struct _AlcDLPList
318 {
319  AlcDLPItem *head; /*!< The head of the list */
320 } AlcDLPList;
321 
322 #ifndef WLZ_EXT_BIND
323 /*!
324 * \struct _AlcHashItem
325 * \ingroup AlcHashTable
326 * \brief A hash table item.
327 * Typedef: ::AlcHashItem
328 */
329 typedef struct _AlcHashItem
330 {
331  void (*freeFn)(void *); /*!< Function to free the hash item, may
332  be NULL */
333  void *entry; /*!< The hash item's entry */
334  void *key; /*!< The key which identifies the hash item */
335  struct _AlcHashItem *next; /*!< Next item in the hash tables linked list,
336  NULL if this is the last item */
337  struct _AlcHashItem *prev; /*!< Previous item in the hash tables linked
338  list, NULL if this is the first item */
339 } AlcHashItem;
340 
341 /*!
342 * \struct _AlcHashTable
343 * \ingroup AlcHashTable
344 * \brief A hash table.
345 * Typedef: ::AlcHashTable
346 */
347 typedef struct _AlcHashTable
348 {
349  int (*keyCmp)(void *, void *); /*!< Key comparison function */
350  size_t (*hashFn)(void *); /*!< The hashing function */
351  size_t tableSz; /*!< Number of list slots in the
352  hash table */
353  AlcHashItem **table; /*!< Table of lists */
354 } AlcHashTable;
355 #endif /* WLZ_EXT_BIND */
356 
357 
358 /*!
359 * \struct _AlcVector
360 * \ingroup AlcVector
361 * \brief An extensible 1D array.
362 * Typedef: ::AlcVector
363 */
364 typedef struct _AlcVector
365 {
366  size_t elmSz; /*!< Size of elements of the vector */
367  size_t blkCnt; /*!< Number of block pointers */
368  size_t blkUse; /*!< Number of blocks used */
369  size_t blkSz; /*!< Number of elements in a block, must NOT be
370  changed once vector has been created! */
371  void *freeStack; /*!< Free stack */
372  void **blocks; /*!< Data blocks */
373 } AlcVector;
374 
375 /*!
376 * \enum _AlcPointType
377 * \brief Type of coordinate point.
378 * Typedef: ::AlcPointType
379 */
380 
381 typedef enum _AlcPointType
382 {
383  ALC_POINTTYPE_INT, /*!< Integer point */
384  ALC_POINTTYPE_DBL /*!< Double precision floating point point */
385 } AlcPointType;
386 
387 /*!
388 * \union _AlcPointP
389 * \brief Pointer to a generic coordinate.
390 * Typedef: ::AlcPointP
391 */
392 typedef union _AlcPointP
393 {
394  void *kV; /*!< Pointer to any point */
395  int *kI; /*!< Pointer to an integer point */
396  double *kD; /*!< Pointer to a double precision floating
397  point point */
398 } AlcPointP;
399 
400 
401 /*!
402 * \struct _AlcKDTNode
403 * \ingroup AlcKDTree
404 * \brief A node in a binary space partition tree (kD-tree).
405 * Typedef: ::AlcKDTNode
406 */
407 typedef struct _AlcKDTNode
408 {
409  size_t idx; /*!< Index or identifier for the node */
410  int split; /*!< The splitting dimension */
411  struct _AlcKDTNode *parent; /*!< The parent node, NULL if the node is
412  the root of the tree */
413  struct _AlcKDTNode *childN; /*!< Child node with -ve comparision result */
414  struct _AlcKDTNode *childP; /*!< Child node with +ve comparision result */
415  AlcPointP key; /*!< The node's key value */
416  AlcPointP boundN; /*!< Coordinate of the minimum bounding box
417  values */
418  AlcPointP boundP; /*!< Coordinate of the maximum bounding box
419  values */
420 } AlcKDTNode;
421 
422 /*!
423 * \struct _AlcKDTTree
424 * \ingroup AlcKDTree
425 * \brief A binary space partition tree (kD-tree).
426 * Typedef: ::AlcKDTTree
427 */
428 typedef struct _AlcKDTTree
429 {
430  AlcPointType type; /*!< The type of tree, ie the type of node
431  key */
432  int dim; /*!< Dimension of the tree. */
433  size_t keySz; /*!< sizeof(key) * dimension */
434  double tol; /*!< Comparision tollerance for double key
435  values */
436  size_t nNodes; /*!< Number of nodes in the tree */
437  struct _AlcKDTNode *root; /*!< The root node of the tree. */
438  struct _AlcKDTNode *nodeStack; /*!< Stack of nodes available for use */
439  size_t nodeBlockSz; /*!< Number of nodes allocated in a block */
440  AlcBlockStack *freeStack; /*!< Stack of allocated node blocks */
441 } AlcKDTTree;
442 
443 /*!
444 * \struct _AlcHeapEntryCore
445 * \ingroup AlcHeap
446 * \brief Core heap entry data structure. All other heap entry
447 * data structures must have the fields of this data
448 * structure first.
449 * Typedef: ::AlcHeapEntryCore
450 */
451 typedef struct _AlcHeapEntryCore
452 {
453  double priority; /*!< Entry priority highest/lowest
454  priority at the head of the
455  queue depending on
456  AlcHeap::topPriLo. */
458 
459 /*!
460 * \struct _AlcHeap
461 * \ingroup AlcHeap
462 * \brief A general purpose heap data structure.
463 * Typedef: ::AlcHeap
464 */
465 typedef struct _AlcHeap
466 {
467  int nEnt; /*!< Number of entries in use:
468  incremented when entry inserted,
469  no change is popped,
470  decremented when entry freed. */
471  int maxEnt; /*!< Number of entries allocated. */
472  int entInc; /*!< When allocating space for more
473  entries, allocate space for
474  this many at a time. */
475  int entSz; /*!< Size of each heap entry. */
476  int topPriLo; /*!< If non-zero the top priority
477  is low rather than high. This
478  should be set (default is zero)
479  before any entries are added
480  to the heap. */
481  void *data; /*!< Application data. */
482  void *entries; /*!< Allocated heap entries. */
483 } AlcHeap;
484 
485 /*!
486 * \struct _AlcUFTree
487 * \ingroup AlcUFTree
488 * \brief A general purpose union tree based on Robert Sedgewick's
489 * Weighted Quick Union Find.
490 */
491 typedef struct _AlcUFTree
492 {
493  int *pr; /*!< The parent node of each node in
494  the tree. */
495  int *sz; /*!< The number of nodes in the subtree
496  of the nodes (including the node
497  itself). */
498  int nCmp; /*!< Number of components in the
499  tree. */
500  int nNod; /*!< Number of nodes. */
501  int maxNod; /*!< Maximum number of nodes space
502  allocated for. */
503 } AlcUFTree;
504 
505 #ifndef WLZ_EXT_BIND
506 #ifdef __cplusplus
507 } /* Close scope of 'extern "C" */
508 #endif
509 #endif /* WLZ_EXT_BIND */
510 
511 #endif /* ALCTYPE_H */
struct _AlcLRUCItem AlcLRUCItem
int nCmp
Definition: AlcType.h:498
A node in a binary space partition tree (kD-tree). Typedef: AlcKDTNode.
Definition: AlcType.h:407
void * freeStack
Definition: AlcType.h:371
double bucketWidth
Definition: AlcType.h:244
Definition: AlcType.h:91
int lastIdx
Definition: AlcType.h:228
struct _AlcBlockStack * freeStack
Definition: AlcType.h:252
size_t idx
Definition: AlcType.h:409
struct _AlcLRUCItem * rankNxt
Definition: AlcType.h:165
Definition: AlcType.h:86
int entSz
Definition: AlcType.h:475
enum _AlcErrno AlcErrno
unsigned int maxItem
Definition: AlcType.h:185
General purpose data structure for maintaining blocks of some data type. Useful for efficient memory ...
Definition: AlcType.h:104
int * sz
Definition: AlcType.h:495
_AlcPointType
Type of coordinate point. Typedef: AlcPointType.
Definition: AlcType.h:381
void(* AlcLRUCUnlinkFn)(struct _AlcLRUCache *, void *)
Definition: AlcType.h:150
struct _AlcHashItem * prev
Definition: AlcType.h:337
size_t blkCnt
Definition: AlcType.h:367
void * data
Definition: AlcType.h:481
unsigned int itemBlkSz
Definition: AlcType.h:189
void * kV
Definition: AlcType.h:394
void * key
Definition: AlcType.h:334
unsigned int(* AlcLRUCKeyFn)(struct _AlcLRUCache *, void *)
Function called to compute a AlcLRUCache item&#39;s numeric key given it&#39;s entry. The required function p...
Definition: AlcType.h:125
int entInc
Definition: AlcType.h:472
int maxNod
Definition: AlcType.h:501
AlcHashItem ** table
Definition: AlcType.h:353
unsigned int numItem
Definition: AlcType.h:184
AlcPointType type
Definition: AlcType.h:430
struct _AlcLRUCItem * hashNxt
Definition: AlcType.h:166
Core heap entry data structure. All other heap entry data structures must have the fields of this dat...
Definition: AlcType.h:451
struct _AlcKDTNode * childP
Definition: AlcType.h:414
int nItem
Definition: AlcType.h:220
struct _AlcLRUCItem * rankTail
Definition: AlcType.h:205
struct _AlcLRUCItem ** hashTbl
Definition: AlcType.h:207
unsigned int key
Definition: AlcType.h:160
int itemBlockSz
Definition: AlcType.h:234
struct _AlcDLPItem * prev
Definition: AlcType.h:307
Definition: AlcType.h:383
struct _AlcKDTNode * nodeStack
Definition: AlcType.h:438
void * entry
Definition: AlcType.h:333
Definition: AlcType.h:90
size_t maxElm
Definition: AlcType.h:107
struct _AlcKDTNode * childN
Definition: AlcType.h:413
int bucketBase
Definition: AlcType.h:236
An item in a calendar priority queue. Typedef: AlcCPQItem.
Definition: AlcType.h:263
A general purpose heap data structure. Typedef: AlcHeap.
Definition: AlcType.h:465
struct _AlcBlockStack * next
Definition: AlcType.h:111
enum _AlcPointType AlcPointType
A least recent use removal cache allowing rank and random access to it&#39;s entries. Rank access is via ...
Definition: AlcType.h:182
int split
Definition: AlcType.h:410
int maxBucket
Definition: AlcType.h:238
struct _AlcVector AlcVector
A doubly linked list of pointers. Typedef: AlcDLPList.
Definition: AlcType.h:317
int maxEnt
Definition: AlcType.h:471
Definition: AlcType.h:88
struct _AlcLRUCache AlcLRUCache
_AlcErrno
Error codes returned by functions of the memory allocation and fundamental type library. Typedef: AlcErrno.
Definition: AlcType.h:83
AlcLRUCKeyFn keyFn
Definition: AlcType.h:190
void * entry
Definition: AlcType.h:304
union _AlcPointP AlcPointP
AlcPointP boundP
Definition: AlcType.h:418
A doubly linked list item. Typedef: AlcDLPItem.
Definition: AlcType.h:296
size_t blkSz
Definition: AlcType.h:369
size_t curSz
Definition: AlcType.h:186
struct _AlcBlockStack * prev
Definition: AlcType.h:110
AlcBlockStack * freeStack
Definition: AlcType.h:440
void * entry
Definition: AlcType.h:268
double priority
Definition: AlcType.h:453
AlcDLPItem * head
Definition: AlcType.h:319
struct _AlcHeapEntryCore AlcHeapEntryCore
struct _AlcKDTTree AlcKDTTree
struct _AlcCPQItem * prev
Definition: AlcType.h:269
int * kI
Definition: AlcType.h:395
struct _AlcDLPItem * next
Definition: AlcType.h:305
A hash table item. Typedef: AlcHashItem.
Definition: AlcType.h:329
struct _AlcCPQItem AlcCPQItem
double bucketMin
Definition: AlcType.h:245
int nNod
Definition: AlcType.h:500
AlcLRUCCmpFn cmpFn
Definition: AlcType.h:192
A general purpose union tree based on Robert Sedgewick&#39;s Weighted Quick Union Find.
Definition: AlcType.h:491
struct _AlcHashItem AlcHashItem
enum _AlcDirection AlcDirection
struct _AlcLRUCItem * freeList
Definition: AlcType.h:198
struct _AlcDLPItem AlcDLPItem
int nEnt
Definition: AlcType.h:467
_AlcDirection
Data structure traversal direction. Typedef: AlcDirection.
Definition: AlcType.h:281
size_t nodeBlockSz
Definition: AlcType.h:439
struct _AlcCPQItem * next
Definition: AlcType.h:271
Definition: AlcType.h:87
Definition: AlcType.h:384
A binary space partition tree (kD-tree). Typedef: AlcKDTTree.
Definition: AlcType.h:428
A cache item for a AlcLRUCache. Typedef: AlcLRUCItem.
Definition: AlcType.h:158
size_t nNodes
Definition: AlcType.h:436
AlcPointP boundN
Definition: AlcType.h:416
void * elements
Definition: AlcType.h:109
size_t blkUse
Definition: AlcType.h:368
struct _AlcKDTNode * root
Definition: AlcType.h:437
int * pr
Definition: AlcType.h:493
Definition: AlcType.h:85
Definition: AlcType.h:285
int nItemIncThr
Definition: AlcType.h:222
int dim
Definition: AlcType.h:432
void ** blocks
Definition: AlcType.h:372
double tol
Definition: AlcType.h:434
struct _AlcKDTNode AlcKDTNode
size_t tableSz
Definition: AlcType.h:351
Pointer to a generic coordinate. Typedef: AlcPointP.
Definition: AlcType.h:392
float lastPriority
Definition: AlcType.h:241
struct _AlcHeap AlcHeap
struct _AlcKDTNode * parent
Definition: AlcType.h:411
int topPriLo
Definition: AlcType.h:476
struct _AlcCPQQueue AlcCPQQueue
size_t maxSz
Definition: AlcType.h:187
size_t elmSz
Definition: AlcType.h:366
struct _AlcCPQItem ** buckets
Definition: AlcType.h:249
double * kD
Definition: AlcType.h:396
struct _AlcLRUCItem * rankHead
Definition: AlcType.h:200
struct _AlcLRUCItem * rankPrv
Definition: AlcType.h:164
struct _AlcBlockStack AlcBlockStack
struct _AlcUFTree AlcUFTree
void * entries
Definition: AlcType.h:482
int resizable
Definition: AlcType.h:240
struct _AlcDLPList AlcDLPList
Definition: AlcType.h:283
struct _AlcBlockStack * freeStack
Definition: AlcType.h:197
unsigned int hashTblSz
Definition: AlcType.h:188
struct _AlcHashTable AlcHashTable
size_t sz
Definition: AlcType.h:162
An priority queue based on the Calendar Priority Queue data structure. Typedef: AlcCPQQueue.
Definition: AlcType.h:218
float priority
Definition: AlcType.h:265
int nBucket
Definition: AlcType.h:221
size_t elmCnt
Definition: AlcType.h:106
struct _AlcHashItem * next
Definition: AlcType.h:335
int(* AlcLRUCCmpFn)(const void *, const void *)
Function called to compare two entries in a AlcLRUCache. This function must return zero only iff the ...
Definition: AlcType.h:137
A hash table. Typedef: AlcHashTable.
Definition: AlcType.h:347
int nItemDecThr
Definition: AlcType.h:225
struct _AlcCPQItem * freeItem
Definition: AlcType.h:250
An extensible 1D array. Typedef: AlcVector.
Definition: AlcType.h:364
AlcPointP key
Definition: AlcType.h:415
size_t keySz
Definition: AlcType.h:433
AlcLRUCUnlinkFn unlinkFn
Definition: AlcType.h:195
Definition: AlcType.h:89
void * entry
Definition: AlcType.h:163