diff liboctave/dNDArray.cc @ 11010:9478b216752e

simplify more array tests
author Jaroslav Hajek <highegg@gmail.com>
date Wed, 22 Sep 2010 07:06:25 +0200
parents 3622db30ff05
children 7c573eb981eb
line wrap: on
line diff
--- a/liboctave/dNDArray.cc
+++ b/liboctave/dNDArray.cc
@@ -547,18 +547,8 @@
 bool
 NDArray::any_element_is_negative (bool neg_zero) const
 {
-  octave_idx_type nel = nelem ();
-
-  if (neg_zero)
-    {
-      for (octave_idx_type i = 0; i < nel; i++)
-        if (lo_ieee_signbit (elem (i)))
-          return true;
-    }
-  else
-    return do_mx_check<double> (*this, mx_inline_any_negative);
-
-  return false;
+  return (neg_zero ? test_all (xnegative_sign)
+          : do_mx_check<double> (*this, mx_inline_any_negative));
 }
 
 bool
@@ -576,45 +566,19 @@
 bool
 NDArray::any_element_not_one_or_zero (void) const
 {
-  octave_idx_type nel = nelem ();
-
-  for (octave_idx_type i = 0; i < nel; i++)
-    {
-      double val = elem (i);
-      if (val != 0 && val != 1)
-        return true;
-    }
-
-  return false;
+  return ! test_all (xis_one_or_zero);
 }
 
 bool
 NDArray::all_elements_are_zero (void) const
 {
-  octave_idx_type nel = nelem ();
-
-  for (octave_idx_type i = 0; i < nel; i++)
-    if (elem (i) != 0)
-      return false;
-
-  return true;
+  return test_all (xis_zero);
 }
 
 bool
 NDArray::all_elements_are_int_or_inf_or_nan (void) const
 {
-  octave_idx_type nel = nelem ();
-
-  for (octave_idx_type i = 0; i < nel; i++)
-    {
-      double val = elem (i);
-      if (xisnan (val) || D_NINT (val) == val)
-        continue;
-      else
-        return false;
-    }
-
-  return true;
+  return test_all (xis_int_or_inf_or_nan);
 }
 
 // Return nonzero if any element of M is not an integer.  Also extract
@@ -643,7 +607,7 @@
       if (val < min_val)
         min_val = val;
 
-      if (D_NINT (val) != val)
+      if (! xisinteger (val))
         return false;
     }
 
@@ -653,34 +617,13 @@
 bool
 NDArray::all_integers (void) const
 {
-  octave_idx_type nel = nelem ();
-
-  for (octave_idx_type i = 0; i < nel; i++)
-    {
-      double val = elem (i);
-
-      if (D_NINT (val) != val)
-        return false;
-    }
-
-  return true;
+  return test_all (xisinteger);
 }
 
 bool
 NDArray::too_large_for_float (void) const
 {
-  octave_idx_type nel = nelem ();
-
-  for (octave_idx_type i = 0; i < nel; i++)
-    {
-      double val = elem (i);
-
-      if (! (xisnan (val) || xisinf (val))
-          && fabs (val) > FLT_MAX)
-        return true;
-    }
-
-  return false;
+  return test_all (xtoo_large_for_float);
 }
 
 // FIXME -- this is not quite the right thing.