From 1456404128aa72930d4225bba3285f2a25a7adc7 Mon Sep 17 00:00:00 2001 From: Alan Frindell Date: Tue, 19 Jan 2016 14:21:15 -0800 Subject: [PATCH] Add Range::erase Summary: Needed to use StringPiece with boost::algorithm::trim() Reviewed By: yfeldblum Differential Revision: D2833657 fb-gh-sync-id: 3430b1a2540279b2f69f04c871df3bca748f2cb1 --- folly/Range.h | 16 ++++++++++++++++ folly/test/RangeTest.cpp | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/folly/Range.h b/folly/Range.h index 2e994732..6bece6da 100644 --- a/folly/Range.h +++ b/folly/Range.h @@ -594,6 +594,22 @@ public: return !empty() && back() == c; } + /** + * Remove the items in [b, e), as long as this subrange is at the beginning + * or end of the Range. + * + * Required for boost::algorithm::trim() + */ + void erase(Iter b, Iter e) { + if (b == b_) { + b_ = e; + } else if (e == e_) { + e_ = b; + } else { + throw std::out_of_range("index out of range"); + } + } + /** * Remove the given prefix and return true if the range starts with the given * prefix; return false otherwise. diff --git a/folly/test/RangeTest.cpp b/folly/test/RangeTest.cpp index f9ffda97..b1cdace8 100644 --- a/folly/test/RangeTest.cpp +++ b/folly/test/RangeTest.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include using namespace folly; @@ -420,6 +421,43 @@ TEST(StringPiece, SuffixEmpty) { EXPECT_EQ("", a); } +TEST(StringPiece, erase) { + StringPiece a("hello"); + auto b = a.begin(); + auto e = b + 1; + a.erase(b, e); + EXPECT_EQ("ello", a); + + e = a.end(); + b = e - 1; + a.erase(b, e); + EXPECT_EQ("ell", a); + + b = a.end() - 1; + e = a.end() - 1; + EXPECT_THROW(a.erase(b, e), std::out_of_range); + + b = a.begin(); + e = a.end(); + a.erase(b, e); + EXPECT_EQ("", a); + + a = "hello"; + b = a.begin(); + e = b + 2; + a.erase(b, e); + EXPECT_EQ("llo", a); + + b = a.end() - 2; + e = a.end(); + a.erase(b, e); + EXPECT_EQ("l", a); + + a = " hello "; + boost::algorithm::trim(a); + EXPECT_EQ(a, "hello"); +} + TEST(StringPiece, split_step_char_delimiter) { // 0 1 2 // 012345678901234567890123456 -- 2.34.1