diff --git a/include/etl/string.h b/include/etl/string.h index aab0f55f..be996692 100644 --- a/include/etl/string.h +++ b/include/etl/string.h @@ -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::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)); + } } //************************************************************************* diff --git a/include/etl/u16string.h b/include/etl/u16string.h index f65c9fcf..c2a7db6e 100644 --- a/include/etl/u16string.h +++ b/include/etl/u16string.h @@ -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::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)); + } } //************************************************************************* diff --git a/include/etl/u32string.h b/include/etl/u32string.h index 38c24b4b..7e729260 100644 --- a/include/etl/u32string.h +++ b/include/etl/u32string.h @@ -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::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)); + } } //************************************************************************* diff --git a/include/etl/wstring.h b/include/etl/wstring.h index d5c89661..22403529 100644 --- a/include/etl/wstring.h +++ b/include/etl/wstring.h @@ -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::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)); + } } //************************************************************************* diff --git a/test/test_string_char_external_buffer.cpp b/test/test_string_char_external_buffer.cpp index a2e6bf9c..62612d8b 100644 --- a/test/test_string_char_external_buffer.cpp +++ b/test/test_string_char_external_buffer.cpp @@ -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()); } //************************************************************************* diff --git a/test/test_string_u16_external_buffer.cpp b/test/test_string_u16_external_buffer.cpp index 2f14651d..b1487bcf 100644 --- a/test/test_string_u16_external_buffer.cpp +++ b/test/test_string_u16_external_buffer.cpp @@ -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()); diff --git a/test/test_string_u32_external_buffer.cpp b/test/test_string_u32_external_buffer.cpp index 5500699c..4e57284c 100644 --- a/test/test_string_u32_external_buffer.cpp +++ b/test/test_string_u32_external_buffer.cpp @@ -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()); diff --git a/test/test_string_wchar_t_external_buffer.cpp b/test/test_string_wchar_t_external_buffer.cpp index 2814f5eb..7ab208fa 100644 --- a/test/test_string_wchar_t_external_buffer.cpp +++ b/test/test_string_wchar_t_external_buffer.cpp @@ -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());