46 lines
1.3 KiB
C
46 lines
1.3 KiB
C
#if !defined(_ZARRAY_H_)
|
|
|
|
#define _ZARRAY_H_ 1
|
|
|
|
#include <rtti.h>
|
|
#include <stdarg.h>
|
|
|
|
#include "mylock.h"
|
|
#include "xlist.h"
|
|
|
|
typedef void (*zarray_item_killer_t)(void*);
|
|
typedef int (*zarray_iter_fn_t)(void*, void*);
|
|
typedef int (*zarray_iter_skip_fn_t)(void*);
|
|
typedef int (*zarray_find_cond_fn_t)(void*, va_list);
|
|
|
|
typedef struct {
|
|
mylock_t lock;
|
|
int count;
|
|
int pos;
|
|
int caps;
|
|
int delta;
|
|
zarray_item_killer_t killer;
|
|
void** data;
|
|
} zarray_t;
|
|
|
|
extern int zarray_init(zarray_t*, int, zarray_item_killer_t);
|
|
extern int zarray_store(zarray_t*, void*);
|
|
extern int zarray_clear(zarray_t*, int);
|
|
extern int zarray_iter_ex(zarray_t*, zarray_iter_skip_fn_t, xlist_t*, void*);
|
|
extern int zarray_iter(zarray_t*, zarray_iter_fn_t, void*);
|
|
extern int zarray_del(zarray_t*, int);
|
|
extern int zarray_put(zarray_t*, int, void*);
|
|
extern int zarray_put_ex(zarray_t*, int, int*, void**);
|
|
extern int zarray_get_ex(zarray_t*, int, int*, void**);
|
|
extern void* zarray_get(zarray_t*, int);
|
|
extern void* zarray_find(zarray_t*, zarray_find_cond_fn_t, ...);
|
|
extern void zarray_fini(zarray_t*);
|
|
|
|
typedef struct {
|
|
int delta;
|
|
destroy_fn_t datakiller;
|
|
} xzarray_params_t;
|
|
|
|
extern typeinfo_t xzarray_type;
|
|
|
|
#endif
|