mgorny created this revision.
mgorny added reviewers: labath, krytarowski, emaste, lattner.
Herald added a subscriber: dexonsmith.
mgorny requested review of this revision.
Herald added a project: LLVM.
Optimize the iterator comparison logic to compare Current.data()
pointers. Use std::tie for assignments from std::pair. Remove the char
Separator overload and replace the custom class with a function
returning iterator_range.
https://reviews.llvm.org/D110535
Files:
lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp
lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
llvm/include/llvm/ADT/StringExtras.h
llvm/unittests/ADT/StringExtrasTest.cpp
Index: llvm/unittests/ADT/StringExtrasTest.cpp
===================================================================
--- llvm/unittests/ADT/StringExtrasTest.cpp
+++ llvm/unittests/ADT/StringExtrasTest.cpp
@@ -275,7 +275,7 @@
EXPECT_EQ(toString(APSInt(APInt(8, 255), isUnsigned), 16), "-1");
}
-TEST(StringExtrasTest, splitStringRef) {
+TEST(StringExtrasTest, SplitStringRef) {
auto Spl = Split("foo<=>bar<=><=>baz", "<=>");
auto It = Spl.begin();
auto End = Spl.end();
@@ -290,19 +290,3 @@
EXPECT_EQ(*It, StringRef("baz"));
ASSERT_EQ(++It, End);
}
-
-TEST(StringExtrasTest, splItChar) {
- auto Spl = Split("foo,bar,,baz", ',');
- auto It = Spl.begin();
- auto End = Spl.end();
-
- ASSERT_NE(It, End);
- EXPECT_EQ(*It, StringRef("foo"));
- ASSERT_NE(++It, End);
- EXPECT_EQ(*It, StringRef("bar"));
- ASSERT_NE(++It, End);
- EXPECT_EQ(*It, StringRef(""));
- ASSERT_NE(++It, End);
- EXPECT_EQ(*It, StringRef("baz"));
- ASSERT_EQ(++It, End);
-}
Index: llvm/include/llvm/ADT/StringExtras.h
===================================================================
--- llvm/include/llvm/ADT/StringExtras.h
+++ llvm/include/llvm/ADT/StringExtras.h
@@ -516,7 +516,8 @@
}
bool operator==(const SplittingIterator &R) const {
- return Current == R.Current && Next == R.Next && Separator == R.Separator;
+ assert(Separator == R.Separator);
+ return Current.data() == R.Current.data();
}
const StringRef &operator*() const { return Current; }
@@ -524,9 +525,7 @@
StringRef &operator*() { return Current; }
SplittingIterator &operator++() {
- std::pair<StringRef, StringRef> Res = Next.split(Separator);
- Current = Res.first;
- Next = Res.second;
+ std::tie(Current, Next) = Next.split(Separator);
return *this;
}
};
@@ -536,26 +535,16 @@
/// over separated strings like so:
///
/// \code
-/// for (StringRef x : llvm::Split("foo,bar,baz", ','))
+/// for (StringRef x : llvm::Split("foo,bar,baz", ","))
/// ...;
/// \end
///
/// Note that the passed string must remain valid throuhgout lifetime
/// of the iterators.
-class Split {
- StringRef Str;
- std::string SeparatorStr;
-
-public:
- Split(StringRef NewStr, StringRef Separator)
- : Str(NewStr), SeparatorStr(Separator) {}
- Split(StringRef NewStr, char Separator)
- : Str(NewStr), SeparatorStr(1, Separator) {}
-
- SplittingIterator begin() { return SplittingIterator(Str, SeparatorStr); }
-
- SplittingIterator end() { return SplittingIterator("", SeparatorStr); }
-};
+inline iterator_range<SplittingIterator> Split(StringRef Str, StringRef Separator) {
+ return {SplittingIterator(Str, Separator),
+ SplittingIterator(StringRef(), Separator)};
+}
} // end namespace llvm
Index: lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
===================================================================
--- lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
+++ lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
@@ -383,7 +383,7 @@
const llvm::StringRef &comma_separated_register_numbers,
std::vector<uint32_t> ®nums, int base) {
regnums.clear();
- for (llvm::StringRef x : llvm::Split(comma_separated_register_numbers, ',')) {
+ for (llvm::StringRef x : llvm::Split(comma_separated_register_numbers, ",")) {
uint32_t reg;
if (llvm::to_integer(x, reg, base))
regnums.push_back(reg);
@@ -1455,7 +1455,7 @@
size_t ProcessGDBRemote::UpdateThreadPCsFromStopReplyThreadsValue(
llvm::StringRef value) {
m_thread_pcs.clear();
- for (llvm::StringRef x : llvm::Split(value, ',')) {
+ for (llvm::StringRef x : llvm::Split(value, ",")) {
lldb::addr_t pc;
if (llvm::to_integer(x, pc, 16))
m_thread_pcs.push_back(pc);
@@ -5107,7 +5107,7 @@
std::string path;
// process the response
- for (auto x : llvm::Split(response.GetStringRef(), ';')) {
+ for (auto x : llvm::Split(response.GetStringRef(), ";")) {
if (x.consume_front("core-path:"))
StringExtractor(x).GetHexByteString(path);
}
Index: lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp
===================================================================
--- lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp
+++ lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp
@@ -3656,7 +3656,7 @@
StringRef packet_str{packet.GetStringRef()};
assert(packet_str.startswith("qSaveCore"));
if (packet_str.consume_front("qSaveCore;")) {
- for (auto x : llvm::Split(packet_str, ';')) {
+ for (auto x : llvm::Split(packet_str, ";")) {
if (x.consume_front("path-hint:"))
StringExtractor(x).GetHexByteString(path_hint);
else
Index: lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
===================================================================
--- lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
+++ lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
@@ -355,7 +355,7 @@
// configuration of the transport before attaching/launching the process.
m_qSupported_response = response.GetStringRef().str();
- for (llvm::StringRef x : llvm::Split(response.GetStringRef(), ';')) {
+ for (llvm::StringRef x : llvm::Split(response.GetStringRef(), ";")) {
if (x == "qXfer:auxv:read+")
m_supports_qXfer_auxv_read = eLazyBoolYes;
else if (x == "qXfer:libraries-svr4:read+")
@@ -1657,7 +1657,7 @@
error.SetErrorString(error_string.c_str());
} else if (name.equals("dirty-pages")) {
std::vector<addr_t> dirty_page_list;
- for (llvm::StringRef x : llvm::Split(value, ',')) {
+ for (llvm::StringRef x : llvm::Split(value, ",")) {
addr_t page;
x.consume_front("0x");
if (llvm::to_integer(x, page, 16))
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits