[Lldb-commits] [lldb] [lldb] Streamline ConstString -> std::string conversion (NFC) (PR #79649)
Jonas Devlieghere via lldb-commits
lldb-commits at lists.llvm.org
Fri Jan 26 14:36:20 PST 2024
https://github.com/JDevlieghere updated https://github.com/llvm/llvm-project/pull/79649
>From b0abae7ac1208321a4a7033bcc456dba645b47bf Mon Sep 17 00:00:00 2001
From: Jonas Devlieghere <jonas at devlieghere.com>
Date: Fri, 26 Jan 2024 14:35:52 -0800
Subject: [PATCH] [lldb] Streamline ConstString -> std::string conversion (NFC)
Make it easier to go from a ConstString to a std::string without having
to go through a C-String or a llvm::StringRef. I made the conversion
operator explicit as this is a relatively expensive operations (compared
to a StringRef or string_view).
---
lldb/include/lldb/Utility/ConstString.h | 13 +++++++++++--
lldb/unittests/Utility/ConstStringTest.cpp | 14 ++++++++++++++
2 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/lldb/include/lldb/Utility/ConstString.h b/lldb/include/lldb/Utility/ConstString.h
index cbea4cbf916a430..470a554ca04869d 100644
--- a/lldb/include/lldb/Utility/ConstString.h
+++ b/lldb/include/lldb/Utility/ConstString.h
@@ -167,8 +167,14 @@ class ConstString {
// Implicitly convert \class ConstString instances to \class StringRef.
operator llvm::StringRef() const { return GetStringRef(); }
- // Implicitly convert \class ConstString instances to \calss std::string_view.
- operator std::string_view() const { return std::string_view(m_string, GetLength()); }
+
+ // Implicitly convert \class ConstString instances to \class std::string_view.
+ operator std::string_view() const {
+ return std::string_view(m_string, GetLength());
+ }
+
+ // Explicitly convert \class ConstString instances to \class std::string.
+ explicit operator std::string() const { return GetString(); }
/// Get the string value as a C string.
///
@@ -192,6 +198,9 @@ class ConstString {
return llvm::StringRef(m_string, GetLength());
}
+ /// Get the string value as a std::string
+ std::string GetString() const { return std::string(m_string, GetLength()); }
+
/// Get the string value as a C string.
///
/// Get the value of the contained string as a NULL terminated C string
diff --git a/lldb/unittests/Utility/ConstStringTest.cpp b/lldb/unittests/Utility/ConstStringTest.cpp
index 9affa927570a5c7..716f2d8d6c80428 100644
--- a/lldb/unittests/Utility/ConstStringTest.cpp
+++ b/lldb/unittests/Utility/ConstStringTest.cpp
@@ -137,3 +137,17 @@ TEST(ConstStringTest, CompareStringRef) {
EXPECT_TRUE(null == static_cast<const char *>(nullptr));
EXPECT_TRUE(null != "bar");
}
+
+TEST(ConstStringTest, StringConversions) {
+ ConstString foo("foo");
+
+ // Member functions.
+ EXPECT_EQ(llvm::StringRef("foo"), foo.GetStringRef());
+ EXPECT_EQ(std::string("foo"), foo.GetString());
+ EXPECT_STREQ("foo", foo.AsCString());
+
+ // Conversion operators.
+ EXPECT_EQ(llvm::StringRef("foo"), llvm::StringRef(foo));
+ EXPECT_EQ(std::string("foo"), std::string_view(foo));
+ EXPECT_EQ(std::string("foo"), std::string(foo));
+}
More information about the lldb-commits
mailing list