diff --git a/include/etl/private/ivectorpointer.h b/include/etl/private/ivectorpointer.h index 9ef269777..4a24a186a 100644 --- a/include/etl/private/ivectorpointer.h +++ b/include/etl/private/ivectorpointer.h @@ -50,12 +50,12 @@ namespace etl public: typedef T* value_type; - typedef T*& reference; - typedef const T* const & const_reference; - typedef T** pointer; - typedef const T* const * const_pointer; - typedef T** iterator; - typedef const T* const * const_iterator; + typedef value_type& reference; + typedef const value_type& const_reference; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef value_type* iterator; + typedef const value_type* const_iterator; typedef std::reverse_iterator reverse_iterator; typedef std::reverse_iterator const_reverse_iterator; typedef size_t size_type; @@ -452,12 +452,12 @@ namespace etl public: typedef const T* value_type; - typedef const T*& reference; - typedef const T* const & const_reference; - typedef const T** pointer; - typedef const T* const * const_pointer; - typedef const T** iterator; - typedef const T* const * const_iterator; + typedef value_type& reference; + typedef const value_type& const_reference; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef value_type* iterator; + typedef const value_type* const_iterator; typedef std::reverse_iterator reverse_iterator; typedef std::reverse_iterator const_reverse_iterator; typedef size_t size_type; diff --git a/include/etl/private/pvoidvector.h b/include/etl/private/pvoidvector.h index 5997b2e6b..b6f8e61ad 100644 --- a/include/etl/private/pvoidvector.h +++ b/include/etl/private/pvoidvector.h @@ -61,12 +61,12 @@ namespace etl public: typedef void* value_type; - typedef void*& reference; - typedef const void*& const_reference; - typedef void** pointer; - typedef const void** const_pointer; - typedef void** iterator; - typedef const void** const_iterator; + typedef value_type& reference; + typedef const value_type& const_reference; + typedef value_type* pointer; + typedef const value_type* const_pointer; + typedef value_type* iterator; + typedef const value_type* const_iterator; typedef std::reverse_iterator reverse_iterator; typedef std::reverse_iterator const_reverse_iterator; typedef size_t size_type; diff --git a/include/etl/version.h b/include/etl/version.h index 9043d8f37..5c7e5d031 100644 --- a/include/etl/version.h +++ b/include/etl/version.h @@ -37,10 +37,10 @@ SOFTWARE. /// Definitions of the ETL version ///\ingroup utilities -#define ETL_VERSION "11.13.0" +#define ETL_VERSION "11.13.1" #define ETL_VERSION_MAJOR 11 #define ETL_VERSION_MINOR 13 -#define ETL_VERSION_PATCH 0 +#define ETL_VERSION_PATCH 1 #endif diff --git a/src/private/pvoidvector.cpp b/src/private/pvoidvector.cpp index 527abfbe7..814abbd48 100644 --- a/src/private/pvoidvector.cpp +++ b/src/private/pvoidvector.cpp @@ -181,7 +181,7 @@ void etl::pvoidvector::resize(size_t new_size, etl::pvoidvector::value_type valu //********************************************************************* etl::pvoidvector::reference etl::pvoidvector::operator [](size_t i) { - return p_buffer[i]; + return reference(p_buffer[i]); } //********************************************************************* @@ -203,7 +203,7 @@ etl::pvoidvector::const_reference etl::pvoidvector::operator [](size_t i) const etl::pvoidvector::reference etl::pvoidvector::at(size_t i) { ETL_ASSERT(i < size(), ETL_ERROR(vector_out_of_bounds)); - return p_buffer[i]; + return reference(p_buffer[i]); } //********************************************************************* @@ -224,7 +224,7 @@ etl::pvoidvector::const_reference etl::pvoidvector::at(size_t i) const //********************************************************************* etl::pvoidvector::reference etl::pvoidvector::front() { - return p_buffer[0]; + return reference(p_buffer[0]); } //********************************************************************* @@ -242,7 +242,7 @@ etl::pvoidvector::const_reference etl::pvoidvector::front() const //********************************************************************* etl::pvoidvector::reference etl::pvoidvector::back() { - return *(p_end - 1); + return reference(*(p_end - 1)); } //********************************************************************* @@ -260,7 +260,7 @@ etl::pvoidvector::const_reference etl::pvoidvector::back() const //********************************************************************* etl::pvoidvector::pointer etl::pvoidvector::data() { - return p_buffer; + return pointer(p_buffer); } //********************************************************************* diff --git a/support/Release notes.txt b/support/Release notes.txt index 315fa97c4..94460ab24 100644 --- a/support/Release notes.txt +++ b/support/Release notes.txt @@ -1,3 +1,7 @@ +=============================================================================== +11.13.1 +Fixed vector of pointer typedefs + =============================================================================== 11.13.0 Added specialisation for vector diff --git a/test/test_vector_pointer.cpp b/test/test_vector_pointer.cpp index eeac0e8cb..d35cc045f 100644 --- a/test/test_vector_pointer.cpp +++ b/test/test_vector_pointer.cpp @@ -1813,5 +1813,33 @@ namespace CHECK(!is_equal); } + + //************************************************************************* + TEST_FIXTURE(SetupFixture, test_const_ivector_of_pointer_to_pointer) + { + int i1 = 1; + etl::vector consttest; + consttest.push_back(&i1); + const etl::ivector& ct = consttest; + + int* i2 = ct[0]; + + CHECK(i1 == *i2); + CHECK(&i1 == i2); + } + + //************************************************************************* + TEST_FIXTURE(SetupFixture, test_const_ivector_of_pointer_to_const_pointer) + { + int i1 = 1; + etl::vector consttest; + consttest.push_back(&i1); + const etl::ivector& ct = consttest; + + const int* i2 = ct[0]; + + CHECK(i1 == *i2); + CHECK(&i1 == i2); + } }; }