diff options
Diffstat (limited to 'dev')
| -rw-r--r-- | dev/lib/core/chunk_string.hpp | 14 | ||||
| -rw-r--r-- | dev/tests/chunk_string/chunk_test.cc | 9 |
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); } |
