From 9921ac3db381106b66b70d8bf99136b265ec07c3 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Tue, 29 Oct 2019 17:15:04 +0000 Subject: [PATCH] Minor improvements to testsuite iterator utilities * testsuite/util/testsuite_iterators.h (BoundsContainer::size()): Add new member function. (WritableObject::operator=): Constrain with enable_if when available. (remove_cv): Use std::remove_if when available. (test_container::it(int)): Use size(). (test_container::size()): Use BoundsContainer::size(). From-SVN: r277578 --- libstdc++-v3/ChangeLog | 7 +++++ .../testsuite/util/testsuite_iterators.h | 27 ++++++++++++------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 7bb31623dbb..0414f128e4a 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,12 @@ 2019-10-29 Jonathan Wakely + * testsuite/util/testsuite_iterators.h (BoundsContainer::size()): Add + new member function. + (WritableObject::operator=): Constrain with enable_if when available. + (remove_cv): Use std::remove_if when available. + (test_container::it(int)): Use size(). + (test_container::size()): Use BoundsContainer::size(). + PR libstdc++/92267 * include/bits/stl_deque.h (_Deque_iterator(const _Deque_iterator&)): Do not define as defaulted. diff --git a/libstdc++-v3/testsuite/util/testsuite_iterators.h b/libstdc++-v3/testsuite/util/testsuite_iterators.h index d9a35622fb7..974490b1b6c 100644 --- a/libstdc++-v3/testsuite/util/testsuite_iterators.h +++ b/libstdc++-v3/testsuite/util/testsuite_iterators.h @@ -56,8 +56,11 @@ namespace __gnu_test { T* first; T* last; + BoundsContainer(T* _first, T* _last) : first(_first), last(_last) { } + + std::size_t size() const { return last - first; } }; // Simple container for holding state of a set of output iterators. @@ -66,13 +69,11 @@ namespace __gnu_test { T* incrementedto; bool* writtento; + OutputContainer(T* _first, T* _last) - : BoundsContainer(_first, _last), incrementedto(_first) - { - writtento = new bool[this->last - this->first]; - for(int i = 0; i < this->last - this->first; i++) - writtento[i] = false; - } + : BoundsContainer(_first, _last), incrementedto(_first), + writtento(new bool[this->size()]()) + { } ~OutputContainer() { delete[] writtento; } @@ -86,13 +87,14 @@ namespace __gnu_test public: OutputContainer* SharedInfo; - WritableObject(T* ptr_in,OutputContainer* SharedInfo_in): + + WritableObject(T* ptr_in, OutputContainer* SharedInfo_in): ptr(ptr_in), SharedInfo(SharedInfo_in) { } #if __cplusplus >= 201103L template - void + typename std::enable_if::value>::type operator=(U&& new_val) { ITERATOR_VERIFY(SharedInfo->writtento[ptr - SharedInfo->first] == 0); @@ -182,10 +184,14 @@ namespace __gnu_test void operator,(const T&, const output_iterator_wrapper&) = delete; #endif +#if __cplusplus >= 2011L + using std::remove_cv; +#else template struct remove_cv { typedef T type; }; template struct remove_cv { typedef T type; }; template struct remove_cv { typedef T type; }; template struct remove_cv { typedef T type; }; +#endif /** * @brief input_iterator wrapper for pointer @@ -543,6 +549,7 @@ namespace __gnu_test struct test_container { typename ItType::ContainerType bounds; + test_container(T* _first, T* _last) : bounds(_first, _last) { } @@ -556,7 +563,7 @@ namespace __gnu_test ItType it(int pos) { - ITERATOR_VERIFY(pos >= 0 && pos <= (bounds.last - bounds.first)); + ITERATOR_VERIFY(pos >= 0 && pos <= size()); return ItType(bounds.first + pos, &bounds); } @@ -581,7 +588,7 @@ namespace __gnu_test std::size_t size() const - { return bounds.last - bounds.first; } + { return bounds.size(); } }; } #endif -- 2.30.2