Merge branch 'master' into feature/variadic-variant

This commit is contained in:
John Wellbelove 2021-06-17 13:45:57 +01:00
commit 2e0c2a4099
14 changed files with 600 additions and 38 deletions

View File

@ -1296,31 +1296,31 @@ namespace etl
//*********************************************************************
/// Copies a portion of a string.
///\param s Pointer to the string to copy.
///\param len The number of characters to copy.
///\param pos The position to start copying from.
///\param s Pointer to the string to copy.
///\param count The number of characters to copy.
///\param pos The position to start copying from.
//*********************************************************************
size_type copy(pointer s, size_type len, size_type pos = 0)
size_type copy(pointer dest, size_type count, size_type pos = 0) const
{
if ((pos + len > size()))
if (pos < size())
{
#if ETL_STRING_TRUNCATION_CHECKS_ENABLED
set_truncated(true);
if (count != npos)
{
count = etl::min(count, size() - pos);
}
else
{
count = size() - pos;
}
#if defined(ETL_STRING_TRUNCATION_IS_ERROR)
ETL_ALWAYS_ASSERT(ETL_ERROR(string_truncation));
#endif
#endif
etl::copy_n(p_buffer + pos, count, dest);
return count;
}
size_type endpos = etl::min(pos + len, size());
for (size_type i = pos; i < endpos; ++i)
else
{
*s++ = p_buffer[i];
return 0U;
}
return endpos - pos;
}
//*********************************************************************

View File

@ -39,7 +39,7 @@ SOFTWARE.
#define ETL_VERSION_MAJOR 20
#define ETL_VERSION_MINOR 11
#define ETL_VERSION_PATCH 1
#define ETL_VERSION_PATCH 2
#define ETL_VERSION ETL_STRINGIFY(ETL_VERSION_MAJOR) "." ETL_STRINGIFY(ETL_VERSION_MINOR) "." ETL_STRINGIFY(ETL_VERSION_PATCH)
#define ETL_VERSION_W ETL_STRINGIFY(ETL_VERSION_MAJOR) L"." ETL_STRINGIFY(ETL_VERSION_MINOR) L"." ETL_STRINGIFY(ETL_VERSION_PATCH)
#define ETL_VERSION_U16 ETL_STRINGIFY(ETL_VERSION_MAJOR) u"." ETL_STRINGIFY(ETL_VERSION_MINOR) u"." ETL_STRINGIFY(ETL_VERSION_PATCH)

View File

