summaryrefslogtreecommitdiffstats
path: root/src/idxset.h
blob: 615039776a26e067e5f815cd03d9e3b7c654f72a (plain)
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
#ifndef fooidxsethfoo
#define fooidxsethfoo

#include <inttypes.h>

#define IDXSET_INVALID ((uint32_t) -1)

unsigned idxset_trivial_hash_func(const void *p);
int idxset_trivial_compare_func(const void *a, const void *b);

unsigned idxset_string_hash_func(const void *p);
int idxset_string_compare_func(const void *a, const void *b);

struct idxset;

struct idxset* idxset_new(unsigned (*hash_func) (const void *p), int (*compare_func) (const void*a, const void*b));
void idxset_free(struct idxset *s, void (*free_func) (void *p, void *userdata), void *userdata);

int idxset_put(struct idxset*s, void *p, uint32_t *index);

void* idxset_get_by_index(struct idxset*s, uint32_t index);
void* idxset_get_by_data(struct idxset*s, void *p, uint32_t *index);

void* idxset_remove_by_index(struct idxset*s, uint32_t index);
void* idxset_remove_by_data(struct idxset*s, void *p, uint32_t *index);

/* This may be used to iterate through all entries. When called with
   an invalid index value it returns the first entry, otherwise the
   next following. The function is best called with *index =
   IDXSET_VALID first. */
void* idxset_rrobin(struct idxset *s, uint32_t *index);

/* Return the oldest entry in the idxset */
void* idxset_first(struct idxset *s, uint32_t *index);
void *idxset_next(struct idxset *s, uint32_t *index);

int idxset_foreach(struct idxset*s, int (*func)(void *p, uint32_t index, int *del, void*userdata), void *userdata);

unsigned idxset_ncontents(struct idxset*s);
int idxset_isempty(struct idxset *s);


#endif