From 64266ae7f7f3d127f92accde2b78f84f5cdec7f1 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Fri, 1 Dec 2017 19:30:36 -0800 Subject: args: keyword extraction mechanism. Implement a mechanism for extracting keyword arguments out of "struct args *" argument lists which avoids consing up an argument list and scanning it multiple times for multiple keywords. * args.c (args_for_each): New function. (struct args_bool_key, struct args_bool_ctx): New struct types. (args_key_check_store): New static function. (args_keys_extract_vl, args_key_extract): New functions. * args.h (args_for_each, args_keys_extract_vl, args_key_extract): Declared. --- args.h | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'args.h') diff --git a/args.h b/args.h index 5877e44c..6e0036c0 100644 --- a/args.h +++ b/args.h @@ -186,3 +186,8 @@ struct args *args_copy_zap(struct args *to, struct args *from); struct args *args_cat_zap(struct args *to, struct args *from); struct args *args_cat_zap_from(struct args *to, struct args *from, cnum index); val args_copy_to_list(struct args *args); +void args_for_each(struct args *args, + int (*fn)(val arg, int ix, mem_t *ctx), + mem_t *ctx); +void args_keys_extract_vl(struct args *args, va_list); +void args_keys_extract(struct args *args, ...); -- cgit v1.2.3