]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
Add SBuf::push_back() (#1621)
authorFrancesco Chemolli <5175948+kinkie@users.noreply.github.com>
Tue, 26 Dec 2023 03:23:04 +0000 (03:23 +0000)
committerSquid Anubis <squid-anubis@squid-cache.org>
Wed, 27 Dec 2023 00:43:52 +0000 (00:43 +0000)
This allows using STL algorithms via std::back_inserter and such.

src/sbuf/SBuf.cc
src/sbuf/SBuf.h
src/tests/stub_SBuf.cc
src/tests/testSBuf.cc

index eaf3c00d50d50199e5a267d20b382972c4008310..30991583d55550947ed6696feb153d93ea98e799 100644 (file)
@@ -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&
index 2844c3701160af4ea8e6a7af4709d4672365a27a..f35f219f664c8b88bccaf629fdfe8e929df25555 100644 (file)
@@ -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.
      *
index a53c21ece02e2ad613b1117012a7a541e10772e9..9d0aec565b223982647ff4734a4690b1acff111a 100644 (file)
@@ -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)
index e48a32e727073383301f573b0e7dfa7520c8d5e1..618c98b75249538265bed3ec9c24bf735c4ba002 100644 (file)
@@ -19,6 +19,7 @@
 #include "tests/SBufFindTest.h"
 #include "unitTestMain.h"
 
+#include <algorithm>
 #include <iostream>
 #include <stdexcept>
 #include <unordered_map>
@@ -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[])
 {