summaryrefslogtreecommitdiff
path: root/include/libHX/defs.h
diff options
context:
space:
mode:
authorJörg Frings-Fürst <debian@jff-webhosting.net>2025-03-27 13:19:31 +0100
committerJörg Frings-Fürst <debian@jff-webhosting.net>2025-03-27 13:19:31 +0100
commita81a93beca9a077b4254488ba5617b44fca8d0c1 (patch)
tree4eb17ff1b432f2768ab8c88c267c4984b776380e /include/libHX/defs.h
parent1c4b96855c415c48c0b3281b801c2e89fb935061 (diff)
parentfaa9f121de6d65800468d87d8eca0e3ff06b4ae0 (diff)
Merge branch 'release/debian/4.26-1'HEADdebian/4.26-1master
Diffstat (limited to 'include/libHX/defs.h')
-rw-r--r--include/libHX/defs.h12
1 files changed, 11 insertions, 1 deletions
diff --git a/include/libHX/defs.h b/include/libHX/defs.h
index ba84b37..2ef5769 100644
--- a/include/libHX/defs.h
+++ b/include/libHX/defs.h
@@ -12,7 +12,16 @@
# ifndef containerof
# include <cstddef>
# include <type_traits>
-# define containerof(var, T, member) reinterpret_cast<std::conditional<std::is_const<std::remove_pointer<decltype(var)>::type>::value, std::add_const<T>::type, T>::type *>(reinterpret_cast<std::conditional<std::is_const<std::remove_pointer<decltype(var)>::type>::value, const char, char>::type *>(var) - offsetof(T, member))
+namespace {
+template<typename Dst, typename Src> static inline auto containerof_cxx(Src *var, size_t ofs)
+{
+ using K = typename std::is_const<typename std::remove_pointer<Src>::type>;
+ using Ch = typename std::conditional<K::value, const char, char>::type;
+ using D2 = typename std::conditional<K::value, const Dst, Dst>::type;
+ return reinterpret_cast<D2 *>(reinterpret_cast<Ch *>(var) + ofs);
+}
+}
+# define containerof(var, D1, member) containerof_cxx<D1>(var, -offsetof(D1, member))
# endif
#else
# define HXsizeof_member(type, member) sizeof(((type *)NULL)->member)
@@ -86,6 +95,7 @@
#define HXSIZEOF_Z32 sizeof("-4294967296")
/* 2^64 and -2^63 have same length */
#define HXSIZEOF_Z64 sizeof("18446744073709551616")
+#define HXSIZEOF_UNITSEC64 sizeof("584542046089y11months2weeks2d23h59min59s")
#define __HX_STRINGIFY_EXPAND(s) #s
#define HX_STRINGIFY(s) __HX_STRINGIFY_EXPAND(s)