summaryrefslogtreecommitdiffstats
path: root/args.h
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2017-12-01 19:30:36 -0800
committerKaz Kylheku <kaz@kylheku.com>2017-12-01 19:30:36 -0800
commit64266ae7f7f3d127f92accde2b78f84f5cdec7f1 (patch)
tree42251092033a8ed4b95a651327667fe3487f68a3 /args.h
parent6c94850e2cf44009648fd3d2ce3ef010aea8a7a0 (diff)
downloadtxr-64266ae7f7f3d127f92accde2b78f84f5cdec7f1.tar.gz
txr-64266ae7f7f3d127f92accde2b78f84f5cdec7f1.tar.bz2
txr-64266ae7f7f3d127f92accde2b78f84f5cdec7f1.zip
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.
Diffstat (limited to 'args.h')
-rw-r--r--args.h5
1 files changed, 5 insertions, 0 deletions
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, ...);