Mercurial > octave-nkf
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 |