# HG changeset patch # User John W. Eaton # Date 1426782328 14400 # Node ID 40b2c4323c1696c4fd4bb2881741cd7e682483d9 # Parent d20dd211cc890526eeb112b6b6dbc7453bb0b92f 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. diff -r d20dd211cc89 -r 40b2c4323c16 liboctave/array/Array-C.cc --- a/liboctave/array/Array-C.cc Thu Mar 19 07:00:11 2015 -0700 +++ b/liboctave/array/Array-C.cc Thu Mar 19 12:25:28 2015 -0400 @@ -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::compare_fcn_type diff -r d20dd211cc89 -r 40b2c4323c16 liboctave/array/Array-fC.cc --- a/liboctave/array/Array-fC.cc Thu Mar 19 07:00:11 2015 -0700 +++ b/liboctave/array/Array-fC.cc Thu Mar 19 12:25:28 2015 -0400 @@ -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 (M_PI)) ? static_cast (M_PI) - : xarg; - yarg = (yarg == -static_cast (M_PI)) ? static_cast (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 (M_PI)) ? static_cast (M_PI) - : xarg; - yarg = (yarg == -static_cast (M_PI)) ? static_cast (M_PI) - : yarg; - return xarg > yarg; - } - else - return false; + return xisnan (x) ? ! xisnan (y) : x > y; } Array::compare_fcn_type