From 3ae16856264394a55e8fb22f76a6de8eca7264db Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Thu, 15 Jan 2026 11:25:26 -0500 Subject: [PATCH] xo-object2: + StringOps.clone + utest --- xo-object2/include/xo/object2/StringOps.hpp | 15 +++++++++++++++ xo-object2/utest/StringOps.test.cpp | 17 +++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/xo-object2/include/xo/object2/StringOps.hpp b/xo-object2/include/xo/object2/StringOps.hpp index a8e231e9..96d9da15 100644 --- a/xo-object2/include/xo/object2/StringOps.hpp +++ b/xo-object2/include/xo/object2/StringOps.hpp @@ -19,13 +19,21 @@ namespace xo { using AAllocator = xo::mm::AAllocator; using size_type = DString::size_type; + /** wrapper for DString.empty() **/ template static obj empty(obj mm, size_type cap); + /** wrapper for DString.from_cstr() **/ template static obj from_cstr(obj mm, const char * cstr); + + /** wrapper for DString.clone() **/ + template + static obj clone(obj mm, + obj src); }; template @@ -41,6 +49,13 @@ namespace xo { { return obj(DString::from_cstr(mm, cstr)); } + + template + obj + StringOps::clone(obj mm, obj src) + { + return obj(DString::clone(mm, src.data())); + } } } diff --git a/xo-object2/utest/StringOps.test.cpp b/xo-object2/utest/StringOps.test.cpp index bfd3fbd3..2fabb0ea 100644 --- a/xo-object2/utest/StringOps.test.cpp +++ b/xo-object2/utest/StringOps.test.cpp @@ -64,6 +64,23 @@ namespace xo { REQUIRE(s.data()->size() == 11); REQUIRE(std::strcmp(s.data()->chars(), cstr) == 0); } + + TEST_CASE("StringOps-clone", "[object2][StringOps]") + { + ArenaConfig cfg { .name_ = "testarena", + .size_ = 4*1024 }; + DArena arena = DArena::map(cfg); + auto alloc = with_facet::mkobj(&arena); + + auto src = StringOps::from_cstr(alloc, "hello world"); + auto copy = StringOps::clone(alloc, src); + + REQUIRE(copy.data() != nullptr); + REQUIRE(copy.data() != src.data()); + REQUIRE(copy.data()->size() == src.data()->size()); + REQUIRE(copy.data()->capacity() == src.data()->capacity()); + REQUIRE(std::strcmp(copy.data()->chars(), src.data()->chars()) == 0); + } } /*namespace ut*/ } /*namespace xo*/