summaryrefslogtreecommitdiff
path: root/hv.h
diff options
context:
space:
mode:
authorYves Orton <demerphq@gmail.com>2016-10-19 10:36:14 +0200
committerYves Orton <demerphq@gmail.com>2016-10-19 13:27:59 +0200
commit4ac46235a35c3293a6effa2b38b5fe6e37ef7985 (patch)
tree911a7f00e1b8f3a08000318d1f8d2460e2608764 /hv.h
parent777fa2cb699b74cad6714d203572533dbd583976 (diff)
downloadperl-4ac46235a35c3293a6effa2b38b5fe6e37ef7985.tar.gz
handy.h, hv.h: fixup hash s suffix macro definitions, move to hv.h
For some reason s suffix macro definitions intended for handling constant string arguments were put into handy.h and not into hv.h. I think this is wrong, especially as the macro defintions have "drifted" and are not properly defined in terms the right base macros. Also we want to have such wrappers for the main hash functions, so move them all to hv.h, recode them properly in terms of the right base macros, and add support for the missing functions.
Diffstat (limited to 'hv.h')
-rw-r--r--hv.h20
1 files changed, 20 insertions, 0 deletions
diff --git a/hv.h b/hv.h
index 0e773f2020..ee536f08c8 100644
--- a/hv.h
+++ b/hv.h
@@ -475,6 +475,8 @@ C<SV*>.
(HV_FETCH_ISSTORE|HV_FETCH_JUST_SV), \
(val), (hash)))
+
+
#define hv_exists(hv, key, klen) \
(hv_common_key_len((hv), (key), (klen), HV_FETCH_ISEXISTS, NULL, 0) \
? TRUE : FALSE)
@@ -488,6 +490,24 @@ C<SV*>.
(MUTABLE_SV(hv_common_key_len((hv), (key), (klen), \
(flags) | HV_DELETE, NULL, 0)))
+/* Provide 's' suffix subs for constant strings (and avoid needing to count
+ * chars). See STR_WITH_LEN in handy.h - because these are macros we cant use
+ * STR_WITH_LEN to do the work, we have to unroll it. */
+#define hv_existss(hv, key) \
+ hv_exists((hv), ("" key ""), (sizeof(key)-1))
+
+#define hv_fetchs(hv, key, lval) \
+ hv_fetch((hv), ("" key ""), (sizeof(key)-1), (lval))
+
+#define hv_deletes(hv, key, flags) \
+ hv_delete((hv), ("" key ""), (sizeof(key)-1), (flags))
+
+#define hv_name_sets(hv, name, flags) \
+ hv_name_set((hv),("" name ""),(sizeof(name)-1), flags)
+
+#define hv_stores(hv, key, val) \
+ hv_store((hv), ("" key ""), (sizeof(key)-1), (val), 0)
+
#ifdef PERL_CORE
# define hv_storehek(hv, hek, val) \
hv_common((hv), NULL, HEK_KEY(hek), HEK_LEN(hek), HEK_UTF8(hek), \