diff --git a/include/etl/vector.h b/include/etl/vector.h index 087a5c65..29f8fd5d 100644 --- a/include/etl/vector.h +++ b/include/etl/vector.h @@ -50,10 +50,9 @@ SOFTWARE. #include "exception.h" #include "debug_count.h" #include "private/vector_base.h" - -#include "algorithm.h" #include "iterator.h" #include "functional.h" +#include "static_assert.h" #if ETL_CPP11_SUPPORTED && ETL_NOT_USING_STLPORT && ETL_USING_STL #include @@ -1131,6 +1130,8 @@ namespace etl { public: + ETL_STATIC_ASSERT((MAX_SIZE_ > 0U), "Zero capacity etl::vector is not valid"); + static const size_t MAX_SIZE = MAX_SIZE_; //************************************************************************* @@ -1296,20 +1297,20 @@ namespace etl #endif //*************************************************************************** - /// A vector implementation that uses a fixed size buffer. + /// A vector implementation that uses a fixed size external buffer. /// The buffer is supplied on construction. ///\tparam T The element type. ///\ingroup vector //*************************************************************************** template - class vector : public etl::ivector + class vector_ext : public etl::ivector { public: //************************************************************************* /// Constructor. //************************************************************************* - vector(void* buffer, size_t max_size) + vector_ext(void* buffer, size_t max_size) : etl::ivector(reinterpret_cast(buffer), max_size) { this->initialise(); @@ -1317,9 +1318,9 @@ namespace etl //************************************************************************* /// Constructor, with size. - ///\param initial_size The initial size of the vector. + ///\param initial_size The initial size of the vector_ext. //************************************************************************* - explicit vector(size_t initial_size, void* buffer, size_t max_size) + explicit vector_ext(size_t initial_size, void* buffer, size_t max_size) : etl::ivector(reinterpret_cast(buffer), max_size) { this->initialise(); @@ -1328,10 +1329,10 @@ namespace etl //************************************************************************* /// Constructor, from initial size and value. - ///\param initial_size The initial size of the vector. - ///\param value The value to fill the vector with. + ///\param initial_size The initial size of the vector_ext. + ///\param value The value to fill the vector_ext with. //************************************************************************* - vector(size_t initial_size, typename etl::ivector::parameter_t value, void* buffer, size_t max_size) + vector_ext(size_t initial_size, typename etl::ivector::parameter_t value, void* buffer, size_t max_size) : etl::ivector(reinterpret_cast(buffer), max_size) { this->initialise(); @@ -1345,7 +1346,7 @@ namespace etl ///\param last The iterator to the last element + 1. //************************************************************************* template - vector(TIterator first, TIterator last, void* buffer, size_t max_size) + vector_ext(TIterator first, TIterator last, void* buffer, size_t max_size) : etl::ivector(reinterpret_cast(buffer), max_size) { this->assign(first, last); @@ -1355,7 +1356,7 @@ namespace etl //************************************************************************* /// Constructor, from an initializer_list. //************************************************************************* - vector(std::initializer_list init, void* buffer, size_t max_size) + vector_ext(std::initializer_list init, void* buffer, size_t max_size) : etl::ivector(reinterpret_cast(buffer), max_size) { this->assign(init.begin(), init.end()); @@ -1365,7 +1366,7 @@ namespace etl //************************************************************************* /// Copy constructor. //************************************************************************* - vector(const vector& other, void* buffer, size_t max_size) + vector_ext(const vector_ext& other, void* buffer, size_t max_size) : etl::ivector(reinterpret_cast(buffer), max_size) { this->assign(other.begin(), other.end()); @@ -1374,7 +1375,7 @@ namespace etl //************************************************************************* /// Assignment operator. //************************************************************************* - vector& operator = (const vector& rhs) + vector_ext& operator = (const vector_ext& rhs) { if (&rhs != this) { @@ -1388,7 +1389,7 @@ namespace etl //************************************************************************* /// Move constructor. //************************************************************************* - vector(vector&& other, void* buffer, size_t max_size) + vector_ext(vector_ext&& other, void* buffer, size_t max_size) : etl::ivector(reinterpret_cast(buffer), max_size) { if (this != &other) @@ -1409,7 +1410,7 @@ namespace etl //************************************************************************* /// Move assignment operator. //************************************************************************* - vector& operator = (vector&& rhs) + vector_ext& operator = (vector_ext&& rhs) { if (&rhs != this) { @@ -1432,7 +1433,7 @@ namespace etl //************************************************************************* /// Destructor. //************************************************************************* - ~vector() + ~vector_ext() { this->clear(); } @@ -1464,6 +1465,8 @@ namespace etl { public: + ETL_STATIC_ASSERT((MAX_SIZE_ > 0U), "Zero capacity etl::vector is not valid"); + static const size_t MAX_SIZE = MAX_SIZE_; //************************************************************************* @@ -1594,14 +1597,14 @@ namespace etl ///\ingroup vector //*************************************************************************** template - class vector : public etl::ivector + class vector_ext : public etl::ivector { public: //************************************************************************* /// Constructor. //************************************************************************* - vector(void* buffer, size_t max_size) + vector_ext(void* buffer, size_t max_size) : etl::ivector(reinterpret_cast(buffer), max_size) { this->initialise(); @@ -1609,9 +1612,9 @@ namespace etl //************************************************************************* /// Constructor, with size. - ///\param initial_size The initial size of the vector. + ///\param initial_size The initial size of the vector_ext. //************************************************************************* - vector(size_t initial_size, void* buffer, size_t max_size) + vector_ext(size_t initial_size, void* buffer, size_t max_size) : etl::ivector(reinterpret_cast(buffer), max_size) { this->initialise(); @@ -1620,10 +1623,10 @@ namespace etl //************************************************************************* /// Constructor, from initial size and value. - ///\param initial_size The initial size of the vector. - ///\param value The value to fill the vector with. + ///\param initial_size The initial size of the vector_ext. + ///\param value The value to fill the vector_ext with. //************************************************************************* - vector(size_t initial_size, typename etl::ivector::parameter_t value, void* buffer, size_t max_size) + vector_ext(size_t initial_size, typename etl::ivector::parameter_t value, void* buffer, size_t max_size) : etl::ivector(reinterpret_cast(buffer), max_size) { this->initialise(); @@ -1637,7 +1640,7 @@ namespace etl ///\param last The iterator to the last element + 1. //************************************************************************* template - vector(TIterator first, TIterator last, void* buffer, size_t max_size) + vector_ext(TIterator first, TIterator last, void* buffer, size_t max_size) : etl::ivector(reinterpret_cast(buffer), max_size) { this->assign(first, last); @@ -1647,7 +1650,7 @@ namespace etl //************************************************************************* /// Constructor, from an initializer_list. //************************************************************************* - vector(std::initializer_list init, void* buffer, size_t max_size) + vector_ext(std::initializer_list init, void* buffer, size_t max_size) : etl::ivector(reinterpret_cast(buffer), max_size) { this->assign(init.begin(), init.end()); @@ -1657,7 +1660,7 @@ namespace etl //************************************************************************* /// Copy constructor. //************************************************************************* - vector(const vector& other, void* buffer, size_t max_size) + vector_ext(const vector_ext& other, void* buffer, size_t max_size) : etl::ivector(reinterpret_cast(buffer), max_size) { (void)etl::ivector::operator = (other); @@ -1666,7 +1669,7 @@ namespace etl //************************************************************************* /// Assignment operator. //************************************************************************* - vector& operator = (const vector& rhs) + vector_ext& operator = (const vector_ext& rhs) { (void)etl::ivector::operator = (rhs); @@ -1677,7 +1680,7 @@ namespace etl //************************************************************************* /// Move constructor. //************************************************************************* - vector(vector&& other, void* buffer, size_t max_size) + vector_ext(vector_ext&& other, void* buffer, size_t max_size) : etl::ivector(reinterpret_cast(buffer), max_size) { (void)etl::ivector::operator = (etl::move(other)); @@ -1686,7 +1689,7 @@ namespace etl //************************************************************************* /// Move assignment operator. //************************************************************************* - vector& operator = (vector&& rhs) + vector_ext& operator = (vector_ext&& rhs) { (void)etl::ivector::operator = (etl::move(rhs)); @@ -1697,7 +1700,7 @@ namespace etl //************************************************************************* /// Destructor. //************************************************************************* - ~vector() + ~vector_ext() { this->clear(); } diff --git a/include/etl/version.h b/include/etl/version.h index 3843a00f..b592f725 100644 --- a/include/etl/version.h +++ b/include/etl/version.h @@ -37,9 +37,9 @@ SOFTWARE. /// Definitions of the ETL version ///\ingroup utilities -#define ETL_VERSION_MAJOR 18 -#define ETL_VERSION_MINOR 20 -#define ETL_VERSION_PATCH 2 +#define ETL_VERSION_MAJOR 19 +#define ETL_VERSION_MINOR 0 +#define ETL_VERSION_PATCH 0 #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) diff --git a/library.json b/library.json index 45882f62..d9ff2990 100644 --- a/library.json +++ b/library.json @@ -1,6 +1,6 @@ { "name": "Embedded Template Library", - "version": "18.20.2", + "version": "19.0.0", "author s": { "name": "John Wellbelove", "email": "john.wellbelove@etlcpp.com" diff --git a/library.properties b/library.properties index 154ccf08..abc54973 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=Embedded Template Library -version=18.20.2 +version=19.0.0 author= John Wellbelove maintainer=John Wellbelove license=MIT diff --git a/support/Release notes.txt b/support/Release notes.txt index 0ee12a6c..400f0494 100644 --- a/support/Release notes.txt +++ b/support/Release notes.txt @@ -1,3 +1,16 @@ +=============================================================================== +19.0.0 +Containers with external buffers or pools are now separate classes instead of specialisations. + +etl::circular_buffer => etl::circular_buffer_ext +etl::forward_list => etl::forward_list_ext +etl::list => etl::list_ext +etl::string<0> => etl::string_ext +etl::wstring<0> => etl::wstring_ext +etl::u16string<0> => etl::u16string_ext +etl::u32string<0> => etl::u32string_ext +etl::vector => etl::vector_ext + =============================================================================== 18.20.2 Fixed etl::to_string for floating point numbers between 0 & -1.0 diff --git a/test/run_tests b/test/runtests.sh similarity index 100% rename from test/run_tests rename to test/runtests.sh diff --git a/test/test_vector_external_buffer.cpp b/test/test_vector_external_buffer.cpp index d949a27d..b8c95af4 100644 --- a/test/test_vector_external_buffer.cpp +++ b/test/test_vector_external_buffer.cpp @@ -47,9 +47,9 @@ namespace SUITE(test_vector) { - typedef etl::vector Data; - typedef etl::ivector IData; - typedef std::vector Compare_Data; + typedef etl::vector_ext Data; + typedef etl::ivector IData; + typedef std::vector Compare_Data; Compare_Data initial_data; Compare_Data less_data; @@ -1077,8 +1077,8 @@ namespace const S raw[6] = { 1, 2, 3, 4, 5, 6 }; - etl::vector dest(etl::begin(raw), etl::end(raw), sbuffer1, SIZE); - etl::vector src((size_t) 2, S(8), sbuffer2, SIZE); + etl::vector_ext dest(etl::begin(raw), etl::end(raw), sbuffer1, SIZE); + etl::vector_ext src((size_t) 2, S(8), sbuffer2, SIZE); dest.insert(dest.begin(), src.begin(), src.end()); @@ -1112,7 +1112,7 @@ namespace const S raw[6] = { 1, 2, 3, 4, 5, 6 }; - etl::vector dest(etl::begin(raw), etl::end(raw), sbuffer1, SIZE); + etl::vector_ext dest(etl::begin(raw), etl::end(raw), sbuffer1, SIZE); dest.insert(dest.begin(), 2, S(8)); diff --git a/test/test_vector_pointer_external_buffer.cpp b/test/test_vector_pointer_external_buffer.cpp index ef733c25..8deeff3a 100644 --- a/test/test_vector_pointer_external_buffer.cpp +++ b/test/test_vector_pointer_external_buffer.cpp @@ -47,12 +47,12 @@ namespace SUITE(test_vector_pointer) { - typedef etl::vector Data; - typedef etl::vector CData; - typedef etl::ivector IData; - typedef etl::ivector CIData; - typedef std::vector Compare_Data; - typedef std::vector CCompare_Data; + typedef etl::vector_ext Data; + typedef etl::vector_ext CData; + typedef etl::ivector IData; + typedef etl::ivector CIData; + typedef std::vector Compare_Data; + typedef std::vector CCompare_Data; Compare_Data initial_data; Compare_Data less_data; @@ -1819,7 +1819,7 @@ namespace TEST_FIXTURE(SetupFixture, test_const_ivector_of_pointer_to_pointer) { int i1 = 1; - etl::vector consttest(buffer1, SIZE); + etl::vector_ext consttest(buffer1, SIZE); consttest.push_back(&i1); const etl::ivector& ct = consttest; @@ -1833,7 +1833,7 @@ namespace TEST_FIXTURE(SetupFixture, test_const_ivector_of_pointer_to_const_pointer) { int i1 = 1; - etl::vector consttest(buffer1, SIZE); + etl::vector_ext consttest(buffer1, SIZE); consttest.push_back(&i1); const etl::ivector& ct = consttest;