Refactor string initialise with external buffer

This commit is contained in:
John Wellbelove 2020-09-19 01:04:44 +01:00
parent 5a5579df7a
commit 6f3995a4e7
8 changed files with 69 additions and 153 deletions

View File

@ -274,26 +274,10 @@ namespace etl
//*************************************************************************
/// Constructor.
//*************************************************************************
string(value_type* buffer, size_t buffer_size, bool use_buffer_contents = false)
string(value_type* buffer, size_t buffer_size)
: istring(buffer, buffer_size - 1U)
{
if (use_buffer_contents)
{
this->current_size = etl::strlen(buffer);
}
else
{
this->initialise();
}
}
//*************************************************************************
/// Constructor direct from buffer.
//*************************************************************************
string(value_type* buffer)
: istring(buffer, etl::strlen(buffer))
{
this->current_size = etl::strlen(buffer);
this->initialise();
}
//*************************************************************************
@ -343,10 +327,18 @@ namespace etl
/// Constructor, from null terminated text.
///\param text The initial text of the string.
//*************************************************************************
ETL_EXPLICIT_STRING_FROM_CHAR string(const value_type* text, value_type* buffer, size_t buffer_size)
string(const value_type* text, value_type* buffer, size_t buffer_size)
: istring(buffer, buffer_size - 1U)
{
this->assign(text, text + etl::char_traits<value_type>::length(text));
// Is the initial text at the same address as the buffer?
if (text == buffer)
{
this->current_size = etl::strlen(buffer);
}
else
{
this->assign(text, text + etl::strlen(text));
}
}
//*************************************************************************

View File

@ -260,26 +260,10 @@ namespace etl
//*************************************************************************
/// Constructor.
//*************************************************************************
u16string(value_type* buffer, size_t buffer_size, bool use_buffer_contents = false)
u16string(value_type* buffer, size_t buffer_size)
: iu16string(buffer, buffer_size - 1U)
{
if (use_buffer_contents)
{
this->current_size = etl::strlen(buffer);
}
else
{
this->initialise();
}
}
//*************************************************************************
/// Constructor direct from buffer.
//*************************************************************************
u16string(value_type* buffer)
: iu16string(buffer, etl::strlen(buffer))
{
this->current_size = etl::strlen(buffer);
this->initialise();
}
//*************************************************************************
@ -329,10 +313,18 @@ namespace etl
/// Constructor, from null terminated text.
///\param text The initial text of the u16string.
//*************************************************************************
ETL_EXPLICIT_STRING_FROM_CHAR u16string(const value_type* text, value_type* buffer, size_t buffer_size)
u16string(const value_type* text, value_type* buffer, size_t buffer_size)
: iu16string(buffer, buffer_size - 1U)
{
this->assign(text, text + etl::char_traits<value_type>::length(text));
// Is the initial text at the same address as the buffer?
if (text == buffer)
{
this->current_size = etl::strlen(buffer);
}
else
{
this->assign(text, text + etl::strlen(text));
}
}
//*************************************************************************

View File

@ -260,26 +260,10 @@ namespace etl
//*************************************************************************
/// Constructor.
//*************************************************************************
u32string(value_type* buffer, size_t buffer_size, bool use_buffer_contents = false)
u32string(value_type* buffer, size_t buffer_size)
: iu32string(buffer, buffer_size - 1U)
{
if (use_buffer_contents)
{
this->current_size = etl::strlen(buffer);
}
else
{
this->initialise();
}
}
//*************************************************************************
/// Constructor direct from buffer.
//*************************************************************************
u32string(value_type* buffer)
: iu32string(buffer, etl::strlen(buffer))
{
this->current_size = etl::strlen(buffer);
this->initialise();
}
//*************************************************************************
@ -332,7 +316,15 @@ namespace etl
ETL_EXPLICIT_STRING_FROM_CHAR u32string(const value_type* text, value_type* buffer, size_t buffer_size)
: iu32string(buffer, buffer_size - 1U)
{
this->assign(text, text + etl::char_traits<value_type>::length(text));
// Is the initial text at the same address as the buffer?
if (text == buffer)
{
this->current_size = etl::strlen(buffer);
}
else
{
this->assign(text, text + etl::strlen(text));
}
}
//*************************************************************************

View File

@ -261,26 +261,10 @@ namespace etl
//*************************************************************************
/// Constructor.
//*************************************************************************
wstring(value_type* buffer, size_t buffer_size, bool use_buffer_contents = false)
wstring(value_type* buffer, size_t buffer_size)
: iwstring(buffer, buffer_size - 1U)
{
if (use_buffer_contents)
{
this->current_size = etl::strlen(buffer);
}
else
{
this->initialise();
}
}
//*************************************************************************
/// Constructor direct from buffer.
//*************************************************************************
wstring(value_type* buffer)
: iwstring(buffer, etl::strlen(buffer))
{
this->current_size = etl::strlen(buffer);
this->initialise();
}
//*************************************************************************
@ -330,10 +314,18 @@ namespace etl
/// Constructor, from null terminated text.
///\param text The initial text of the wstring.
//*************************************************************************
ETL_EXPLICIT_STRING_FROM_CHAR wstring(const value_type* text, value_type* buffer, size_t buffer_size)
wstring(const value_type* text, value_type* buffer, size_t buffer_size)
: iwstring(buffer, buffer_size - 1U)
{
this->assign(text, text + etl::char_traits<value_type>::length(text));
// Is the initial text at the same address as the buffer?
if (text == buffer)
{
this->current_size = etl::strlen(buffer);
}
else
{
this->assign(text, text + etl::strlen(text));
}
}
//*************************************************************************

View File

