xref: /ext-ds/src/ds/ds_set.h (revision afbc3aef)
1 #ifndef DS_SET_H
2 #define DS_SET_H
3 
4 #include "../common.h"
5 #include "ds_htable.h"
6 
7 #define DS_SET_SIZE(s)     ((s)->table->size)
8 #define DS_SET_CAPACITY(s) ((s)->table->capacity)
9 #define DS_SET_IS_EMPTY(s)    (DS_SET_SIZE(s) == 0)
10 
11 #define DS_SET_FOREACH(set, value) DS_HTABLE_FOREACH_KEY(set->table, value)
12 #define DS_SET_FOREACH_END()       DS_HTABLE_FOREACH_END()
13 
14 typedef struct _ds_set_t {
15     ds_htable_t *table;
16 } ds_set_t;
17 
18 ds_set_t *ds_set();
19 ds_set_t *ds_set_ex(ds_htable_t *table);
20 ds_set_t *ds_set_clone(ds_set_t *set);
21 
22 void ds_set_free(ds_set_t *set);
23 void ds_set_clear(ds_set_t *set);
24 void ds_set_allocate(ds_set_t *set, zend_long capacity);
25 
26 void ds_set_add(ds_set_t *set, zval *value);
27 void ds_set_add_va(ds_set_t *set, VA_PARAMS);
28 bool ds_set_contains_va(ds_set_t *set, VA_PARAMS);
29 bool ds_set_contains(ds_set_t *set, zval *value);
30 void ds_set_remove_va(ds_set_t *set, VA_PARAMS);
31 
32 void ds_set_to_array(ds_set_t *set, zval *arr);
33 void ds_set_add_all(ds_set_t *set, zval *value);
34 
35 zval *ds_set_get(ds_set_t *set, zend_long index);
36 zval *ds_set_get_first(ds_set_t *set);
37 zval *ds_set_get_last(ds_set_t *set);
38 
39 ds_set_t *ds_set_slice(ds_set_t *set, zend_long index, zend_long length);
40 
41 void ds_set_sort_callback(ds_set_t *set);
42 void ds_set_sort(ds_set_t *set);
43 
44 ds_set_t *ds_set_sorted_callback(ds_set_t *set);
45 ds_set_t *ds_set_sorted(ds_set_t *set);
46 
47 void ds_set_join (ds_set_t *set, const char *glue, const size_t len, zval *return_value);
48 void ds_set_reduce(ds_set_t *set, FCI_PARAMS, zval *initial, zval *return_value);
49 
50 ds_set_t *ds_set_map(ds_set_t *set, FCI_PARAMS);
51 ds_set_t *ds_set_filter_callback(ds_set_t *set, FCI_PARAMS);
52 ds_set_t *ds_set_filter(ds_set_t *set);
53 
54 void ds_set_reverse (ds_set_t *set);
55 ds_set_t *ds_set_reversed(ds_set_t *set);
56 
57 ds_set_t *ds_set_diff(ds_set_t *set, ds_set_t *other);
58 ds_set_t *ds_set_intersect(ds_set_t *set, ds_set_t *other);
59 ds_set_t *ds_set_xor(ds_set_t *set, ds_set_t *other);
60 ds_set_t *ds_set_union(ds_set_t *set, ds_set_t *other);
61 ds_set_t *ds_set_merge(ds_set_t *set, zval *values);
62 
63 void ds_set_assign_diff(ds_set_t *set, ds_set_t *other);
64 void ds_set_assign_intersect(ds_set_t *set, ds_set_t *other);
65 void ds_set_assign_xor(ds_set_t *set, ds_set_t *other);
66 void ds_set_assign_union(ds_set_t *set, ds_set_t *other);
67 
68 void ds_set_sum(ds_set_t *set, zval *return_value);
69 
70 #endif
71