Re: [PATCH] Minor improvements to testsuite iterator utilities

2019-10-30 Thread Jonathan Wakely

On 29/10/19 17:15 +, Jonathan Wakely wrote:

* 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().

Tested powerpc64le-linux, committed to trunk.




@@ -182,10 +184,14 @@ namespace __gnu_test
void operator,(const T&, const output_iterator_wrapper&) = delete;
#endif

+#if __cplusplus >= 2011L


Oops! That should be 201103L.

Fixed by the attached patch, which I'll commit shortly.

commit 069df87c7e936d568a142df3930c700306546acc
Author: Jonathan Wakely 
Date:   Wed Oct 30 14:32:53 2019 +

Fix typo in preprocessor check

* testsuite/util/testsuite_iterators.h: Fix typo in __cplusplus check.

diff --git a/libstdc++-v3/testsuite/util/testsuite_iterators.h b/libstdc++-v3/testsuite/util/testsuite_iterators.h
index 70c1f9b6689..c5ae5b123fe 100644
--- a/libstdc++-v3/testsuite/util/testsuite_iterators.h
+++ b/libstdc++-v3/testsuite/util/testsuite_iterators.h
@@ -184,7 +184,7 @@ namespace __gnu_test
 void operator,(const T&, const output_iterator_wrapper&) = delete;
 #endif
 
-#if __cplusplus >= 2011L
+#if __cplusplus >= 201103L
   using std::remove_cv;
 #else
   template struct remove_cv { typedef T type; };


[PATCH] Minor improvements to testsuite iterator utilities

2019-10-29 Thread 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().

Tested powerpc64le-linux, committed to trunk.


commit 8b8165ec804d990065bcf2ce4ef2a64926cc68c8
Author: redi 
Date:   Tue Oct 29 17:15:04 2019 +

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().

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@277578 
138bc75d-0d04-0410-961f-82ee72b054a4

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, );
 }
 
@@ -581,7 +588,7 @@ namespace __gnu_test
 
 std::size_t
 size() const
-{ return bounds.last - bounds.first; }
+{ return bounds.size(); }
   };
 }
 #endif