@ -116,19 +116,6 @@ namespace
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_buffer_text)
{
Text text(p_text);
CHECK_EQUAL(text.size(), etl::strlen(p_text));
CHECK(!text.empty());
CHECK_EQUAL(etl::strlen(p_text), text.capacity());
CHECK_EQUAL(etl::strlen(p_text), text.max_size());
CHECK(text.begin() != text.end());
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_buffer_and_size)
{
@ -146,7 +133,7 @@ namespace
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_buffer_text_and_size)
{
Text text(p_text, etl::strlen(p_text) + 1, true);
Text text(p_text, p_text, etl::strlen(p_text) + 1);
CHECK_EQUAL(text.size(), etl::strlen(p_text));
CHECK(!text.empty());
@ -172,7 +159,7 @@ namespace
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_array_buffer_text)
{
Text text(array_text, etl::size(array_text), true);
Text text(array_text, array_text, etl::size(array_text));
CHECK_EQUAL(text.size(), etl::strlen(array_text));
CHECK(!text.empty());
@ -257,16 +244,16 @@ namespace
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_constructor_char_pointer_size)
{
Compare_Text compare_text(SIZE, STR('A'));
Compare_Text compare_text(SIZE, STR('A'));
TextBuffer buffer;
Text text(SIZE, STR('A'), buffer.data(), buffer.size());
TextBuffer buffer;
Text text(SIZE, STR('A'), buffer.data(), buffer.size());
CHECK(!text.empty());
CHECK(!text.empty());
bool is_equal = Equal(compare_text, text);
CHECK(is_equal);
CHECK(!text.truncated());
bool is_equal = Equal(compare_text, text);
CHECK(is_equal);
CHECK(!text.truncated());
}
//*************************************************************************
@ -287,16 +274,16 @@ namespace
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_constructor_size_char)
{
Compare_Text compare_text(initial_text.c_str(), initial_text.size() / 2);
Compare_Text compare_text(initial_text.c_str(), initial_text.size() / 2);
TextBuffer buffer;
Text text(initial_text.c_str(), initial_text.size() / 2, buffer.data(), buffer.size());
TextBuffer buffer;
Text text(initial_text.c_str(), initial_text.size() / 2, buffer.data(), buffer.size());
CHECK(!text.empty());
CHECK(!text.empty());
bool is_equal = Equal(compare_text, text);
CHECK(is_equal);
CHECK(!text.truncated());
bool is_equal = Equal(compare_text, text);
CHECK(is_equal);
CHECK(!text.truncated());
}
//*************************************************************************

View File

@ -116,19 +116,6 @@ namespace
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_buffer_text)
{
Text text(p_text);
CHECK_EQUAL(text.size(), etl::strlen(p_text));
CHECK(!text.empty());
CHECK_EQUAL(etl::strlen(p_text), text.capacity());
CHECK_EQUAL(etl::strlen(p_text), text.max_size());
CHECK(text.begin() != text.end());
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_buffer_and_size)
{
@ -146,7 +133,7 @@ namespace
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_buffer_text_and_size)
{
Text text(p_text, etl::strlen(p_text) + 1, true);
Text text(p_text, p_text, etl::strlen(p_text) + 1);
CHECK_EQUAL(text.size(), etl::strlen(p_text));
CHECK(!text.empty());
@ -172,7 +159,7 @@ namespace
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_array_buffer_text)
{
Text text(array_text, etl::size(array_text), true);
Text text(array_text, array_text, etl::size(array_text));
CHECK_EQUAL(text.size(), etl::strlen(array_text));
CHECK(!text.empty());

View File

@ -116,19 +116,6 @@ namespace
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_buffer_text)
{
Text text(p_text);
CHECK_EQUAL(text.size(), etl::strlen(p_text));
CHECK(!text.empty());
CHECK_EQUAL(etl::strlen(p_text), text.capacity());
CHECK_EQUAL(etl::strlen(p_text), text.max_size());
CHECK(text.begin() != text.end());
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_buffer_and_size)
{
@ -146,7 +133,7 @@ namespace
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_buffer_text_and_size)
{
Text text(p_text, etl::strlen(p_text) + 1, true);
Text text(p_text, p_text, etl::strlen(p_text) + 1);
CHECK_EQUAL(text.size(), etl::strlen(p_text));
CHECK(!text.empty());
@ -172,7 +159,7 @@ namespace
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_array_buffer_text)
{
Text text(array_text, etl::size(array_text), true);
Text text(array_text, array_text, etl::size(array_text));
CHECK_EQUAL(text.size(), etl::strlen(array_text));
CHECK(!text.empty());

View File

@ -116,19 +116,6 @@ namespace
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_buffer_text)
{
Text text(p_text);
CHECK_EQUAL(text.size(), etl::strlen(p_text));
CHECK(!text.empty());
CHECK_EQUAL(etl::strlen(p_text), text.capacity());
CHECK_EQUAL(etl::strlen(p_text), text.max_size());
CHECK(text.begin() != text.end());
CHECK(!text.truncated());
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_buffer_and_size)
{
@ -146,7 +133,7 @@ namespace
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_buffer_text_and_size)
{
Text text(p_text, etl::strlen(p_text) + 1, true);
Text text(p_text, p_text, etl::strlen(p_text) + 1);
CHECK_EQUAL(text.size(), etl::strlen(p_text));
CHECK(!text.empty());
@ -172,7 +159,7 @@ namespace
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_default_constructor_use_array_buffer_text)
{
Text text(array_text, etl::size(array_text), true);
Text text(array_text, array_text, etl::size(array_text));
CHECK_EQUAL(text.size(), etl::strlen(array_text));
CHECK(!text.empty());