source: EcnlProtoTool/trunk/mruby-1.3.0/include/mruby/hash.h@ 331

Last change on this file since 331 was 331, checked in by coas-nagasima, 6 years ago

prototoolに関連するプロジェクトをnewlibからmuslを使うよう変更・更新
ntshellをnewlibの下位の実装から、muslのsyscallの実装に変更・更新
以下のOSSをアップデート
・mruby-1.3.0
・musl-1.1.18
・onigmo-6.1.3
・tcc-0.9.27
以下のOSSを追加
・openssl-1.1.0e
・curl-7.57.0
・zlib-1.2.11
以下のmrbgemsを追加
・iij/mruby-digest
・iij/mruby-env
・iij/mruby-errno
・iij/mruby-iijson
・iij/mruby-ipaddr
・iij/mruby-mock
・iij/mruby-require
・iij/mruby-tls-openssl

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
File size: 4.1 KB
Line 
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 "common.h"
11#include <mruby/khash.h>
12
13/**
14 * Hash class
15 */
16MRB_BEGIN_DECL
17
18struct RHash {
19 MRB_OBJECT_HEADER;
20 struct iv_tbl *iv;
21 struct kh_ht *ht;
22};
23
24#define mrb_hash_ptr(v) ((struct RHash*)(mrb_ptr(v)))
25#define mrb_hash_value(p) mrb_obj_value((void*)(p))
26
27MRB_API mrb_value mrb_hash_new_capa(mrb_state*, mrb_int);
28
29/*
30 * Initializes a new hash.
31 *
32 * Equivalent to:
33 *
34 * Hash.new
35 *
36 * @param mrb The mruby state reference.
37 * @return The initialized hash.
38 */
39MRB_API mrb_value mrb_hash_new(mrb_state *mrb);
40
41/*
42 * Sets a keys and values to hashes.
43 *
44 * Equivalent to:
45 *
46 * hash[key] = val
47 *
48 * @param mrb The mruby state reference.
49 * @param hash The target hash.
50 * @param key The key to set.
51 * @param val The value to set.
52 * @return The value.
53 */
54MRB_API void mrb_hash_set(mrb_state *mrb, mrb_value hash, mrb_value key, mrb_value val);
55
56/*
57 * Gets a value from a key. If the key is not found, the default of the
58 * hash is used.
59 *
60 * Equivalent to:
61 *
62 * hash[key]
63 *
64 * @param mrb The mruby state reference.
65 * @param hash The target hash.
66 * @param key The key to get.
67 * @return The found value.
68 */
69MRB_API mrb_value mrb_hash_get(mrb_state *mrb, mrb_value hash, mrb_value key);
70
71/*
72 * Gets a value from a key. If the key is not found, the default parameter is
73 * used.
74 *
75 * Equivalent to:
76 *
77 * hash.hash_key?(key) ? hash[key] : def
78 *
79 * @param mrb The mruby state reference.
80 * @param hash The target hash.
81 * @param key The key to get.
82 * @param def The default value.
83 * @return The found value.
84 */
85MRB_API mrb_value mrb_hash_fetch(mrb_state *mrb, mrb_value hash, mrb_value key, mrb_value def);
86
87/*
88 * Deletes hash key and value pair.
89 *
90 * Equivalent to:
91 *
92 * hash.delete(key)
93 *
94 * @param mrb The mruby state reference.
95 * @param hash The target hash.
96 * @param key The key to delete.
97 * @return The deleted value.
98 */
99MRB_API mrb_value mrb_hash_delete_key(mrb_state *mrb, mrb_value hash, mrb_value key);
100
101/*
102 * Gets an array of keys.
103 *
104 * Equivalent to:
105 *
106 * hash.keys
107 *
108 * @param mrb The mruby state reference.
109 * @param hash The target hash.
110 * @return An array with the keys of the hash.
111 */
112MRB_API mrb_value mrb_hash_keys(mrb_state *mrb, mrb_value hash);
113MRB_API mrb_value mrb_check_hash_type(mrb_state *mrb, mrb_value hash);
114
115/*
116 * Check if the hash is empty
117 *
118 * Equivalent to:
119 *
120 * hash.empty?
121 *
122 * @param mrb The mruby state reference.
123 * @param self The target hash.
124 * @return True if the hash is empty, false otherwise.
125 */
126MRB_API mrb_value mrb_hash_empty_p(mrb_state *mrb, mrb_value self);
127
128/*
129 * Gets an array of values.
130 *
131 * Equivalent to:
132 *
133 * hash.values
134 *
135 * @param mrb The mruby state reference.
136 * @param hash The target hash.
137 * @return An array with the values of the hash.
138 */
139MRB_API mrb_value mrb_hash_values(mrb_state *mrb, mrb_value hash);
140
141/*
142 * Clears the hash.
143 *
144 * Equivalent to:
145 *
146 * hash.clear
147 *
148 * @param mrb The mruby state reference.
149 * @param hash The target hash.
150 * @return The hash
151 */
152MRB_API mrb_value mrb_hash_clear(mrb_state *mrb, mrb_value hash);
153
154/* declaration of struct kh_ht */
155/* be careful when you touch the internal */
156typedef struct {
157 mrb_value v;
158 mrb_int n;
159} mrb_hash_value;
160
161KHASH_DECLARE(ht, mrb_value, mrb_hash_value, TRUE)
162
163/* RHASH_TBL allocates st_table if not available. */
164#define RHASH(obj) ((struct RHash*)(mrb_ptr(obj)))
165#define RHASH_TBL(h) (RHASH(h)->ht)
166#define RHASH_IFNONE(h) mrb_iv_get(mrb, (h), mrb_intern_lit(mrb, "ifnone"))
167#define RHASH_PROCDEFAULT(h) RHASH_IFNONE(h)
168MRB_API struct kh_ht * mrb_hash_tbl(mrb_state *mrb, mrb_value hash);
169
170#define MRB_HASH_DEFAULT 1
171#define MRB_HASH_PROC_DEFAULT 2
172#define MRB_RHASH_DEFAULT_P(h) (RHASH(h)->flags & MRB_HASH_DEFAULT)
173#define MRB_RHASH_PROCDEFAULT_P(h) (RHASH(h)->flags & MRB_HASH_PROC_DEFAULT)
174
175/* GC functions */
176void mrb_gc_mark_hash(mrb_state*, struct RHash*);
177size_t mrb_gc_mark_hash_size(mrb_state*, struct RHash*);
178void mrb_gc_free_hash(mrb_state*, struct RHash*);
179
180MRB_END_DECL
181
182#endif /* MRUBY_HASH_H */
Note: See TracBrowser for help on using the repository browser.