changeset 23422:206a7eb1561b

Use more std:: routines in liboctave/array header files. * MDiagArray2.h (nnz): Use std::count_if instead of hand-rolled for loop. * dim-vector.h (all_zero): Use std::all_of instead of for loop. * dim-vector.h (any_zero): Use std::any_of instead of for loop. * dim-vector.h (any_neg): Use std::any_of instead of for loop. * dim-vector.h (operator ==): Use std::equal instead of for loop.
author Rik <rik@octave.org>
date Fri, 21 Apr 2017 20:26:33 -0700
parents 0bfdfd5870d7
children 50fc8edb007b
files liboctave/array/MDiagArray2.h liboctave/array/dim-vector.h
diffstat 2 files changed, 12 insertions(+), 56 deletions(-) [+]
line wrap: on
line diff
--- a/liboctave/array/MDiagArray2.h	Fri Apr 21 11:14:06 2017 -0700
+++ b/liboctave/array/MDiagArray2.h	Fri Apr 21 20:26:33 2017 -0700
@@ -88,19 +88,14 @@
 
   octave_idx_type nnz (void) const
   {
-    octave_idx_type retval = 0;
-
     const T *d = this->data ();
 
     octave_idx_type nel = this->length ();
 
-    for (octave_idx_type i = 0; i < nel; i++)
-      {
-        if (d[i] != T ())
-          retval++;
-      }
+    const T zero = T ();
 
-    return retval;
+    return std::count_if (d, d + nel,
+                          [zero] (T elem) { return elem != zero; });
   }
 
   MArray<T> diag (octave_idx_type k = 0) const
--- a/liboctave/array/dim-vector.h	Fri Apr 21 11:14:06 2017 -0700
+++ b/liboctave/array/dim-vector.h	Fri Apr 21 20:26:33 2017 -0700
@@ -336,18 +336,8 @@
 
   bool all_zero (void) const
   {
-    bool retval = true;
-
-    for (int i = 0; i < ndims (); i++)
-      {
-        if (xelem (i) != 0)
-          {
-            retval = false;
-            break;
-          }
-      }
-
-    return retval;
+    return std::all_of (rep, rep + ndims (),
+                        [] (octave_idx_type dim) { return dim == 0; });
   }
 
   bool empty_2d (void) const
@@ -362,18 +352,8 @@
 
   bool any_zero (void) const
   {
-    bool retval = false;
-
-    for (int i = 0; i < ndims (); i++)
-      {
-        if (xelem (i) == 0)
-          {
-            retval = true;
-            break;
-          }
-      }
-
-    return retval;
+    return std::any_of (rep, rep + ndims (),
+                        [] (octave_idx_type dim) { return dim == 0; });
   }
 
   int num_ones (void) const;
@@ -416,14 +396,8 @@
 
   bool any_neg (void) const
   {
-    int n_dims = ndims ();
-    int i;
-
-    for (i = 0; i < n_dims; i++)
-      if (xelem (i) < 0)
-        break;
-
-    return i < n_dims;
+    return std::any_of (rep, rep + ndims (),
+                        [] (octave_idx_type dim) { return dim < 0; });
   }
 
   dim_vector squeeze (void) const;
@@ -561,7 +535,7 @@
 
     octave_idx_type k = 1;
     for (int i = 0; i < nd; i++)
-      retval.rep[i] = k *= rep[i];
+      retval.rep[i] = (k *= rep[i]);
 
     return retval;
   }
@@ -589,26 +563,13 @@
   if (a.rep == b.rep)
     return true;
 
-  bool retval = true;
-
   int a_len = a.ndims ();
   int b_len = b.ndims ();
 
   if (a_len != b_len)
-    retval = false;
-  else
-    {
-      for (int i = 0; i < a_len; i++)
-        {
-          if (a(i) != b(i))
-            {
-              retval = false;
-              break;
-            }
-        }
-    }
+    return false;
 
-  return retval;
+  return std::equal (a.rep, a.rep + a_len, b.rep);
 }
 
 inline bool