@ -1,6 +1,6 @@
{
"name": "ETL Embedded Template Library",
"version": "20.11.1",
"version": "20.11.2",
"author s": {
"name": "John Wellbelove",
"email": "john.wellbelove@etlcpp.com"

View File

@ -1,5 +1,5 @@
name=Embedded Template Library ETL
version=20.11.1
version=20.11.2
author= John Wellbelove <john.wellbelove@etlcpp.com>
maintainer=John Wellbelove <john.wellbelove@etlcpp.com>
license=MIT

View File

@ -8,7 +8,7 @@ project('PROJECT_NAME',
'cpp_std=c++17', 'build.cpp_std=c++17',
],
meson_version: '>=0.54.0',
version: '20.11.1'
version: '20.11.2'
)
######################
@ -71,6 +71,8 @@ etl_test_sources = files(
'test/test_largest.cpp',
'test/test_list.cpp',
'test/test_maths.cpp',
'test/test_mem_cast.cpp',
'test/test_mem_cast_ptr.cpp',
'test/test_memory.cpp',
'test/test_message_bus.cpp',
'test/test_message_router.cpp',

View File

@ -1,3 +1,7 @@
===============================================================================
20.11.2
etl::basic_string::copy is now const and does not affect truncation flags.
===============================================================================
20.11.1
Fixed ambiguous function call in etl::mem_cast for clang.

View File

@ -3000,6 +3000,73 @@ namespace
CHECK(is_equal);
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_copy_start_pos_too_large)
{
Text text(initial_text.c_str());
value_t buffer1[SIZE];
size_t length1 = text.copy(buffer1, 5, SIZE);
CHECK_EQUAL(0U, length1);
#if ETL_STRING_TRUNCATION_CHECKS_ENABLED
CHECK(!text.is_truncated());
#endif
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_copy_count_equals_npos)
{
Compare_Text compare_text(initial_text.c_str());
Text text(initial_text.c_str());
value_t buffer1[SIZE];
value_t buffer2[SIZE];
size_t length1 = compare_text.copy(buffer1, Compare_Text::npos, 2);
buffer1[length1] = STR('\0');
size_t length2 = text.copy(buffer2, Text::npos, 2);
buffer2[length2] = STR('\0');
CHECK_EQUAL(length1, length2);
#if ETL_STRING_TRUNCATION_CHECKS_ENABLED
CHECK(!text.is_truncated());
#endif
bool is_equal = std::equal(buffer1,
buffer1 + length1,
buffer2);
CHECK(is_equal);
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_copy_count_too_large)
{
Compare_Text compare_text(initial_text.c_str());
Text text(initial_text.c_str());
value_t buffer1[SIZE];
value_t buffer2[SIZE];
size_t length1 = compare_text.copy(buffer1, SIZE, 2);
buffer1[length1] = STR('\0');
size_t length2 = text.copy(buffer2, SIZE, 2);
buffer2[length2] = STR('\0');
CHECK_EQUAL(length1, length2);
#if ETL_STRING_TRUNCATION_CHECKS_ENABLED
CHECK(!text.is_truncated());
#endif
bool is_equal = std::equal(buffer1,
buffer1 + length1,
buffer2);
CHECK(is_equal);
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_find_string)
{

View File

@ -3290,7 +3290,7 @@ namespace
TEST_FIXTURE(SetupFixture, test_copy)
{
Compare_Text compare_text(initial_text.c_str());
TextBuffer buffer;
Text text(initial_text.c_str(), buffer.data(), buffer.size());
@ -3314,6 +3314,78 @@ namespace
CHECK(is_equal);
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_copy_start_pos_too_large)
{
TextBuffer buffer;
Text text(initial_text.c_str(), buffer.data(), buffer.size());
value_t buffer1[SIZE];
size_t length1 = text.copy(buffer1, 5, SIZE);
CHECK_EQUAL(0U, length1);
#if ETL_STRING_TRUNCATION_CHECKS_ENABLED
CHECK(!text.is_truncated());
#endif
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_copy_count_equals_npos)
{
Compare_Text compare_text(initial_text.c_str());
TextBuffer buffer;
Text text(initial_text.c_str(), buffer.data(), buffer.size());
value_t buffer1[SIZE];
value_t buffer2[SIZE];
size_t length1 = compare_text.copy(buffer1, Compare_Text::npos, 2);
buffer1[length1] = STR('\0');
size_t length2 = text.copy(buffer2, Text::npos, 2);
buffer2[length2] = STR('\0');
CHECK_EQUAL(length1, length2);
#if ETL_STRING_TRUNCATION_CHECKS_ENABLED
CHECK(!text.is_truncated());
#endif
bool is_equal = std::equal(buffer1,
buffer1 + length1,
buffer2);
CHECK(is_equal);
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_copy_count_too_large)
{
Compare_Text compare_text(initial_text.c_str());
TextBuffer buffer;
Text text(initial_text.c_str(), buffer.data(), buffer.size());
value_t buffer1[SIZE];
value_t buffer2[SIZE];
size_t length1 = compare_text.copy(buffer1, SIZE, 2);
buffer1[length1] = STR('\0');
size_t length2 = text.copy(buffer2, SIZE, 2);
buffer2[length2] = STR('\0');
CHECK_EQUAL(length1, length2);
#if ETL_STRING_TRUNCATION_CHECKS_ENABLED
CHECK(!text.is_truncated());
#endif
bool is_equal = std::equal(buffer1,
buffer1 + length1,
buffer2);
CHECK(is_equal);
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_find_string)
{

View File

@ -2995,8 +2995,75 @@ namespace
#endif
bool is_equal = std::equal(buffer1,
buffer1 + length1,
buffer2);
buffer1 + length1,
buffer2);
CHECK(is_equal);
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_copy_start_pos_too_large)
{
Text text(initial_text.c_str());
value_t buffer1[SIZE];
size_t length1 = text.copy(buffer1, 5, SIZE);
CHECK_EQUAL(0U, length1);
#if ETL_STRING_TRUNCATION_CHECKS_ENABLED
CHECK(!text.is_truncated());
#endif
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_copy_count_equals_npos)
{
Compare_Text compare_text(initial_text.c_str());
Text text(initial_text.c_str());
value_t buffer1[SIZE];
value_t buffer2[SIZE];
size_t length1 = compare_text.copy(buffer1, Compare_Text::npos, 2);
buffer1[length1] = STR('\0');
size_t length2 = text.copy(buffer2, Text::npos, 2);
buffer2[length2] = STR('\0');
CHECK_EQUAL(length1, length2);
#if ETL_STRING_TRUNCATION_CHECKS_ENABLED
CHECK(!text.is_truncated());
#endif
bool is_equal = std::equal(buffer1,
buffer1 + length1,
buffer2);
CHECK(is_equal);
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_copy_count_too_large)
{
Compare_Text compare_text(initial_text.c_str());
Text text(initial_text.c_str());
value_t buffer1[SIZE];
value_t buffer2[SIZE];
size_t length1 = compare_text.copy(buffer1, SIZE, 2);
buffer1[length1] = STR('\0');
size_t length2 = text.copy(buffer2, SIZE, 2);
buffer2[length2] = STR('\0');
CHECK_EQUAL(length1, length2);
#if ETL_STRING_TRUNCATION_CHECKS_ENABLED
CHECK(!text.is_truncated());
#endif
bool is_equal = std::equal(buffer1,
buffer1 + length1,
buffer2);
CHECK(is_equal);
}

View File

@ -3290,7 +3290,7 @@ namespace
TEST_FIXTURE(SetupFixture, test_copy)
{
Compare_Text compare_text(initial_text.c_str());
TextBuffer buffer;
Text text(initial_text.c_str(), buffer.data(), buffer.size());
@ -3309,8 +3309,80 @@ namespace
#endif
bool is_equal = std::equal(buffer1,
buffer1 + length1,
buffer2);
buffer1 + length1,
buffer2);
CHECK(is_equal);
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_copy_start_pos_too_large)
{
TextBuffer buffer;
Text text(initial_text.c_str(), buffer.data(), buffer.size());
value_t buffer1[SIZE];
size_t length1 = text.copy(buffer1, 5, SIZE);
CHECK_EQUAL(0U, length1);
#if ETL_STRING_TRUNCATION_CHECKS_ENABLED
CHECK(!text.is_truncated());
#endif
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_copy_count_equals_npos)
{
Compare_Text compare_text(initial_text.c_str());
TextBuffer buffer;
Text text(initial_text.c_str(), buffer.data(), buffer.size());
value_t buffer1[SIZE];
value_t buffer2[SIZE];
size_t length1 = compare_text.copy(buffer1, Compare_Text::npos, 2);
buffer1[length1] = STR('\0');
size_t length2 = text.copy(buffer2, Text::npos, 2);
buffer2[length2] = STR('\0');
CHECK_EQUAL(length1, length2);
#if ETL_STRING_TRUNCATION_CHECKS_ENABLED
CHECK(!text.is_truncated());
#endif
bool is_equal = std::equal(buffer1,
buffer1 + length1,
buffer2);
CHECK(is_equal);
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_copy_count_too_large)
{
Compare_Text compare_text(initial_text.c_str());
TextBuffer buffer;
Text text(initial_text.c_str(), buffer.data(), buffer.size());
value_t buffer1[SIZE];
value_t buffer2[SIZE];
size_t length1 = compare_text.copy(buffer1, SIZE, 2);
buffer1[length1] = STR('\0');
size_t length2 = text.copy(buffer2, SIZE, 2);
buffer2[length2] = STR('\0');
CHECK_EQUAL(length1, length2);
#if ETL_STRING_TRUNCATION_CHECKS_ENABLED
CHECK(!text.is_truncated());
#endif
bool is_equal = std::equal(buffer1,
buffer1 + length1,
buffer2);
CHECK(is_equal);
}

