[PPL-devel] [GIT] ppl/ppl(master): Added any_iterator operator+= and operator+ overloadings for unsigned types.

Enea Zaffanella zaffanella at cs.unipr.it
Fri Feb 24 16:10:59 CET 2012


Module: ppl/ppl
Branch: master
Commit: 4abb9c3094dc31615447801e02e71ac6c4af1ff4
URL:    http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=4abb9c3094dc31615447801e02e71ac6c4af1ff4

Author: Enea Zaffanella <zaffanella at cs.unipr.it>
Date:   Fri Feb 24 16:09:55 2012 +0100

Added any_iterator operator+= and operator+ overloadings for unsigned types.

---

 src/OR_Matrix.defs.hh    |   10 ++++++++++
 src/OR_Matrix.inlines.hh |   31 +++++++++++++++++++++++++++++++
 2 files changed, 41 insertions(+), 0 deletions(-)

diff --git a/src/OR_Matrix.defs.hh b/src/OR_Matrix.defs.hh
index 0c7f137..f70dca1 100644
--- a/src/OR_Matrix.defs.hh
+++ b/src/OR_Matrix.defs.hh
@@ -253,6 +253,11 @@ private:
     //! Assignment-increment operator.
     any_row_iterator& operator+=(difference_type m);
 
+    //! Assignment-increment operator for \p m of unsigned type.
+    template <typename Unsigned>
+    typename Enable_If<(static_cast<Unsigned>(-1) > 0), any_row_iterator&>::type
+    operator+=(Unsigned m);
+
     //! Assignment-decrement operator.
     any_row_iterator& operator-=(difference_type m);
 
@@ -262,6 +267,11 @@ private:
     //! Returns the sum of \p *this and \p m.
     any_row_iterator operator+(difference_type m) const;
 
+    //! Returns the sum of \p *this and \p m, for \p m of unsigned type.
+    template <typename Unsigned>
+    typename Enable_If<(static_cast<Unsigned>(-1) > 0), any_row_iterator>::type
+    operator+(Unsigned m) const;
+
     //! Returns the difference of \p *this and \p m.
     any_row_iterator operator-(difference_type m) const;
 
diff --git a/src/OR_Matrix.inlines.hh b/src/OR_Matrix.inlines.hh
index 448bc0b..7a20e71 100644
--- a/src/OR_Matrix.inlines.hh
+++ b/src/OR_Matrix.inlines.hh
@@ -257,6 +257,25 @@ OR_Matrix<T>::any_row_iterator<U>::operator+=(const difference_type m) {
 
 template <typename T>
 template <typename U>
+template <typename Unsigned>
+inline typename
+Enable_If<(static_cast<Unsigned>(-1) > 0),
+            typename OR_Matrix<T>::template any_row_iterator<U>& >::type
+OR_Matrix<T>::any_row_iterator<U>::operator+=(Unsigned m) {
+  dimension_type increment = m + m * m / 2 + m * e;
+  if (e % 2 == 0 && m % 2 != 0)
+    ++increment;
+  e += m;
+  i += increment;
+  value.first += increment;
+#if PPL_OR_MATRIX_EXTRA_DEBUG
+  value.size_ = value.size_ + m - m % 2;
+#endif
+  return *this;
+}
+
+template <typename T>
+template <typename U>
 inline typename OR_Matrix<T>::template any_row_iterator<U>&
 OR_Matrix<T>::any_row_iterator<U>::operator-=(difference_type m) {
   return *this += -m;
@@ -280,6 +299,18 @@ OR_Matrix<T>::any_row_iterator<U>::operator+(difference_type m) const {
 
 template <typename T>
 template <typename U>
+template <typename Unsigned>
+inline typename
+Enable_If<(static_cast<Unsigned>(-1) > 0),
+            typename OR_Matrix<T>::template any_row_iterator<U> >::type
+OR_Matrix<T>::any_row_iterator<U>::operator+(Unsigned m) const {
+  any_row_iterator r = *this;
+  r += m;
+  return r;
+}
+
+template <typename T>
+template <typename U>
 inline typename OR_Matrix<T>::template any_row_iterator<U>
 OR_Matrix<T>::any_row_iterator<U>::operator-(const difference_type m) const {
   any_row_iterator r = *this;




More information about the PPL-devel mailing list