Annotation of ircnowd/src/ngircd/array.h, Revision 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