Annotation of ircnowd/src/ngircd/array.h, Revision 1.1.1.1
1.1 tomglok 1: /*
2: * This program is free software; you can redistribute it and/or modify
3: * it under the terms of the GNU General Public License as published by
4: * the Free Software Foundation; either version 2 of the License, or
5: * (at your option) any later version.
6: * Please read the file COPYING, README and AUTHORS for more information.
7: *
8: * libarray - dynamically allocate arrays.
9: * Copyright (c) 2005 Florian Westphal (westphal@foo.fh-furtwangen.de)
10: */
11:
12: #ifndef array_h_included
13: #define array_h_included
14:
15: /**
16: * @file
17: * Functions to dynamically allocate arrays (header).
18: */
19:
20: #include "portab.h"
21:
22: typedef struct {
23: char * mem;
24: size_t allocated;
25: size_t used;
26: } array;
27:
28: /* allocated: mem != NULL, used >= 0 && used <= allocated, allocated > 0
29: unallocated: mem == NULL, allocated == 0, used == 0 */
30:
31: #define array_unallocated(x) (array_bytes(x)==0)
32: #define INIT_ARRAY { NULL, 0, 0 }
33:
34: /* set all variables in a to 0 */
35: extern void array_init PARAMS((array *a));
36:
37: /* allocates space for at least nmemb+1 elements of size bytes each.
38: return pointer to elem at pos, or NULL if realloc() fails */
39: extern void * array_alloc PARAMS((array *a, size_t size, size_t pos));
40:
41: /* returns the number of initialized BYTES in a. */
42: #define array_bytes(array) ( (array)->used )
43:
44: /* returns the number of initialized ELEMS in a. */
45: extern size_t array_length PARAMS((const array* const a, size_t elemsize));
46:
47: /* _copy functions: copy src to dest.
48: return true if OK, else false (e. g. realloc failure, invalid src/dest
49: array, ...). In that case dest is left unchanged. */
50:
51: /* copy array src to dest */
52: extern bool array_copy PARAMS((array* dest, const array* const src));
53:
54: /* copy len bytes from src to array dest. */
55: extern bool array_copyb PARAMS((array* dest, const char* src, size_t len));
56:
57: /* copy string to dest */
58: extern bool array_copys PARAMS((array* dest, const char* src));
59:
60: /* _cat functions: append src to dest.
61: return true if OK, else false (e. g. realloc failure, invalid src/dest
62: array, ...). In that case dest is left unchanged. */
63:
64: /* append len bytes from src to array dest. */
65: extern bool array_catb PARAMS((array* dest, const char* src, size_t len));
66:
67: /* append string to dest */
68: extern bool array_cats PARAMS((array* dest, const char* src));
69:
70: /* append NUL byte to dest */
71: extern bool array_cat0 PARAMS((array* dest));
72:
73: /* append NUL byte to dest, but do not count null byte */
74: extern bool array_cat0_temporary PARAMS((array* dest));
75:
76: /* append contents of array src to array dest. */
77: extern bool array_cat PARAMS((array* dest, const array* const src));
78:
79: /* return pointer to element at pos.
80: return NULL if the array is unallocated or if pos is larger than the number
81: of elements stored int the array. */
82: extern void* array_get PARAMS((array* a, size_t membersize, size_t pos));
83:
84: /* free the contents of this array. */
85: extern void array_free PARAMS((array* a));
86:
87: /* overwrite array with zeros before free */
88: extern void array_free_wipe PARAMS((array* a));
89:
90: /* return pointer to first element in this array */
91: extern void* array_start PARAMS((const array* const a));
92:
93: /* reset this array (the memory is not free'd */
94: extern void array_trunc PARAMS((array* a));
95:
96: /* set number of used elements in this array to len */
97: extern void array_truncate PARAMS((array* a, size_t membersize, size_t len));
98:
99: /* move elements starting at pos to beginning of array */
100: extern void array_moveleft PARAMS((array* a, size_t membersize, size_t pos));
101:
102: #endif
103:
104: /* -eof- */
CVSweb