diff --git a/include/etl/circular_buffer.h b/include/etl/circular_buffer.h index 2544dd33..3f9710d1 100644 --- a/include/etl/circular_buffer.h +++ b/include/etl/circular_buffer.h @@ -39,6 +39,7 @@ SOFTWARE. #include "memory_model.h" #include "type_traits.h" #include "iterator.h" +#include "static_assert.h" #undef ETL_FILE #define ETL_FILE "56" @@ -1045,11 +1046,13 @@ namespace etl /// A fixed capacity circular buffer. /// Internal buffer. //*************************************************************************** - template + template class circular_buffer : public icircular_buffer { public: + ETL_STATIC_ASSERT((MAX_SIZE_ > 0U), "Zero sized etl::circular_buffer is not valid. Did you mean circular_buffer_ext?"); + static ETL_CONSTANT typename icircular_buffer::size_type MAX_SIZE = typename icircular_buffer::size_type(MAX_SIZE_); //************************************************************************* @@ -1165,14 +1168,14 @@ namespace etl /// External buffer. //*************************************************************************** template - class circular_buffer : public icircular_buffer + class circular_buffer_ext : public icircular_buffer { public: //************************************************************************* /// Constructor. //************************************************************************* - circular_buffer(void* buffer, size_t max_size) + circular_buffer_ext(void* buffer, size_t max_size) : icircular_buffer(reinterpret_cast(buffer), max_size) { } @@ -1182,7 +1185,7 @@ namespace etl /// Constructs a buffer from an iterator range. //************************************************************************* template - circular_buffer(TIterator first, const TIterator& last, void* buffer, size_t max_size) + circular_buffer_ext(TIterator first, const TIterator& last, void* buffer, size_t max_size) : icircular_buffer(reinterpret_cast(buffer), max_size) { while (first != last) @@ -1195,7 +1198,7 @@ namespace etl //************************************************************************* /// Construct from initializer_list. //************************************************************************* - circular_buffer(std::initializer_list init, void* buffer, size_t max_size) + circular_buffer_ext(std::initializer_list init, void* buffer, size_t max_size) : icircular_buffer(reinterpret_cast(buffer), max_size) { this->push(init.begin(), init.end()); @@ -1205,7 +1208,7 @@ namespace etl //************************************************************************* /// Copy Constructor. //************************************************************************* - circular_buffer(const circular_buffer& other, void* buffer, size_t max_size) + circular_buffer_ext(const circular_buffer_ext& other, void* buffer, size_t max_size) : icircular_buffer(reinterpret_cast(buffer), max_size) { if (this != &other) @@ -1217,7 +1220,7 @@ namespace etl //************************************************************************* /// Assignment operator //************************************************************************* - circular_buffer& operator =(const circular_buffer& other) + circular_buffer_ext& operator =(const circular_buffer_ext& other) { if (this != &other) { @@ -1231,7 +1234,7 @@ namespace etl //************************************************************************* /// Move Constructor. //************************************************************************* - circular_buffer(circular_buffer&& other, void* buffer, size_t max_size) + circular_buffer_ext(circular_buffer_ext&& other, void* buffer, size_t max_size) : icircular_buffer(reinterpret_cast(buffer), max_size) { if (this != &other) @@ -1248,7 +1251,7 @@ namespace etl //************************************************************************* /// Move Assignment operator //************************************************************************* - circular_buffer& operator =(circular_buffer&& other) + circular_buffer_ext& operator =(circular_buffer_ext&& other) { if (this != &other) { @@ -1265,7 +1268,7 @@ namespace etl //************************************************************************* /// Swap with another circular buffer //************************************************************************* - void swap(circular_buffer& other) + void swap(circular_buffer_ext& other) { using ETL_OR_STD::swap; // Allow ADL @@ -1277,7 +1280,7 @@ namespace etl //************************************************************************* /// Destructor. //************************************************************************* - ~circular_buffer() + ~circular_buffer_ext() { this->clear(); } @@ -1293,10 +1296,10 @@ namespace etl #endif //************************************************************************* - /// Overloaded swap for etl::circular_buffer + /// Overloaded swap for etl::circular_buffer_ext //************************************************************************* template - void swap(etl::circular_buffer& lhs, etl::circular_buffer& rhs) + void swap(etl::circular_buffer_ext& lhs, etl::circular_buffer_ext& rhs) { lhs.swap(rhs); } diff --git a/test/test_circular_buffer_external_buffer.cpp b/test/test_circular_buffer_external_buffer.cpp index f93b2bf9..f85f14a5 100644 --- a/test/test_circular_buffer_external_buffer.cpp +++ b/test/test_circular_buffer_external_buffer.cpp @@ -45,11 +45,11 @@ namespace static const size_t SIZE = 10; using ItemM = TestDataM; - using DataM = etl::circular_buffer; + using DataM = etl::circular_buffer_ext; using CompareM = std::vector; using Ndc = TestDataNDC; - using Data = etl::circular_buffer; + using Data = etl::circular_buffer_ext; using Compare = std::vector; using BufferM_t = etl::uninitialized_buffer_of;