From 9e5b019e449d8a9fff63e6a76d90adfe94cf6aaa Mon Sep 17 00:00:00 2001 From: Yuichi Nishiwaki Date: Sun, 13 Jul 2014 12:27:03 +0900 Subject: [PATCH] add dictionary-for-each --- src/dict.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/dict.c b/src/dict.c index 6c8fb3c5..e9fd5e80 100644 --- a/src/dict.c +++ b/src/dict.c @@ -124,6 +124,23 @@ pic_dict_dict_size(pic_state *pic) return pic_int_value(pic_dict_size(pic, dict)); } +static pic_value +pic_dict_dict_for_each(pic_state *pic) +{ + struct pic_proc *proc; + struct pic_dict *dict; + xh_iter it; + + pic_get_args(pic, "ld", &proc, &dict); + + xh_begin(&it, &dict->hash); + while (xh_next(&it)) { + pic_apply2(pic, proc, pic_sym_value(xh_key(it.e, pic_sym)), xh_val(it.e, pic_value)); + } + + return pic_none_value(); +} + void pic_init_dict(pic_state *pic) { @@ -134,5 +151,6 @@ pic_init_dict(pic_state *pic) pic_defun(pic, "dictionary-set!", pic_dict_dict_set); pic_defun(pic, "dictionary-delete", pic_dict_dict_del); pic_defun(pic, "dictionary-size", pic_dict_dict_size); + pic_defun(pic, "dictionary-for-each", pic_dict_dict_for_each); } }