llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-lldb

Author: Alex Langford (bulbazord)

<details>
<summary>Changes</summary>

This is currently a `std::unordered_set&lt;std::string&gt;`. The downside of 
this is that you need to have a `std::string` to perform a lookup of any kind. 
This may require an allocation whenever we want to query the name list. Even 
using `std::string_view` is not sufficient to perform a lookup.

I propose that this instead be a `llvm::StringSet` which uses StringRefs as its 
primary currency for insertions, lookups, and more.

---
Full diff: https://github.com/llvm/llvm-project/pull/205429.diff


2 Files Affected:

- (modified) lldb/include/lldb/Breakpoint/Breakpoint.h (+8-6) 
- (modified) lldb/source/Breakpoint/Breakpoint.cpp (+3-3) 


``````````diff
diff --git a/lldb/include/lldb/Breakpoint/Breakpoint.h 
b/lldb/include/lldb/Breakpoint/Breakpoint.h
index 67a741c6c9251..db04fc9114e56 100644
--- a/lldb/include/lldb/Breakpoint/Breakpoint.h
+++ b/lldb/include/lldb/Breakpoint/Breakpoint.h
@@ -27,6 +27,8 @@
 #include "lldb/Utility/StringList.h"
 #include "lldb/Utility/StructuredData.h"
 
+#include "llvm/ADT/StringSet.h"
+
 namespace lldb_private {
 
 /// \class Breakpoint Breakpoint.h "lldb/Breakpoint/Breakpoint.h" Class that
@@ -583,8 +585,8 @@ class Breakpoint : public 
std::enable_shared_from_this<Breakpoint>,
 
   void GetNames(std::vector<std::string> &names) {
     names.clear();
-    for (auto name : m_name_list) {
-      names.push_back(name);
+    for (auto name : m_name_list.keys()) {
+      names.push_back(name.str());
     }
   }
 
@@ -687,10 +689,10 @@ class Breakpoint : public 
std::enable_shared_from_this<Breakpoint>,
   bool
       m_hardware; // If this breakpoint is required to use a hardware 
breakpoint
   Target &m_target; // The target that holds this breakpoint.
-  std::unordered_set<std::string> m_name_list; // If not empty, this is the 
name
-                                               // of this breakpoint (many
-                                               // breakpoints can share the 
same
-                                               // name.)
+  llvm::StringSet<> m_name_list; // If not empty, this is the name
+                                 // of this breakpoint (many
+                                 // breakpoints can share the same
+                                 // name.)
   lldb::SearchFilterSP
       m_filter_sp; // The filter that constrains the breakpoint's domain.
   lldb::BreakpointResolverSP
diff --git a/lldb/source/Breakpoint/Breakpoint.cpp 
b/lldb/source/Breakpoint/Breakpoint.cpp
index 07412cd092f0d..9bc014b86e2d6 100644
--- a/lldb/source/Breakpoint/Breakpoint.cpp
+++ b/lldb/source/Breakpoint/Breakpoint.cpp
@@ -88,7 +88,7 @@ StructuredData::ObjectSP 
Breakpoint::SerializeToStructuredData() {
 
   if (!m_name_list.empty()) {
     StructuredData::ArraySP names_array_sp(new StructuredData::Array());
-    for (auto name : m_name_list) {
+    for (auto name : m_name_list.keys()) {
       names_array_sp->AddItem(std::make_shared<StructuredData::String>(name));
     }
     breakpoint_contents_sp->AddItem(Breakpoint::GetKey(OptionNames::Names),
@@ -1003,9 +1003,9 @@ void Breakpoint::GetDescriptionForType(Stream *s, 
lldb::DescriptionLevel level,
         s->Printf("Names:");
         s->EOL();
         s->IndentMore();
-        for (const std::string &name : m_name_list) {
+        for (llvm::StringRef name : m_name_list.keys()) {
           s->Indent();
-          s->Printf("%s\n", name.c_str());
+          s->Format("{0}\n", name);
         }
         s->IndentLess();
       }

``````````

</details>


https://github.com/llvm/llvm-project/pull/205429
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to