1 #ifndef RUBY_ID_TABLE_H
2 #define RUBY_ID_TABLE_H 1
3 #include "ruby/ruby.h"
4 
5 struct rb_id_table;
6 
7 /* compatible with ST_* */
8 enum rb_id_table_iterator_result {
9     ID_TABLE_CONTINUE = ST_CONTINUE,
10     ID_TABLE_STOP     = ST_STOP,
11     ID_TABLE_DELETE   = ST_DELETE,
12     ID_TABLE_ITERATOR_RESULT_END
13 };
14 
15 struct rb_id_table *rb_id_table_create(size_t size);
16 void rb_id_table_free(struct rb_id_table *tbl);
17 void rb_id_table_clear(struct rb_id_table *tbl);
18 
19 size_t rb_id_table_size(const struct rb_id_table *tbl);
20 size_t rb_id_table_memsize(const struct rb_id_table *tbl);
21 
22 int rb_id_table_insert(struct rb_id_table *tbl, ID id, VALUE val);
23 int rb_id_table_lookup(struct rb_id_table *tbl, ID id, VALUE *valp);
24 int rb_id_table_delete(struct rb_id_table *tbl, ID id);
25 
26 typedef enum rb_id_table_iterator_result rb_id_table_foreach_func_t(ID id, VALUE val, void *data);
27 typedef enum rb_id_table_iterator_result rb_id_table_foreach_values_func_t(VALUE val, void *data);
28 void rb_id_table_foreach(struct rb_id_table *tbl, rb_id_table_foreach_func_t *func, void *data);
29 void rb_id_table_foreach_values(struct rb_id_table *tbl, rb_id_table_foreach_values_func_t *func, void *data);
30 
31 #endif	/* RUBY_ID_TABLE_H */
32