diff options
author | nat-goodspeed <nat@lindenlab.com> | 2024-09-30 09:25:02 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-30 09:25:02 -0400 |
commit | a409503653bebacbc498409806f9e1a4b97ed6ac (patch) | |
tree | 245077bd73fa80a5bda40c120a2a9e5985bead9e /indra/llcommon | |
parent | b15c1949f067c752dfddb5d9cfcb10d2dc290cd2 (diff) | |
parent | c7e9c5d1336cabd550e0c839d3e0465565638574 (diff) |
Merge pull request #2734 from secondlife/nat/llconvert-nop
Try to eliminate the runtime cost of `ll_convert_to<T>(const T&)`.
Diffstat (limited to 'indra/llcommon')
-rw-r--r-- | indra/llcommon/llstring.h | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/indra/llcommon/llstring.h b/indra/llcommon/llstring.h index b552aede82..d65fb16f5b 100644 --- a/indra/llcommon/llstring.h +++ b/indra/llcommon/llstring.h @@ -550,7 +550,13 @@ private: public: ll_convert(const FROM& ref): mRef(ref) {} - template <typename TO> + inline operator const FROM&() const + { + return mRef; + } + + template <typename TO, + std::enable_if_t<! std::is_same_v<std::decay_t<TO>, std::decay_t<FROM>>, bool> =true> inline operator TO() const { return ll_convert_impl<TO, std::decay_t<const FROM>>()(mRef); @@ -559,7 +565,15 @@ public: // When the TO type must be explicit, use a function template to get // ll_convert_to<TO>(from_value) API. -template<typename TO, typename FROM> +template<typename SAME> +const SAME& ll_convert_to(const SAME& in) +{ + return in; +} + +template<typename TO, + typename FROM, + std::enable_if_t<! std::is_same_v<std::decay_t<TO>, std::decay_t<FROM>>, bool> =true> TO ll_convert_to(const FROM& in) { return ll_convert_impl<TO, std::decay_t<const FROM>>()(in); |