BLI: improve StringRef.copy

This commit is contained in:
Jacques Lucke 2020-04-24 23:35:17 +02:00
parent ebe0d7ca5e
commit 1f2b1d520f
2 changed files with 28 additions and 1 deletions

View File

@ -94,12 +94,28 @@ class StringRefBase {
return m_data + m_size;
}
void copy_to__with_null(char *dst) const
void unsafe_copy(char *dst) const
{
memcpy(dst, m_data, m_size);
dst[m_size] = '\0';
}
void copy(char *dst, uint dst_size) const
{
if (m_size < dst_size) {
this->unsafe_copy(dst);
}
else {
BLI_assert(false);
dst[0] = '\0';
}
}
template<uint N> void copy(char (&dst)[N])
{
this->copy(dst, N);
}
/**
* Returns true when the string begins with the given prefix. Otherwise false.
*/

View File

@ -237,3 +237,14 @@ TEST(string_ref, Substr)
EXPECT_EQ(ref.substr(3, 4), "lo w");
EXPECT_EQ(ref.substr(6, 5), "world");
}
TEST(string_ref, Copy)
{
StringRef ref("hello");
char dst[10];
memset(dst, 0xFF, 10);
ref.copy(dst);
EXPECT_EQ(dst[5], '\0');
EXPECT_EQ(dst[6], 0xFF);
EXPECT_EQ(ref, dst);
}