View File

@ -2995,8 +2995,75 @@ namespace
#endif
bool is_equal = std::equal(buffer1,
buffer1 + length1,
buffer2);
buffer1 + length1,
buffer2);
CHECK(is_equal);
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_copy_start_pos_too_large)
{
Text text(initial_text.c_str());
value_t buffer1[SIZE];
size_t length1 = text.copy(buffer1, 5, SIZE);
CHECK_EQUAL(0U, length1);
#if ETL_STRING_TRUNCATION_CHECKS_ENABLED
CHECK(!text.is_truncated());
#endif
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_copy_count_equals_npos)
{
Compare_Text compare_text(initial_text.c_str());
Text text(initial_text.c_str());
value_t buffer1[SIZE];
value_t buffer2[SIZE];
size_t length1 = compare_text.copy(buffer1, Compare_Text::npos, 2);
buffer1[length1] = STR('\0');
size_t length2 = text.copy(buffer2, Text::npos, 2);
buffer2[length2] = STR('\0');
CHECK_EQUAL(length1, length2);
#if ETL_STRING_TRUNCATION_CHECKS_ENABLED
CHECK(!text.is_truncated());
#endif
bool is_equal = std::equal(buffer1,
buffer1 + length1,
buffer2);
CHECK(is_equal);
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_copy_count_too_large)
{
Compare_Text compare_text(initial_text.c_str());
Text text(initial_text.c_str());
value_t buffer1[SIZE];
value_t buffer2[SIZE];
size_t length1 = compare_text.copy(buffer1, SIZE, 2);
buffer1[length1] = STR('\0');
size_t length2 = text.copy(buffer2, SIZE, 2);
buffer2[length2] = STR('\0');
CHECK_EQUAL(length1, length2);
#if ETL_STRING_TRUNCATION_CHECKS_ENABLED
CHECK(!text.is_truncated());
#endif
bool is_equal = std::equal(buffer1,
buffer1 + length1,
buffer2);
CHECK(is_equal);
}

