summaryrefslogtreecommitdiff
path: root/indra/llcommon
diff options
context:
space:
mode:
authornat-goodspeed <nat@lindenlab.com>2024-09-30 09:25:02 -0400
committerGitHub <noreply@github.com>2024-09-30 09:25:02 -0400
commita409503653bebacbc498409806f9e1a4b97ed6ac (patch)
tree245077bd73fa80a5bda40c120a2a9e5985bead9e /indra/llcommon
parentb15c1949f067c752dfddb5d9cfcb10d2dc290cd2 (diff)
parentc7e9c5d1336cabd550e0c839d3e0465565638574 (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.h18
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);