35 static
void mrb_hash_modify(
mrb_state *mrb, mrb_value hash);
37 static inline mrb_value
38 mrb_hash_ht_key(
mrb_state *mrb, mrb_value key)
46 #define KEY(key) mrb_hash_ht_key(mrb, key)
57 mrb_value key =
kh_key(h, k);
69 if (!hash->
ht)
return 0;
91 return mrb_obj_value(h);
141 mrb_hash_modify(mrb, hash);
182 return mrb_obj_value(ret);
203 mrb_hash_modify(
mrb_state *mrb, mrb_value hash)
245 mrb_hash_init_core(
mrb_state *mrb, mrb_value hash)
247 mrb_value block, ifnone;
252 mrb_hash_modify(mrb, hash);
259 ifnone = mrb_nil_value();
383 mrb_hash_default(
mrb_state *mrb, mrb_value hash)
391 if (argc == 0)
return mrb_nil_value();
422 mrb_hash_set_default(
mrb_state *mrb, mrb_value hash)
427 mrb_hash_modify(mrb, hash);
451 mrb_hash_default_proc(
mrb_state *mrb, mrb_value hash)
456 return mrb_nil_value();
473 mrb_hash_set_default_proc(
mrb_state *mrb, mrb_value hash)
478 mrb_hash_modify(mrb, hash);
502 return mrb_nil_value();
547 mrb_hash_shift(
mrb_state *mrb, mrb_value hash)
551 mrb_value delKey, delVal;
553 mrb_hash_modify(mrb, hash);
711 mrb_hash_replace(
mrb_state *mrb, mrb_value hash)
713 mrb_value hash2, ifnone;
718 hash2 = to_hash(mrb, hash2);
757 mrb_hash_size_m(
mrb_state *mrb, mrb_value
self)
761 if (!h)
return mrb_fixnum_value(0);
762 return mrb_fixnum_value(
kh_size(h));
780 if (h)
return mrb_bool_value(
kh_size(h) == 0);
781 return mrb_true_value();
785 inspect_hash(
mrb_state *mrb, mrb_value hash,
int recur)
831 mrb_hash_inspect(
mrb_state *mrb, mrb_value hash)
837 return inspect_hash(mrb, hash, 0);
849 mrb_hash_to_hash(
mrb_state *mrb, mrb_value hash)
878 mrb_value v =
kh_key(h,k);
899 mrb_hash_values(
mrb_state *mrb, mrb_value hash)
917 mrb_hash_has_keyWithKey(
mrb_state *mrb, mrb_value hash, mrb_value key)
924 return mrb_bool_value(k !=
kh_end(h));
926 return mrb_false_value();
949 mrb_hash_has_key(
mrb_state *mrb, mrb_value hash)
954 return mrb_hash_has_keyWithKey(mrb, hash, key);
958 mrb_hash_has_valueWithvalue(
mrb_state *mrb, mrb_value hash, mrb_value value)
968 return mrb_true_value();
973 return mrb_false_value();
992 mrb_hash_has_value(
mrb_state *mrb, mrb_value hash)
997 return mrb_hash_has_valueWithvalue(mrb, hash, val);
1001 hash_equal(
mrb_state *mrb, mrb_value hash1, mrb_value hash2,
int eql)
1005 if (
mrb_obj_equal(mrb, hash1, hash2))
return mrb_true_value();
1008 return mrb_false_value();
1011 return mrb_fixnum_value(
mrb_eql(mrb, hash2, hash1));
1013 return mrb_fixnum_value(
mrb_equal(mrb, hash2, hash1));
1018 return mrb_bool_value(!h2);
1020 if (!h2)
return mrb_false_value();
1029 k2 =
kh_get(ht, h2, key);
1035 return mrb_false_value();
1038 return mrb_true_value();
1062 mrb_hash_equal(
mrb_state *mrb, mrb_value hash1)
1067 return hash_equal(mrb, hash1, hash2,
FALSE);
1080 mrb_hash_eql(
mrb_state *mrb, mrb_value hash1)
1085 return hash_equal(mrb, hash1, hash2,
TRUE);
1149 mrb_value key, value, has_key;
1155 has_key = mrb_hash_has_keyWithKey(mrb, hash, key);
1161 return mrb_nil_value();
1181 mrb_value key, value, has_key;
1184 has_key = mrb_hash_has_keyWithKey(mrb, hash, key);
1190 return mrb_nil_value();