Skip to content

Commit ac06c6a

Browse files
committed
Optimize empty string assignment
1 parent 88fdf36 commit ac06c6a

File tree

2 files changed

+19
-7
lines changed

2 files changed

+19
-7
lines changed

src/scratch/string_functions.cpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,6 @@ extern "C"
3535
/*! Assigns the given string to str. */
3636
void string_assign(StringPtr *str, const StringPtr *another)
3737
{
38-
if (another->size == 0) {
39-
str->size = 0;
40-
string_alloc(str, 0);
41-
str->data[0] = u'\0';
42-
return;
43-
}
44-
4538
string_alloc(str, another->size);
4639
str->size = another->size;
4740
memcpy(str->data, another->data, (another->size + 1) * sizeof(typeof(*str->data)));

test/scratch_classes/string_functions_test.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,4 +69,23 @@ TEST(StringFunctionsTest, AssignAlloc)
6969
ASSERT_TRUE(str2.data);
7070
ASSERT_NE(str2.data, str1.data);
7171
ASSERT_EQ(memcmp(str2.data, str1.data, (str2.size + 1) * sizeof(typeof(*str2.data))), 0);
72+
73+
string_assign_cstring(&str2, "");
74+
ASSERT_EQ(str2.size, 0);
75+
ASSERT_GE(str2.allocatedSize, 1);
76+
ASSERT_TRUE(str2.data);
77+
ASSERT_EQ(str2.data[0], u'\0');
78+
79+
string_assign_cstring(&str2, "test");
80+
string_assign_cstring(&str2, nullptr);
81+
ASSERT_EQ(str2.size, 0);
82+
ASSERT_GE(str2.allocatedSize, 1);
83+
ASSERT_TRUE(str2.data);
84+
ASSERT_EQ(str2.data[0], u'\0');
85+
86+
string_assign(&str1, &str2);
87+
ASSERT_EQ(str1.size, 0);
88+
ASSERT_GE(str1.allocatedSize, 1);
89+
ASSERT_TRUE(str1.data);
90+
ASSERT_EQ(str1.data[0], u'\0');
7291
}

0 commit comments

Comments
 (0)