summaryrefslogtreecommitdiffhomepage
path: root/dev
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-11-18 09:49:47 +0100
committerAmlal El Mahrouss <amlal@nekernel.org>2025-11-18 09:49:47 +0100
commit34ffda2f0cc9d884f3f6062d4a264db5ba76180a (patch)
tree608d04e8e3ab1947b048535601149769376a9eac /dev
parent226bf12ca084705f47ed6aa66932f5efb4a7796b (diff)
feat: chunk_string: class` performance improvements. and new operator
overload. Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev')
-rw-r--r--dev/lib/core/chunk_string.hpp14
-rw-r--r--dev/tests/chunk_string/chunk_test.cc9
2 files changed, 19 insertions, 4 deletions
diff --git a/dev/lib/core/chunk_string.hpp b/dev/lib/core/chunk_string.hpp
index 77e6864..7e5360c 100644
--- a/dev/lib/core/chunk_string.hpp
+++ b/dev/lib/core/chunk_string.hpp
@@ -46,6 +46,19 @@ namespace ocl
basic_chunk_string(const basic_chunk_string&) = delete;
public:
+ /// @brief Append a std::basic_string to the chunk string.
+ basic_chunk_string& operator+=(const char_type* in)
+ {
+ if (in == nullptr || bad_)
+ return *this;
+
+ const auto& sz = std::strlen(in);
+
+ this->operator+=(std::basic_string<char_type>(in, sz));
+
+ return *this;
+ }
+
basic_chunk_string& operator+=(const std::basic_string<char_type>& in)
{
if (in.empty() || bad_)
@@ -76,6 +89,7 @@ namespace ocl
return *this;
}
+ /// @brief Convert to basic_string or return from cache.
std::basic_string<char_type> str() const noexcept
{
static std::basic_string<char_type> ret;
diff --git a/dev/tests/chunk_string/chunk_test.cc b/dev/tests/chunk_string/chunk_test.cc
index 973ce43..7d68ae2 100644
--- a/dev/tests/chunk_string/chunk_test.cc
+++ b/dev/tests/chunk_string/chunk_test.cc
@@ -11,12 +11,13 @@
TEST(ChunkTest, BasicChunkUsage)
{
- const std::string test_string = "HELLO, WORLD!";
- const unsigned iterations = 1024000;
+ const char* test_string = "HELLO, WORLD!\r\n";
+ const auto iterations = 1024000;
+ const auto limit = 30;
auto start = std::chrono::high_resolution_clock::now();
- ocl::basic_chunk_string<char, 1000000> optimized;
+ ocl::basic_chunk_string<char, iterations> optimized;
for (unsigned i = 0; i < iterations; ++i)
{
@@ -26,5 +27,5 @@ TEST(ChunkTest, BasicChunkUsage)
auto end = std::chrono::high_resolution_clock::now();
auto optimized_time = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
- EXPECT_TRUE(optimized_time.count() < 30U);
+ EXPECT_TRUE(optimized_time.count() < limit);
}