summaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2022-05-19 22:37:11 +0200
committerTyge Løvset <[email protected]>2022-05-19 22:37:11 +0200
commitfa5c3a40738d5fca515ab1d581566355b8e05430 (patch)
treeec3b7fb8beb5c64eb22f6d8ea9582fb982a5452a /include
parent9e1421e5ed0e93cebecfb2a8fe423d01ba1d08e8 (diff)
downloadSTC-modified-fa5c3a40738d5fca515ab1d581566355b8e05430.tar.gz
STC-modified-fa5c3a40738d5fca515ab1d581566355b8e05430.zip
Some extra test on template params. Update shape.c example.
Diffstat (limited to 'include')
-rw-r--r--include/stc/ccommon.h2
-rw-r--r--include/stc/template.h20
2 files changed, 13 insertions, 9 deletions
diff --git a/include/stc/ccommon.h b/include/stc/ccommon.h
index 549dd969..850bc511 100644
--- a/include/stc/ccommon.h
+++ b/include/stc/ccommon.h
@@ -95,7 +95,7 @@
#define c_memcmp_eq(x, y) (memcmp(x, y, sizeof *(x)) == 0)
#define c_default_hash(x) c_fasthash(x, sizeof *(x))
-#define c_default_from(v) (v)
+#define c_default_clone(v) (v)
#define c_default_toraw(vp) (*(vp))
#define c_default_drop(vp) ((void) (vp))
#define c_derived_keyclone(v) i_keyfrom((i_keyto((&(v)))))
diff --git a/include/stc/template.h b/include/stc/template.h
index 6af10ace..4d2f0f58 100644
--- a/include/stc/template.h
+++ b/include/stc/template.h
@@ -138,11 +138,13 @@
#endif
#if !defined i_key
- #error "no i_key or i_val provided"
+ #error "no i_key or i_val defined"
#elif defined i_keyraw ^ defined i_keyto
- #error "if i_keyraw is defined, i_keyto must be defined, and vice versa"
+ #error "both i_keyraw and i_keyto must be defined, if any"
+#elif defined i_keyfrom && !defined i_keyraw
+ #error "i_keyfrom defined without i_keyraw"
#elif defined i_from || defined i_drop
- #error "i_from / i_drop are not supported. Define i_keyfrom/i_valfrom and-or i_keydrop/i_valdrop instead."
+ #error "i_from / i_drop not supported. Define i_keyfrom/i_valfrom and/or i_keydrop/i_valdrop instead"
#endif
#ifndef i_tag
@@ -155,7 +157,7 @@
#define i_keyraw i_key
#endif
#ifndef i_keyfrom
- #define i_keyfrom c_default_from
+ #define i_keyfrom c_default_clone
#else
#define _i_has_from
#endif
@@ -163,7 +165,7 @@
#define i_keyto c_default_toraw
#endif
#ifndef i_keyclone
- #define i_keyclone(key) (key)
+ #define i_keyclone c_default_clone
#endif
#ifndef i_keydrop
#define i_keydrop c_default_drop
@@ -214,7 +216,9 @@
#endif
#if defined i_valraw ^ defined i_valto
- #error "if i_valraw is defined, i_valto must be defined, and vice versa"
+ #error "both i_valto and i_valraw must be defined, if any"
+#elif defined i_valfrom && !defined i_valraw
+ #error "i_valfrom defined without i_valraw"
#endif
#if !defined i_valclone && (defined i_valdrop || defined i_valraw)
@@ -224,7 +228,7 @@
#define i_valraw i_val
#endif
#ifndef i_valfrom
- #define i_valfrom c_default_from
+ #define i_valfrom c_default_clone
#else
#define _i_has_from
#endif
@@ -232,7 +236,7 @@
#define i_valto c_default_toraw
#endif
#ifndef i_valclone
- #define i_valclone(val) (val)
+ #define i_valclone c_default_clone
#endif
#ifndef i_valdrop
#define i_valdrop c_default_drop