From 4e220dfaf2857eab6e907eec7df5947325c6076c Mon Sep 17 00:00:00 2001 From: Derek Dai Date: Sat, 18 Feb 2017 18:41:29 +0800 Subject: [PATCH] refactoring getter/setter for dict type of wfd_arg to remove declaration of temp variable --- src/ctl/wfd-arg.h | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/src/ctl/wfd-arg.h b/src/ctl/wfd-arg.h index 735603f..53c7706 100644 --- a/src/ctl/wfd-arg.h +++ b/src/ctl/wfd-arg.h @@ -91,29 +91,39 @@ )(_a); \ }) -#define wfd_arg_getkv(_a, _k, _v) ({ \ +#define wfd_arg_get_dictk(_a, _k) ({ \ assert(_a); \ assert(WFD_ARG_DICT == (_a)->type); \ wfd_arg_get((_a)->k, (_k)); \ +}) + +#define wfd_arg_get_dictv(_a, _v) ({ \ + assert(_a); \ + assert(WFD_ARG_DICT == (_a)->type); \ wfd_arg_get((_a)->v, (_v)); \ }) -#define wfd_arg_list_get(_l, _i, _v) ({ \ - assert(_l); \ - assert((_i) >= 0 && (_i) < (_l)->len); \ - struct wfd_arg *arg = (_l)->discrete \ - ? &(_l)->argv[(_i)] \ - : &(_l)->args[(_i)]; \ - wfd_arg_get(arg, _v); \ +#define wfd_arg_get_dict(_a, _k, _v) ({ \ + assert(_a); \ + assert(WFD_ARG_DICT == (_a)->type); \ + wfd_arg_get_dictk(_a, _k); \ + wfd_arg_get_dictv(_a, _v); \ }) -#define wfd_arg_list_getkv(_l, _i, _k, _v) ({ \ - assert(_l); \ - assert((_i) >= 0 && (_i) < (_l)->len); \ - struct wfd_arg *arg = (_l)->discrete \ - ? &(_l)->argv[(_i)] \ - : &(_l)->args[(_i)]; \ - wfd_arg_getkv(arg, (_k), (_v)); \ +#define wfd_arg_list_get(_l, _i, _v) ({ \ + wfd_arg_get(wfd_arg_list_at((_l), (_i)), (_v)); \ +}) + +#define wfd_arg_list_get_dictk(_l, _i, _k) ({ \ + wfd_arg_get_dictk(wfd_arg_list_at((_l), (_i)), (_k)); \ +}) + +#define wfd_arg_list_get_dictv(_l, _i, _v) ({ \ + wfd_arg_get_dictv(wfd_arg_list_at((_l), (_i)), (_v)); \ +}) + +#define wfd_arg_list_get_dict(_l, _i, _k, _v) ({ \ + wfd_arg_get_dict(wfd_arg_list_at((_l), (_i)), (_k), (_v)); \ }) enum wfd_arg_type