[Lldb-commits] [lldb] 33860b2 - [lldb] Streamline ConstString -> std::string conversion (NFC) (#79649)

via lldb-commits lldb-commits at lists.llvm.org
Fri Jan 26 15:04:15 PST 2024


Author: Jonas Devlieghere
Date: 2024-01-26T15:04:11-08:00
New Revision: 33860b2f61a8a74141ae76ecd54742f9cfeb0d03

URL: https://github.com/llvm/llvm-project/commit/33860b2f61a8a74141ae76ecd54742f9cfeb0d03
DIFF: https://github.com/llvm/llvm-project/commit/33860b2f61a8a74141ae76ecd54742f9cfeb0d03.diff

LOG: [lldb] Streamline ConstString -> std::string conversion (NFC) (#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).

Added: 
    

Modified: 
    lldb/include/lldb/Utility/ConstString.h
    lldb/unittests/Utility/ConstStringTest.cpp

Removed: 
    


################################################################################
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