diff options
author | Marco Trevisan (TreviƱo) <mail@3v1n0.net> | 2020-08-09 02:30:50 +0200 |
---|---|---|
committer | Philip Chimento <philip.chimento@gmail.com> | 2020-08-09 10:50:31 -0700 |
commit | 7b24910103995d14cfc37fa6b041e3e2eecb5dc4 (patch) | |
tree | 58892ce5d51f6a11713195a0781cde8c40abf6b4 /gi/arg-inl.h | |
parent | a2633f732afd5693eaa1b92f8bf38c509e005152 (diff) | |
download | gjs-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.h | 30 |
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> |