From bce8cee8f97ebb76fad0aad158dc8e5a381a118c Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sun, 22 Jun 2025 05:24:00 +0900 Subject: [PATCH] khash.h (KHASH_FOREACH): a new macro to iterate over khash table --- include/mruby/khash.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/include/mruby/khash.h b/include/mruby/khash.h index c60320428..adfba727e 100644 --- a/include/mruby/khash.h +++ b/include/mruby/khash.h @@ -281,4 +281,24 @@ typedef const char *kh_cstr_t; MRB_END_DECL +/** + * Macro for iterating over all elements in a khash. + * + * Usage: + * KHASH_FOREACH(mrb, kh, k) { + * // k is the khiter_t iterator + * // Access the key with kh_key(kh, k) + * // Access the value with kh_val(kh, k) if applicable + * // Your code here + * } + * + * @param mrb The mrb_state + * @param kh The khash to iterate over + * @param k The name to use for the khiter_t iterator variable + */ +#define KHASH_FOREACH(mrb, kh, k) \ + if (kh) \ + for (khiter_t k = kh_begin(kh); k != kh_end(kh); k++) \ + if (kh_exist(kh, k)) + #endif /* MRUBY_KHASH_H */