Mercurial > octave-nkf
diff liboctave/Array-C.cc @ 7433:402168152bb9
[project @ 2008-01-31 18:59:09 by dbateman]
author | dbateman |
---|---|
date | Thu, 31 Jan 2008 18:59:11 +0000 |
parents | a1dbe9d80eee |
children | ff9c2bb7abc7 |
line wrap: on
line diff
--- a/liboctave/Array-C.cc Wed Jan 30 09:11:58 2008 +0000 +++ b/liboctave/Array-C.cc Thu Jan 31 18:59:11 2008 +0000 @@ -31,6 +31,65 @@ #include "Array.h" #include "Array.cc" +#include "oct-sort.cc" + +static double +xabs (const Complex& x) +{ + return (xisinf (x.real ()) || xisinf (x.imag ())) ? octave_Inf : abs (x); +} + +static bool +operator < (const Complex& a, const Complex& b) +{ + return (xisnan (b) || (xabs (a) < xabs (b)) + || ((xabs (a) == xabs (b)) && (arg (a) < arg (b)))); +} + +static bool +operator > (const Complex& a, const Complex& b) +{ + return (xisnan (a) || (xabs (a) > xabs (b)) + || ((xabs (a) == xabs (b)) && (arg (a) > arg (b)))); +} + +template <> +bool +ascending_compare (Complex a, Complex b) +{ + return (xisnan (b) || (xabs (a) < xabs (b)) + || ((xabs (a) == xabs (b)) && (arg (a) < arg (b)))); +} + +template <> +bool +ascending_compare (vec_index<Complex> *a, vec_index<Complex> *b) +{ + return (xisnan (b->vec) + || (xabs (a->vec) < xabs (b->vec)) + || ((xabs (a->vec) == xabs (b->vec)) + && (arg (a->vec) < arg (b->vec)))); +} + +template <> +bool +descending_compare (Complex a, Complex b) +{ + return (xisnan (a) || (xabs (a) > xabs (b)) + || ((xabs (a) == xabs (b)) && (arg (a) > arg (b)))); +} + +template <> +bool +descending_compare (vec_index<Complex> *a, vec_index<Complex> *b) +{ + return (xisnan (a->vec) + || (xabs (a->vec) > xabs (b->vec)) + || ((xabs (a->vec) == xabs (b->vec)) + && (arg (a->vec) > arg (b->vec)))); +} + +INSTANTIATE_ARRAY_SORT (Complex); INSTANTIATE_ARRAY_AND_ASSIGN (Complex, OCTAVE_API);