1 #ifndef INTERNAL_SET_TABLE_H
2 #define INTERNAL_SET_TABLE_H
4 #include "include/ruby/st.h"
6 struct set_table_entry
;
8 typedef struct set_table_entry set_table_entry
;
11 /* Cached features of the table -- see st.c for more details. */
12 unsigned char entry_power
, bin_power
, size_ind
;
13 /* How many times the table was rebuilt. */
14 unsigned int rebuilds_num
;
15 const struct st_hash_type
*type
;
16 /* Number of entries currently in the table. */
17 st_index_t num_entries
;
18 /* Array of bins used for access by keys. */
20 /* Start and bound index of entries in array entries.
21 entries_starts and entries_bound are in interval
22 [0,allocated_entries]. */
23 st_index_t entries_start
, entries_bound
;
24 /* Array of size 2^entry_power. */
25 set_table_entry
*entries
;
28 typedef struct set_table set_table
;
30 typedef int set_foreach_callback_func(st_data_t
, st_data_t
);
31 typedef int set_foreach_check_callback_func(st_data_t
, st_data_t
, int);
32 typedef int set_update_callback_func(st_data_t
*key
, st_data_t arg
, int existing
);
34 #define set_table_size rb_set_table_size
35 size_t rb_set_table_size(const struct set_table
*tbl
);
36 #define set_init_table_with_size rb_set_init_table_with_size
37 set_table
*rb_set_init_table_with_size(set_table
*tab
, const struct st_hash_type
*, st_index_t
);
38 #define set_init_numtable rb_set_init_numtable
39 set_table
*rb_set_init_numtable(void);
40 #define set_delete rb_set_delete
41 int rb_set_delete(set_table
*, st_data_t
*); /* returns 0:notfound 1:deleted */
42 #define set_insert rb_set_insert
43 int rb_set_insert(set_table
*, st_data_t
);
44 #define set_lookup rb_set_lookup
45 int rb_set_lookup(set_table
*, st_data_t
);
46 #define set_foreach_with_replace rb_set_foreach_with_replace
47 int rb_set_foreach_with_replace(set_table
*tab
, set_foreach_check_callback_func
*func
, set_update_callback_func
*replace
, st_data_t arg
);
48 #define set_foreach rb_set_foreach
49 int rb_set_foreach(set_table
*, set_foreach_callback_func
*, st_data_t
);
50 #define set_foreach_check rb_set_foreach_check
51 int rb_set_foreach_check(set_table
*, set_foreach_check_callback_func
*, st_data_t
, st_data_t
);
52 #define set_keys rb_set_keys
53 st_index_t
rb_set_keys(set_table
*table
, st_data_t
*keys
, st_index_t size
);
54 #define set_free_table rb_set_free_table
55 void rb_set_free_table(set_table
*);
56 #define set_clear rb_set_clear
57 void rb_set_clear(set_table
*);
58 #define set_copy rb_set_copy
59 set_table
*rb_set_copy(set_table
*new_table
, set_table
*old_table
);
60 #define set_memsize rb_set_memsize
61 PUREFUNC(size_t rb_set_memsize(const set_table
*));
62 #define set_compact_table rb_set_compact_table
63 void set_compact_table(set_table
*tab
);