summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/stc/template.h30
1 files changed, 23 insertions, 7 deletions
diff --git a/include/stc/template.h b/include/stc/template.h
index b2dcebd8..d0b7f20d 100644
--- a/include/stc/template.h
+++ b/include/stc/template.h
@@ -98,18 +98,19 @@
#endif
/* Resolve i_drop and i_from here */
-#if defined i_drop && defined i_isset
+#if defined i_drop && !defined i_keydrop && defined _i_isset
#define i_keydrop i_drop
#elif defined i_drop && !defined i_key
#define i_valdrop i_drop
-#elif defined i_drop
+#elif defined i_drop && !defined _i_isset
#error "i_drop not supported for maps, define i_keydrop / i_valdrop instead."
#endif
-#if defined i_from && defined i_isset
+
+#if defined i_from && !defined i_keyfrom && defined _i_isset
#define i_keyfrom i_from
#elif defined i_from && !defined i_key
#define i_valfrom i_from
-#elif defined i_from
+#elif defined i_from && !defined _i_isset
#error "i_from not supported for maps, define i_keyfrom / i_valfrom instead."
#endif
@@ -154,8 +155,25 @@
#define _i_no_emplace
#endif
+/* Copy i_val* macros to i_key* if _i_isset */
+#if defined _i_isset && defined i_val
+ #define i_key i_val
+ #if defined i_valraw && !defined i_keyraw
+ #define i_keyraw i_valraw
+ #endif
+ #if defined i_valfrom && !defined i_keyfrom
+ #define i_keyfrom i_valfrom
+ #endif
+ #if defined i_valto && !defined i_keyto
+ #define i_keyto i_valto
+ #endif
+ #if defined i_valdrop && !defined i_keydrop
+ #define i_keydrop i_valdrop
+ #endif
+#endif
+
#ifdef i_key
- #ifdef _i_isset
+ #if defined _i_isset && !defined i_val
#define i_val i_key
#endif
#ifndef i_tag
@@ -176,8 +194,6 @@
#ifndef i_keydrop
#define i_keydrop c_default_drop
#endif
-#elif defined _i_isset
- #error "i_key define is missing."
#endif
#ifndef i_tag