Skip to content

Commit 2d2e98d

Browse files
committed
ICU-23192 Add a FixedString(std::string_view) constructor.
1 parent 829752f commit 2d2e98d

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

icu4c/source/common/fixedstring.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,14 @@ class FixedString : public UMemory {
3030

3131
FixedString(const FixedString&) = delete;
3232

33+
FixedString(std::string_view init) {
34+
size_t size = init.size();
35+
if (reserve(size + 1)) {
36+
uprv_memcpy(ptr, init.data(), size);
37+
ptr[size] = '\0';
38+
}
39+
}
40+
3341
FixedString& operator=(const FixedString& other) {
3442
*this = other.data();
3543
return *this;

icu4c/source/test/intltest/strtest.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -888,6 +888,7 @@ void
888888
StringTest::TestFixedString() {
889889
static_assert(std::is_default_constructible_v<FixedString>);
890890
static_assert(!std::is_copy_constructible_v<FixedString>);
891+
static_assert(std::is_constructible_v<FixedString, std::string_view>);
891892
static_assert(std::is_copy_assignable_v<FixedString>);
892893
static_assert(std::is_assignable_v<FixedString, std::string_view>);
893894
static_assert(!std::is_move_constructible_v<FixedString>);
@@ -910,6 +911,11 @@ StringTest::TestFixedString() {
910911

911912
static constexpr char text[] = "foo";
912913

914+
FixedString init(text);
915+
assertFalse("initialized is empty", init.isEmpty());
916+
assertFalse("initialized alias is nullptr", init.getAlias() == nullptr);
917+
assertEquals("initialized data is text", text, init.data());
918+
913919
s = text;
914920
assertFalse("assigned is empty", s.isEmpty());
915921
assertFalse("assigned alias is nullptr", s.getAlias() == nullptr);

0 commit comments

Comments
 (0)