/usr/include/synce_vector_template.h is in libsynce0-dev 0.15-1.1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | /* $Id: synce_vector_template.h 1504 2004-01-12 09:34:36Z twogood $ */
#include <synce.h>
#include <synce_log.h>
#include <stdlib.h>
#define SYNCE_VECTOR_DECLARE(name, prefix, type) \
\
struct _ ## name \
{ \
type* items; \
size_t used; \
size_t size; \
}; \
\
typedef struct _ ## name name; \
\
/** Create a new vector object */ \
name* prefix ## _new(); \
\
/** Destroy vector object */ \
void prefix ## _destroy(name* v, bool free_items); \
\
/** Add an item to vector */ \
name* prefix ## _add(name* v, type value); \
\
/** Add many items to vector */ \
name* prefix ## _add_many( \
name* v, \
type* values, \
size_t count);
#define SYNCE_VECTOR_IMPLEMENT(name, prefix, type) \
\
static void prefix ## _enlarge(name* v, size_t size) \
{ \
if (v->size < size) \
{ \
size_t new_size = v->size ? v->size : 2; \
\
while (new_size < size) \
new_size <<= 1; \
\
v->items = realloc(v->items, sizeof(type) * new_size); \
if (!v->items) \
{ \
synce_error("Failed to allocate space for %i elements - crashing!", new_size); \
} \
\
v->size = new_size; \
} \
} \
\
name* prefix ## _new() \
{ \
return (name*)calloc(1, sizeof(name)); \
} \
\
void prefix ## _destroy(name* v, bool free_items) \
{ \
if (v) \
{ \
if (free_items && v->items) \
free(v->items); \
free(v); \
} \
} \
\
name* prefix ## _add(name* v, type value) \
{ \
prefix ## _enlarge(v, v->used + 1); \
v->items[v->used++] = value; \
return v; \
} \
\
name* prefix ## _add_many( \
name* v, \
type* values, \
size_t count) \
{ \
unsigned i; \
\
prefix ## _enlarge(v, v->used + count); \
\
for (i = 0; i < count; i++) \
{ \
v->items[v->used++] = values[i]; \
} \
\
return v; \
}
|