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