root/trunk/src/array-static.h

Revision 1496, 0.9 kB (checked in by darix, 20 months ago)

- cleanup trailing whitespaces

  • Property svn:eol-style set to native
Line 
1#ifndef _ARRAY_STATIC_H_
2#define _ARRAY_STATIC_H_
3
4/* define a generic array of <type>
5 * */
6
7#define ARRAY_STATIC_DEF(name, type, extra) \
8typedef struct { \
9        type **ptr; \
10        size_t used; \
11        size_t size; \
12        extra\
13} name
14
15/* all append operations need a 'resize' for the +1 */
16
17#define ARRAY_STATIC_PREPARE_APPEND(a) \
18        if (a->size == 0) { \
19                a->size = 16; \
20                a->ptr = malloc(a->size * sizeof(*(a->ptr))); \
21        } else if (a->size == a->used) { \
22                a->size += 16; \
23                a->ptr = realloc(a->ptr, a->size * sizeof(*(a->ptr))); \
24        }
25
26#define FOREACH(array, type, element, func) \
27do { size_t _i; for (_i = 0; _i < array->used; _i++) { type *element = array->ptr[_i]; func; } } while(0);
28
29#define STRUCT_INIT(type, var) \
30        type *var;\
31        var = calloc(1, sizeof(*var))
32
33#define ARRAY_STATIC_FREE(array, type, element, func) \
34        FOREACH(array, type, element, func); \
35        if(array->ptr) free(array->ptr); \
36        array->ptr = NULL;
37
38#endif
Note: See TracBrowser for help on using the browser.