https://github.com/JDevlieghere created https://github.com/llvm/llvm-project/pull/79649
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). >From fd1938e02a4e0394190d90792933e81fce7fc329 Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere <jo...@devlieghere.com> Date: Fri, 26 Jan 2024 13:08:23 -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 | 15 +++++++++++++-- lldb/unittests/Utility/ConstStringTest.cpp | 14 ++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/lldb/include/lldb/Utility/ConstString.h b/lldb/include/lldb/Utility/ConstString.h index cbea4cbf916a430..0ee3f0184b0d08c 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,11 @@ 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)); +} _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits