diff --git a/m-dict.h b/m-dict.h index 5163244f..79bebef3 100644 --- a/m-dict.h +++ b/m-dict.h @@ -30,26 +30,36 @@ #include "m-tuple.h" /* Define a dictionary with the key key_type to the value value_type. - USAGE: DICT_DEF2(name, key_type[, key_oplist], value_type[, value_oplist]) + USAGE: + DICT_DEF2(name, key_type, key_oplist, value_type, value_oplist) + OR + DICT_DEF2(name, key_type, value_type) */ #define DICT_DEF2(name, key_type, ...) \ - DICTI_DEF2(M_IF_NARGS_EQ1(__VA_ARGS__) \ - ((name, key_type, M_GLOBAL_OPLIST_OR_DEF(key_type), __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__) ), \ - (name, key_type, __VA_ARGS__))) + DICTI_DEF2_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \ + ((name, key_type, M_GLOBAL_OPLIST_OR_DEF(key_type), __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__) ), \ + (name, key_type, __VA_ARGS__))) /* Define a dictionary with the key key_type to the value value_type. which stores the computed hash value (avoiding the need of recomputing it). - USAGE: DICT_STOREHASH_DEF2(name, key_type[, key_oplist], value_type[, value_oplist]) + USAGE: + DICT_STOREHASH_DEF2(name, key_type[, key_oplist], value_type[, value_oplist]) + OR + DICT_STOREHASH_DEF2(name, key_type[, key_oplist], value_type[, value_oplist]) */ #define DICT_STOREHASH_DEF2(name, key_type, ...) \ - DICTI_SHASH_DEF2(M_IF_NARGS_EQ1(__VA_ARGS__) \ - ((name, key_type, M_GLOBAL_OPLIST_OR_DEF(key_type), __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__) ), \ - (name, key_type, __VA_ARGS__))) + DICTI_SHASH_DEF2_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \ + ((name, key_type, M_GLOBAL_OPLIST_OR_DEF(key_type), __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__) ), \ + (name, key_type, __VA_ARGS__))) /* Define the oplist of a dictionnary. - USAGE: DICT_OPLIST(name[, oplist of the key type, oplist of the value type]) */ + USAGE: + DICT_OPLIST(name, oplist of the key type, oplist of the value type) + OR + DICT_OPLIST(name) +*/ #define DICT_OPLIST(...) \ M_IF_NARGS_EQ1(__VA_ARGS__) \ (DICTI_OPLIST(__VA_ARGS__, M_DEFAULT_OPLIST, M_DEFAULT_OPLIST ), \ @@ -57,12 +67,12 @@ /* Define a set with the key key_type - USAGE: DICT_SET_DEF(name, key_type, key_oplist) + USAGE: DICT_SET_DEF(name, key_type[, key_oplist]) */ #define DICT_SET_DEF(name, ...) \ - DICTI_SET_DEF(M_IF_NARGS_EQ1(__VA_ARGS__) \ - ((name, __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__), __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__) ), \ - (name, __VA_ARGS__))) + DICTI_SET_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \ + ((name, __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__), __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__) ), \ + (name, __VA_ARGS__))) /* Define the oplist of a dictionnary. @@ -75,7 +85,12 @@ /* Define a dictionary with the key key_type to the value value_type with an Open Addressing implementation. Same oplist. - KEY_OPLIST needs OOR_EQUAL & OOR_SET as methods of the key */ + KEY_OPLIST needs OOR_EQUAL & OOR_SET as methods of the key. + USAGE: + DICT_OA_DEF2(name, key_type, key_oplist, value_type, value_oplist) + OR + DICT_OA_DEF2(name, key_type, value_type) +*/ #define DICT_OA_DEF2(name, key_type, ...) \ DICTI_OA_DEF_P1(M_IF_NARGS_EQ1(__VA_ARGS__) \ ((name, key_type, M_GLOBAL_OPLIST_OR_DEF(key_type), __VA_ARGS__, M_GLOBAL_OPLIST_OR_DEF(__VA_ARGS__) ), \ @@ -88,8 +103,8 @@ /* Define a dictionary with the key key_type to the value value_type. */ -#define DICTI_DEF2(arg) DICTI_DEF2B arg -#define DICTI_DEF2B(name, key_type, key_oplist, value_type, value_oplist) \ +#define DICTI_DEF2_P1(arg) DICTI_DEF2_P2 arg +#define DICTI_DEF2_P2(name, key_type, key_oplist, value_type, value_oplist) \ \ TUPLE_DEF2(M_C(name, _pair), (key, key_type, key_oplist), (value, value_type, value_oplist)) \ \ @@ -112,8 +127,8 @@ /* Define a dictionary with the key key_type to the value value_type. which stores the computed hash value (avoiding the need of recomputing it). */ -#define DICTI_SHASH_DEF2(arg) DICTI_SHASH_DEF2B arg -#define DICTI_SHASH_DEF2B(name, key_type, key_oplist, value_type, value_oplist) \ +#define DICTI_SHASH_DEF2_P1(arg) DICTI_SHASH_DEF2_P2 arg +#define DICTI_SHASH_DEF2_P2(name, key_type, key_oplist, value_type, value_oplist) \ \ TUPLE_DEF2(M_C(name, _pair), (hash, size_t, M_DEFAULT_OPLIST), (key, key_type, key_oplist), (value, value_type, value_oplist)) \ \ @@ -135,8 +150,8 @@ /* Define a set with the key key_type */ -#define DICTI_SET_DEF(arg) DICTI_SET_DEFB arg -#define DICTI_SET_DEFB(name, key_type, key_oplist) \ +#define DICTI_SET_DEF_P1(arg) DICTI_SET_DEF_P2 arg +#define DICTI_SET_DEF_P2(name, key_type, key_oplist) \ \ TUPLE_DEF2(M_C(name, _pair), (key, key_type, key_oplist)) \ \