View File

@ -3290,7 +3290,7 @@ namespace
TEST_FIXTURE(SetupFixture, test_copy)
{
Compare_Text compare_text(initial_text.c_str());
TextBuffer buffer;
Text text(initial_text.c_str(), buffer.data(), buffer.size());
@ -3309,8 +3309,80 @@ namespace
#endif
bool is_equal = std::equal(buffer1,
buffer1 + length1,
buffer2);
buffer1 + length1,
buffer2);
CHECK(is_equal);
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_copy_start_pos_too_large)
{
TextBuffer buffer;
Text text(initial_text.c_str(), buffer.data(), buffer.size());
value_t buffer1[SIZE];
size_t length1 = text.copy(buffer1, 5, SIZE);
CHECK_EQUAL(0U, length1);
#if ETL_STRING_TRUNCATION_CHECKS_ENABLED
CHECK(!text.is_truncated());
#endif
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_copy_count_equals_npos)
{
Compare_Text compare_text(initial_text.c_str());
TextBuffer buffer;
Text text(initial_text.c_str(), buffer.data(), buffer.size());
value_t buffer1[SIZE];
value_t buffer2[SIZE];
size_t length1 = compare_text.copy(buffer1, Compare_Text::npos, 2);
buffer1[length1] = STR('\0');
size_t length2 = text.copy(buffer2, Text::npos, 2);
buffer2[length2] = STR('\0');
CHECK_EQUAL(length1, length2);
#if ETL_STRING_TRUNCATION_CHECKS_ENABLED
CHECK(!text.is_truncated());
#endif
bool is_equal = std::equal(buffer1,
buffer1 + length1,
buffer2);
CHECK(is_equal);
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_copy_count_too_large)
{
Compare_Text compare_text(initial_text.c_str());
TextBuffer buffer;
Text text(initial_text.c_str(), buffer.data(), buffer.size());
value_t buffer1[SIZE];
value_t buffer2[SIZE];
size_t length1 = compare_text.copy(buffer1, SIZE, 2);
buffer1[length1] = STR('\0');
size_t length2 = text.copy(buffer2, SIZE, 2);
buffer2[length2] = STR('\0');
CHECK_EQUAL(length1, length2);
#if ETL_STRING_TRUNCATION_CHECKS_ENABLED
CHECK(!text.is_truncated());
#endif
bool is_equal = std::equal(buffer1,
buffer1 + length1,
buffer2);
CHECK(is_equal);
}

View File

