comparison liboctave/Sparse-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 ada435261879
comparison
equal deleted inserted replaced
7432:3c999b2b5de8 7433:402168152bb9
26 #endif 26 #endif
27 27
28 // Instantiate Sparse matrix of complex values. 28 // Instantiate Sparse matrix of complex values.
29 29
30 #include "oct-cmplx.h" 30 #include "oct-cmplx.h"
31 31 #include "lo-mappers.h"
32 #include "lo-ieee.h"
32 #include "Sparse.h" 33 #include "Sparse.h"
33 #include "Sparse.cc" 34 #include "Sparse.cc"
35
36 #include "oct-sort.cc"
37
38 static double
39 xabs (const Complex& x)
40 {
41 return (xisinf (x.real ()) || xisinf (x.imag ())) ? octave_Inf : abs (x);
42 }
43
44 static bool
45 operator < (const Complex& a, const Complex& b)
46 {
47 return (xisnan (b) || (xabs (a) < xabs (b))
48 || ((xabs (a) == xabs (b)) && (arg (a) < arg (b))));
49 }
50
51 static bool
52 operator > (const Complex& a, const Complex& b)
53 {
54 return (xisnan (a) || (xabs (a) > xabs (b))
55 || ((xabs (a) == xabs (b)) && (arg (a) > arg (b))));
56 }
57
58 template <>
59 bool
60 sparse_ascending_compare (Complex a, Complex b)
61 {
62 return (xisnan (b) || (xabs (a) < xabs (b))
63 || ((xabs (a) == xabs (b)) && (arg (a) < arg (b))));
64 }
65
66 template <>
67 bool
68 sparse_ascending_compare (vec_index<Complex> *a, vec_index<Complex> *b)
69 {
70 return (xisnan (b->vec)
71 || (xabs (a->vec) < xabs (b->vec))
72 || ((xabs (a->vec) == xabs (b->vec))
73 && (arg (a->vec) < arg (b->vec))));
74 }
75
76 template <>
77 bool
78 sparse_descending_compare (Complex a, Complex b)
79 {
80 return (xisnan (a) || (xabs (a) > xabs (b))
81 || ((xabs (a) == xabs (b)) && (arg (a) > arg (b))));
82 }
83
84 template <>
85 bool
86 sparse_descending_compare (vec_index<Complex> *a, vec_index<Complex> *b)
87 {
88 return (xisnan (a->vec)
89 || (xabs (a->vec) > xabs (b->vec))
90 || ((xabs (a->vec) == xabs (b->vec))
91 && (arg (a->vec) > arg (b->vec))));
92 }
93
94 INSTANTIATE_SPARSE_SORT (Complex);
34 95
35 INSTANTIATE_SPARSE_AND_ASSIGN (Complex, OCTAVE_API); 96 INSTANTIATE_SPARSE_AND_ASSIGN (Complex, OCTAVE_API);
36 97
37 INSTANTIATE_SPARSE_ASSIGN (Complex, double, OCTAVE_API); 98 INSTANTIATE_SPARSE_ASSIGN (Complex, double, OCTAVE_API);
38 99