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 | #include "mruby/common.h"
|
---|
11 |
|
---|
12 | /**
|
---|
13 | * Hash class
|
---|
14 | */
|
---|
15 | MRB_BEGIN_DECL
|
---|
16 |
|
---|
17 | struct RHash {
|
---|
18 | MRB_OBJECT_HEADER;
|
---|
19 | struct iv_tbl *iv;
|
---|
20 | struct kh_ht *ht;
|
---|
21 | };
|
---|
22 |
|
---|
23 | #define mrb_hash_ptr(v) ((struct RHash*)(mrb_ptr(v)))
|
---|
24 | #define mrb_hash_value(p) mrb_obj_value((void*)(p))
|
---|
25 |
|
---|
26 | MRB_API mrb_value mrb_hash_new_capa(mrb_state*, int);
|
---|
27 |
|
---|
28 | /*
|
---|
29 | * Initializes a new hash.
|
---|
30 | */
|
---|
31 | MRB_API mrb_value mrb_hash_new(mrb_state *mrb);
|
---|
32 |
|
---|
33 | /*
|
---|
34 | * Sets a keys and values to hashes.
|
---|
35 | */
|
---|
36 | MRB_API void mrb_hash_set(mrb_state *mrb, mrb_value hash, mrb_value key, mrb_value val);
|
---|
37 |
|
---|
38 | /*
|
---|
39 | * Gets a value from a key.
|
---|
40 | */
|
---|
41 | MRB_API mrb_value mrb_hash_get(mrb_state *mrb, mrb_value hash, mrb_value key);
|
---|
42 |
|
---|
43 | MRB_API mrb_value mrb_hash_fetch(mrb_state *mrb, mrb_value hash, mrb_value key, mrb_value def);
|
---|
44 |
|
---|
45 | /*
|
---|
46 | * Deletes hash key and value pair.
|
---|
47 | */
|
---|
48 | MRB_API mrb_value mrb_hash_delete_key(mrb_state *mrb, mrb_value hash, mrb_value key);
|
---|
49 |
|
---|
50 | /*
|
---|
51 | * Gets an array of keys.
|
---|
52 | */
|
---|
53 | MRB_API mrb_value mrb_hash_keys(mrb_state *mrb, mrb_value hash);
|
---|
54 | MRB_API mrb_value mrb_check_hash_type(mrb_state *mrb, mrb_value hash);
|
---|
55 | MRB_API mrb_value mrb_hash_empty_p(mrb_state *mrb, mrb_value self);
|
---|
56 |
|
---|
57 | /*
|
---|
58 | * Clears the hash.
|
---|
59 | */
|
---|
60 | MRB_API mrb_value mrb_hash_clear(mrb_state *mrb, mrb_value hash);
|
---|
61 |
|
---|
62 | /* RHASH_TBL allocates st_table if not available. */
|
---|
63 | #define RHASH(obj) ((struct RHash*)(mrb_ptr(obj)))
|
---|
64 | #define RHASH_TBL(h) (RHASH(h)->ht)
|
---|
65 | #define RHASH_IFNONE(h) mrb_iv_get(mrb, (h), mrb_intern_lit(mrb, "ifnone"))
|
---|
66 | #define RHASH_PROCDEFAULT(h) RHASH_IFNONE(h)
|
---|
67 | MRB_API struct kh_ht * mrb_hash_tbl(mrb_state *mrb, mrb_value hash);
|
---|
68 |
|
---|
69 | #define MRB_HASH_PROC_DEFAULT 256
|
---|
70 | #define MRB_RHASH_PROCDEFAULT_P(h) (RHASH(h)->flags & MRB_HASH_PROC_DEFAULT)
|
---|
71 |
|
---|
72 | /* GC functions */
|
---|
73 | void mrb_gc_mark_hash(mrb_state*, struct RHash*);
|
---|
74 | size_t mrb_gc_mark_hash_size(mrb_state*, struct RHash*);
|
---|
75 | void mrb_gc_free_hash(mrb_state*, struct RHash*);
|
---|
76 |
|
---|
77 | MRB_END_DECL
|
---|
78 |
|
---|
79 | #endif /* MRUBY_HASH_H */
|
---|