changeset 20175:40b2c4323c16

avoid some code duplication in complex comparison functions (bug #44206) * Array-C.cc (nan_ascending_compare): Don't duplicate operator < here. (nan_descending_compare): Likewise, for operator >. * Array-fC.cc (nan_ascending_compare): Likewise. (nan_descending_compare): Likewise.
author John W. Eaton <jwe@octave.org>
date Thu, 19 Mar 2015 12:25:28 -0400
parents d20dd211cc89
children 3cc0734283dc
files liboctave/array/Array-C.cc liboctave/array/Array-fC.cc
diffstat 2 files changed, 4 insertions(+), 78 deletions(-) [+]
line wrap: on
line diff
--- a/liboctave/array/Array-C.cc
+++ b/liboctave/array/Array-C.cc
@@ -46,49 +46,13 @@
 static bool
 nan_ascending_compare (const Complex& x, const Complex& y)
 {
-  if (xisnan (y))
-    return (! xisnan (x));
-
-  double xabs = std::abs (x);
-  double yabs = std::abs (y);
-
-  if (xabs < yabs)
-    return true;
-  else if (xabs == yabs)
-    {
-      double xarg = arg (x);
-      double yarg = arg (y);
-      xarg = (xarg == -M_PI) ? M_PI : xarg;
-      yarg = (yarg == -M_PI) ? M_PI : yarg;
-
-      return xarg < yarg;
-    }
-  else
-    return false;
+  return xisnan (y) ? ! xisnan (x) : x < y;
 }
 
 static bool
 nan_descending_compare (const Complex& x, const Complex& y)
 {
-  if (xisnan (x))
-    return (! xisnan (y));
-
-  double xabs = std::abs (x);
-  double yabs = std::abs (y);
-
-  if (xabs > yabs)
-    return true;
-  else if (xabs == yabs)
-    {
-      double xarg = arg (x);
-      double yarg = arg (y);
-      xarg = (xarg == -M_PI) ? M_PI : xarg;
-      yarg = (yarg == -M_PI) ? M_PI : yarg;
-
-      return xarg > yarg;
-    }
-  else
-    return false;
+  return xisnan (x) ? ! xisnan (y) : x > y;
 }
 
 Array<Complex>::compare_fcn_type
--- a/liboctave/array/Array-fC.cc
+++ b/liboctave/array/Array-fC.cc
@@ -46,51 +46,13 @@
 static bool
 nan_ascending_compare (const FloatComplex& x, const FloatComplex& y)
 {
-  if (xisnan (y))
-    return (! xisnan (x));
-
-  float xabs = std::abs (x);
-  float yabs = std::abs (y);
-
-  if (xabs < yabs)
-    return true;
-  else if (xabs == yabs)
-    {
-      float xarg = arg (x);
-      float yarg = arg (y);
-      xarg = (xarg == -static_cast<float> (M_PI)) ? static_cast<float> (M_PI)
-                                                  : xarg;
-      yarg = (yarg == -static_cast<float> (M_PI)) ? static_cast<float> (M_PI)
-                                                  : yarg;
-      return xarg < yarg;
-    }
-  else
-    return false;
+  return xisnan (y) ? ! xisnan (x) : x < y;
 }
 
 static bool
 nan_descending_compare (const FloatComplex& x, const FloatComplex& y)
 {
-  if (xisnan (x))
-    return (! xisnan (y));
-
-  float xabs = std::abs (x);
-  float yabs = std::abs (y);
-
-  if (xabs > yabs)
-    return true;
-  else if (xabs == yabs)
-    {
-      float xarg = arg (x);
-      float yarg = arg (y);
-      xarg = (xarg == -static_cast<float> (M_PI)) ? static_cast<float> (M_PI)
-                                                  : xarg;
-      yarg = (yarg == -static_cast<float> (M_PI)) ? static_cast<float> (M_PI)
-                                                  : yarg;
-      return xarg > yarg;
-    }
-  else
-    return false;
+  return xisnan (x) ? ! xisnan (y) : x > y;
 }
 
 Array<FloatComplex>::compare_fcn_type