@ -2995,8 +2995,75 @@ namespace
#endif
bool is_equal = std::equal(buffer1,
buffer1 + length1,
buffer2);
buffer1 + length1,
buffer2);
CHECK(is_equal);
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_copy_start_pos_too_large)
{
Text text(initial_text.c_str());
value_t buffer1[SIZE];
size_t length1 = text.copy(buffer1, 5, SIZE);
CHECK_EQUAL(0U, length1);
#if ETL_STRING_TRUNCATION_CHECKS_ENABLED
CHECK(!text.is_truncated());
#endif
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_copy_count_equals_npos)
{
Compare_Text compare_text(initial_text.c_str());
Text text(initial_text.c_str());
value_t buffer1[SIZE];
value_t buffer2[SIZE];
size_t length1 = compare_text.copy(buffer1, Compare_Text::npos, 2);
buffer1[length1] = STR('\0');
size_t length2 = text.copy(buffer2, Text::npos, 2);
buffer2[length2] = STR('\0');
CHECK_EQUAL(length1, length2);
#if ETL_STRING_TRUNCATION_CHECKS_ENABLED
CHECK(!text.is_truncated());
#endif
bool is_equal = std::equal(buffer1,
buffer1 + length1,
buffer2);
CHECK(is_equal);
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_copy_count_too_large)
{
Compare_Text compare_text(initial_text.c_str());
Text text(initial_text.c_str());
value_t buffer1[SIZE];
value_t buffer2[SIZE];
size_t length1 = compare_text.copy(buffer1, SIZE, 2);
buffer1[length1] = STR('\0');
size_t length2 = text.copy(buffer2, SIZE, 2);
buffer2[length2] = STR('\0');
CHECK_EQUAL(length1, length2);
#if ETL_STRING_TRUNCATION_CHECKS_ENABLED
CHECK(!text.is_truncated());
#endif
bool is_equal = std::equal(buffer1,
buffer1 + length1,
buffer2);
CHECK(is_equal);
}

View File

@ -3290,7 +3290,7 @@ namespace
TEST_FIXTURE(SetupFixture, test_copy)
{
Compare_Text compare_text(initial_text.c_str());
TextBuffer buffer;
Text text(initial_text.c_str(), buffer.data(), buffer.size());
@ -3309,8 +3309,80 @@ namespace
#endif
bool is_equal = std::equal(buffer1,
buffer1 + length1,
buffer2);
buffer1 + length1,
buffer2);
CHECK(is_equal);
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_copy_start_pos_too_large)
{
TextBuffer buffer;
Text text(initial_text.c_str(), buffer.data(), buffer.size());
value_t buffer1[SIZE];
size_t length1 = text.copy(buffer1, 5, SIZE);
CHECK_EQUAL(0U, length1);
#if ETL_STRING_TRUNCATION_CHECKS_ENABLED
CHECK(!text.is_truncated());
#endif
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_copy_count_equals_npos)
{
Compare_Text compare_text(initial_text.c_str());
TextBuffer buffer;
Text text(initial_text.c_str(), buffer.data(), buffer.size());
value_t buffer1[SIZE];
value_t buffer2[SIZE];
size_t length1 = compare_text.copy(buffer1, Compare_Text::npos, 2);
buffer1[length1] = STR('\0');
size_t length2 = text.copy(buffer2, Text::npos, 2);
buffer2[length2] = STR('\0');
CHECK_EQUAL(length1, length2);
#if ETL_STRING_TRUNCATION_CHECKS_ENABLED
CHECK(!text.is_truncated());
#endif
bool is_equal = std::equal(buffer1,
buffer1 + length1,
buffer2);
CHECK(is_equal);
}
//*************************************************************************
TEST_FIXTURE(SetupFixture, test_copy_count_too_large)
{
Compare_Text compare_text(initial_text.c_str());
TextBuffer buffer;
Text text(initial_text.c_str(), buffer.data(), buffer.size());
value_t buffer1[SIZE];
value_t buffer2[SIZE];
size_t length1 = compare_text.copy(buffer1, SIZE, 2);
buffer1[length1] = STR('\0');
size_t length2 = text.copy(buffer2, SIZE, 2);
buffer2[length2] = STR('\0');
CHECK_EQUAL(length1, length2);
#if ETL_STRING_TRUNCATION_CHECKS_ENABLED
CHECK(!text.is_truncated());
#endif
bool is_equal = std::equal(buffer1,
buffer1 + length1,
buffer2);
CHECK(is_equal);
}