summaryrefslogtreecommitdiff
path: root/pkmacros.h
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-01-23 13:55:37 -0500
committerJonathan Bradley <jcb@pikum.xyz>2025-01-23 13:55:37 -0500
commite780ba321897169ace90baa4b1d85190bc526065 (patch)
treef7a428767f6f0fb5daa76198ed7d4b0e6f2357b0 /pkmacros.h
parent4db94de7c5cd21e176a0b52374e28f7ee6451be3 (diff)
pkmacros: add TypeSafeInt operators: *,/
Diffstat (limited to 'pkmacros.h')
-rw-r--r--pkmacros.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/pkmacros.h b/pkmacros.h
index eb8d6e7..583f6bc 100644
--- a/pkmacros.h
+++ b/pkmacros.h
@@ -62,6 +62,8 @@
constexpr TypeName TypeName_MAX = TypeName{TypeName_T_MAX}; \
TypeName operator+(const TypeName& a, const TypeName& b); \
TypeName operator-(const TypeName& a, const TypeName& b); \
+ TypeName operator*(const TypeName& a, const TypeName& b); \
+ TypeName operator/(const TypeName& a, const TypeName& b); \
TypeName operator&(const TypeName& a, const TypeName& b); \
TypeName operator|(const TypeName& a, const TypeName& b); \
TypeName operator^(const TypeName& a, const TypeName& b); \
@@ -73,6 +75,8 @@
TypeName operator>>(const TypeName& a, const TypeName& b); \
TypeName operator+=(TypeName& a, const TypeName& b); \
TypeName operator-=(TypeName& a, const TypeName& b); \
+ TypeName operator*=(TypeName& a, const TypeName& b); \
+ TypeName operator/=(TypeName& a, const TypeName& b); \
TypeName operator&=(TypeName& a, const TypeName& b); \
TypeName operator|=(TypeName& a, const TypeName& b); \
TypeName operator^=(TypeName& a, const TypeName& b); \
@@ -84,6 +88,12 @@
inline TypeName operator-(const TypeName& a, const TypeName& b) { \
return TypeName(static_cast<TypeName_T>(a) - static_cast<TypeName_T>(b)); \
} \
+ inline TypeName operator*(const TypeName& a, const TypeName& b) { \
+ return TypeName(static_cast<TypeName_T>(a) * static_cast<TypeName_T>(b)); \
+ } \
+ inline TypeName operator/(const TypeName& a, const TypeName& b) { \
+ return TypeName(static_cast<TypeName_T>(a) / static_cast<TypeName_T>(b)); \
+ } \
inline TypeName operator&(const TypeName& a, const TypeName& b) { \
return TypeName(static_cast<TypeName_T>(a) & static_cast<TypeName_T>(b)); \
} \
@@ -123,6 +133,14 @@
a = TypeName{a - b}; \
return a; \
}; \
+ inline TypeName operator*=(TypeName& a, const TypeName& b) { \
+ a = TypeName{a * b}; \
+ return a; \
+ }; \
+ inline TypeName operator/=(TypeName& a, const TypeName& b) { \
+ a = TypeName{a / b}; \
+ return a; \
+ }; \
inline TypeName operator&=(TypeName& a, const TypeName& b) { \
a = TypeName{a & b}; \
return a; \
@@ -155,6 +173,12 @@
constexpr TypeName operator-(const TypeName& a, const TypeName& b) { \
return TypeName(static_cast<TypeName_T>(a) - static_cast<TypeName_T>(b)); \
} \
+ constexpr TypeName operator*(const TypeName& a, const TypeName& b) { \
+ return TypeName(static_cast<TypeName_T>(a) * static_cast<TypeName_T>(b)); \
+ } \
+ constexpr TypeName operator/(const TypeName& a, const TypeName& b) { \
+ return TypeName(static_cast<TypeName_T>(a) / static_cast<TypeName_T>(b)); \
+ } \
constexpr TypeName operator&(const TypeName& a, const TypeName& b) { \
return TypeName(static_cast<TypeName_T>(a) & static_cast<TypeName_T>(b)); \
} \
@@ -194,6 +218,14 @@
a = TypeName{a - b}; \
return a; \
}; \
+ constexpr TypeName operator*=(TypeName& a, const TypeName& b) { \
+ a = TypeName{a * b}; \
+ return a; \
+ }; \
+ constexpr TypeName operator/=(TypeName& a, const TypeName& b) { \
+ a = TypeName{a / b}; \
+ return a; \
+ }; \
constexpr TypeName operator&=(TypeName& a, const TypeName& b) { \
a = TypeName{a & b}; \
return a; \