Groonga 3.0.9 Source Code Document
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
hash.h
Go to the documentation of this file.
1 /*
2 ** mruby/hash.h - Hash class
3 **
4 ** See Copyright Notice in mruby.h
5 */
6 
7 #ifndef MRUBY_HASH_H
8 #define MRUBY_HASH_H
9 
10 #if defined(__cplusplus)
11 extern "C" {
12 #endif
13 
14 struct RHash {
16  struct iv_tbl *iv;
17  struct kh_ht *ht;
18 };
19 
20 #define mrb_hash_ptr(v) ((struct RHash*)(mrb_ptr(v)))
21 #define mrb_hash_value(p) mrb_obj_value((void*)(p))
22 
25 
26 void mrb_hash_set(mrb_state *mrb, mrb_value hash, mrb_value key, mrb_value val);
34 
35 /* RHASH_TBL allocates st_table if not available. */
36 #define RHASH(obj) ((struct RHash*)(mrb_ptr(obj)))
37 #define RHASH_TBL(h) (RHASH(h)->ht)
38 #define RHASH_IFNONE(h) mrb_iv_get(mrb, (h), mrb_intern2(mrb, "ifnone", 6))
39 #define RHASH_PROCDEFAULT(h) RHASH_IFNONE(h)
40 struct kh_ht * mrb_hash_tbl(mrb_state *mrb, mrb_value hash);
41 
42 #define MRB_HASH_PROC_DEFAULT 256
43 #define MRB_RHASH_PROCDEFAULT_P(h) (RHASH(h)->flags & MRB_HASH_PROC_DEFAULT)
44 
45 /* GC functions */
46 void mrb_gc_mark_hash(mrb_state*, struct RHash*);
47 size_t mrb_gc_mark_hash_size(mrb_state*, struct RHash*);
48 void mrb_gc_free_hash(mrb_state*, struct RHash*);
49 
50 #if defined(__cplusplus)
51 } /* extern "C" { */
52 #endif
53 
54 #endif /* MRUBY_HASH_H */