From: Francesco Chemolli <5175948+kinkie@users.noreply.github.com> Date: Tue, 26 Dec 2023 03:23:04 +0000 (+0000) Subject: Add SBuf::push_back() (#1621) X-Git-Tag: SQUID_7_0_1~246 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=1cca3b78a57f617fea97631d2d2673766f098743;p=thirdparty%2Fsquid.git Add SBuf::push_back() (#1621) This allows using STL algorithms via std::back_inserter and such. --- diff --git a/src/sbuf/SBuf.cc b/src/sbuf/SBuf.cc index eaf3c00d50..30991583d5 100644 --- a/src/sbuf/SBuf.cc +++ b/src/sbuf/SBuf.cc @@ -204,10 +204,10 @@ SBuf::append(const char * S, size_type Ssize) return lowAppend(S, Ssize); } -SBuf & -SBuf::append(const char c) +void +SBuf::push_back(const char c) { - return lowAppend(&c, 1); + lowAppend(&c, 1); } SBuf& diff --git a/src/sbuf/SBuf.h b/src/sbuf/SBuf.h index 2844c37011..f35f219f66 100644 --- a/src/sbuf/SBuf.h +++ b/src/sbuf/SBuf.h @@ -96,6 +96,7 @@ public: typedef MemBlob::size_type size_type; typedef SBufIterator const_iterator; typedef SBufReverseIterator const_reverse_iterator; + using value_type = char; static const size_type npos = 0xffffffff; // max(uint32_t) /// Maximum size of a SBuf. By design it MUST be < MAX(size_type)/2. Currently 256Mb. @@ -189,8 +190,11 @@ public: */ SBuf& append(const SBuf & S); + /// \copydoc push_back(char) + SBuf& append(const char c) { push_back(c); return *this; } + /// Append a single character. The character may be NUL (\0). - SBuf& append(const char c); + void push_back(char); /** Append operation for C-style strings. * diff --git a/src/tests/stub_SBuf.cc b/src/tests/stub_SBuf.cc index a53c21ece0..9d0aec565b 100644 --- a/src/tests/stub_SBuf.cc +++ b/src/tests/stub_SBuf.cc @@ -35,7 +35,7 @@ SBuf& SBuf::assign(const char *, size_type) STUB_RETVAL(*this) void SBuf::clear() STUB SBuf& SBuf::append(const SBuf &) STUB_RETVAL(*this) SBuf& SBuf::append(const char *, size_type) STUB_RETVAL(*this) -SBuf& SBuf::append(const char) STUB_RETVAL(*this) +void SBuf::push_back(char) STUB SBuf& SBuf::Printf(const char *, ...) STUB_RETVAL(*this) SBuf& SBuf::appendf(const char *, ...) STUB_RETVAL(*this) SBuf& SBuf::vappendf(const char *, va_list) STUB_RETVAL(*this) diff --git a/src/tests/testSBuf.cc b/src/tests/testSBuf.cc index e48a32e727..618c98b752 100644 --- a/src/tests/testSBuf.cc +++ b/src/tests/testSBuf.cc @@ -19,6 +19,7 @@ #include "tests/SBufFindTest.h" #include "unitTestMain.h" +#include #include #include #include @@ -64,6 +65,7 @@ class TestSBuf : public CPPUNIT_NS::TestFixture CPPUNIT_TEST(testStdStringOps); CPPUNIT_TEST(testIterators); CPPUNIT_TEST(testSBufHash); + CPPUNIT_TEST(testStdAlgorithm); // CPPUNIT_TEST( testDumpStats ); //fake test, to print alloc stats CPPUNIT_TEST_SUITE_END(); @@ -106,6 +108,7 @@ protected: void testStdStringOps(); void testIterators(); void testSBufHash(); + void testStdAlgorithm(); }; CPPUNIT_TEST_SUITE_REGISTRATION( TestSBuf ); @@ -1190,6 +1193,23 @@ TestSBuf::testSBufHash() } } +void +TestSBuf::testStdAlgorithm() +{ + { + SBuf src(fox), dst; + std::copy(src.begin(), src.end(), std::back_inserter(dst)); + CPPUNIT_ASSERT_EQUAL(src, dst); + } + + { + SBuf src(fox), dst; + std::copy_if(src.begin(), src.end(), std::back_inserter(dst), + [](char c) { return c != 'o'; }); + CPPUNIT_ASSERT_EQUAL(SBuf("The quick brwn fx jumped ver the lazy dg"), dst); + } +} + int main(int argc, char *argv[]) {