diff options
| author | tylov <[email protected]> | 2023-07-12 12:38:40 +0200 |
|---|---|---|
| committer | tylov <[email protected]> | 2023-07-12 13:56:06 +0200 |
| commit | 50cbc73d4fef3ce91d094b80a018769eac439965 (patch) | |
| tree | 79492e482cf232ed4def920c015c5f86f030f295 /include | |
| parent | 0bcb0fcd981cb15329dfd4fb675097564164da18 (diff) | |
| download | STC-modified-50cbc73d4fef3ce91d094b80a018769eac439965.tar.gz STC-modified-50cbc73d4fef3ce91d094b80a018769eac439965.zip | |
template.h: i_valclone and i_valfrom are considered the same when only one is defined and i_valraw is not defined (directly or via valclass/valboxed/val_str). Also applies to key. Some adjustments for benchmarking.
Diffstat (limited to 'include')
| -rw-r--r-- | include/stc/priv/template.h | 41 |
1 files changed, 26 insertions, 15 deletions
diff --git a/include/stc/priv/template.h b/include/stc/priv/template.h index 5551eeae..30ed5732 100644 --- a/include/stc/priv/template.h +++ b/include/stc/priv/template.h @@ -105,6 +105,9 @@ #if c_option(c_native_cmp) #define i_native_cmp #endif +#if c_option(c_no_clone) || defined _i_carc + #define i_no_clone +#endif #if defined i_key_str #define i_keyclass cstr @@ -160,14 +163,20 @@ #endif #endif +#if !defined i_keyraw && !defined i_no_clone + #if !defined i_keyfrom && defined i_keyclone + #define i_keyfrom i_keyclone + #elif !defined i_keyclone && defined i_keyfrom + #define i_keyclone i_keyfrom + #endif +#endif + #if !defined i_key #error "No i_key or i_val defined" #elif defined i_keyraw ^ defined i_keyto - #error "Both i_keyraw/valraw and i_keyto/valto must be defined, if any" -#elif defined i_keyfrom && !defined i_keyraw && !defined i_keyclone - #define i_keyclone i_keyfrom -#elif defined i_keyfrom && !defined i_keyraw - #error "i_keyfrom/valfrom defined without i_keyraw/valraw" + #error "Both i_keyraw/i_valraw and i_keyto/i_valto must be defined, if any" +#elif !defined i_no_clone && (defined i_keyclone ^ defined i_keydrop) + #error "Both i_keyclone/i_valclone and i_keydrop/i_valdrop must be defined, if any" #elif defined i_from || defined i_drop #error "i_from / i_drop not supported. Define i_keyfrom/i_valfrom and/or i_keydrop/i_valdrop instead" #endif @@ -175,11 +184,6 @@ #ifndef i_tag #define i_tag i_key #endif -#if c_option(c_no_clone) || defined _i_carc - #define i_no_clone -#elif !(defined i_keyclone || defined i_no_clone) && (defined i_keydrop || defined i_keyraw) - #error i_keyclone/valclone should be defined when i_keydrop/valdrop or i_keyraw/valraw is defined -#endif #ifndef i_keyraw #define i_keyraw i_key #endif @@ -259,15 +263,22 @@ #endif #endif +#if !defined i_valraw && !defined i_no_clone + #if !defined i_valfrom && defined i_valclone + #define i_valfrom i_valclone + #elif !defined i_valclone && defined i_valfrom + #define i_valclone i_valfrom + #endif +#endif + #ifndef i_val #error "i_val* must be defined for maps" +#elif defined i_valraw ^ defined i_valto + #error "Both i_valraw and i_valto must be defined, if any" +#elif !defined i_no_clone && (defined i_valclone ^ defined i_valdrop) + #error "Both i_valclone and i_valdrop must be defined, if any" #endif -#if !defined i_valclone && defined i_valfrom && !defined i_valraw - #define i_valclone i_valfrom -#elif !(defined i_valclone || defined i_no_clone) && (defined i_valdrop || defined i_valraw) - #error i_valclone should be defined when i_valdrop or i_valraw is defined -#endif #ifndef i_valraw #define i_valraw i_val #endif |
