summaryrefslogtreecommitdiff
path: root/gi/arg-inl.h
diff options
context:
space:
mode:
authorMarco Trevisan (TreviƱo) <mail@3v1n0.net>2020-08-09 02:30:50 +0200
committerPhilip Chimento <philip.chimento@gmail.com>2020-08-09 10:50:31 -0700
commit7b24910103995d14cfc37fa6b041e3e2eecb5dc4 (patch)
tree58892ce5d51f6a11713195a0781cde8c40abf6b4 /gi/arg-inl.h
parenta2633f732afd5693eaa1b92f8bf38c509e005152 (diff)
downloadgjs-7b24910103995d14cfc37fa6b041e3e2eecb5dc4.tar.gz
arg: Use if constexpr to simplify boolean specializations on set
When setting and getting booleans we have some template specializations that we can now simplify using constexpr checks
Diffstat (limited to 'gi/arg-inl.h')
-rw-r--r--gi/arg-inl.h30
1 files changed, 8 insertions, 22 deletions
diff --git a/gi/arg-inl.h b/gi/arg-inl.h
index 588bb814..952260c5 100644
--- a/gi/arg-inl.h
+++ b/gi/arg-inl.h
@@ -120,6 +120,10 @@ inline void gjs_arg_set(GIArgument* arg, T v) {
std::add_pointer_t<std::remove_const_t<std::remove_pointer_t<T>>>;
gjs_arg_member<NonconstPtrT, TAG>(arg) = const_cast<NonconstPtrT>(v);
} else {
+ if constexpr (std::is_same_v<T, bool> || (std::is_same_v<T, gboolean> &&
+ TAG == GI_TYPE_TAG_BOOLEAN))
+ v = !!v;
+
gjs_arg_member<T, TAG>(arg) = v;
}
}
@@ -137,31 +141,13 @@ inline std::enable_if_t<std::is_integral_v<T>> gjs_arg_set(GIArgument* arg,
gjs_arg_set<T, TAG>(arg, gjs_pointer_to_int<T>(v));
}
-template <>
-inline void gjs_arg_set<bool>(GIArgument* arg, bool v) {
- gjs_arg_member<bool>(arg) = !!v;
-}
-
-template <>
-inline void gjs_arg_set<gboolean, GI_TYPE_TAG_BOOLEAN>(GIArgument* arg,
- gboolean v) {
- gjs_arg_member<bool>(arg) = !!v;
-}
-
template <typename T, GITypeTag TAG = GI_TYPE_TAG_VOID>
[[nodiscard]] inline T gjs_arg_get(GIArgument* arg) {
- return gjs_arg_member<T, TAG>(arg);
-}
+ if constexpr (std::is_same_v<T, bool> ||
+ (std::is_same_v<T, gboolean> && TAG == GI_TYPE_TAG_BOOLEAN))
+ return !!gjs_arg_member<T, TAG>(arg);
-template <>
-[[nodiscard]] inline bool gjs_arg_get<bool>(GIArgument* arg) {
- return !!gjs_arg_member<bool>(arg);
-}
-
-template <>
-[[nodiscard]] inline gboolean gjs_arg_get<gboolean, GI_TYPE_TAG_BOOLEAN>(
- GIArgument* arg) {
- return !!gjs_arg_member<bool>(arg);
+ return gjs_arg_member<T, TAG>(arg);
}
template <typename T, GITypeTag TAG = GI_TYPE_TAG_VOID>