6 #ifndef MYRAMATH_SPARSE_SPARSEMATRIXRANGE_H 7 #define MYRAMATH_SPARSE_SPARSEMATRIXRANGE_H 14 #include <myramath/utility/detail/LIBPUBLIC.h> 24 template<
int Arity,
class Number>
class Expression;
26 template<
class Number>
class Matrix;
27 template<
class Number>
class MatrixRange;
29 template<
class Number>
class SparseMatrix;
30 template<
class Number>
class CSparseMatrixRange;
31 template<
class Number>
class SparseMatrixRange;
34 template<
class T>
class Array1;
35 template<
class T>
class Array2;
65 SparseMatrixRange(
const int* in_Ao,
const int* in_Ai, Number* in_Av,
int I,
int J);
73 std::pair<int,int> size()
const;
76 int n_nonzeros()
const;
79 int n_nonzeros(
int j)
const;
82 bool test(
int i,
int j)
const;
88 std::vector<int> pattern(
int j)
const;
120 Number* pointer(
int i,
int j)
const;
123 Number& operator() (
int i,
int j)
const;
126 Number& at(
int i,
int j)
const;
152 Pair split_top(
int i)
const;
161 Pair split_bottom(
int i)
const;
181 Pair split_left(
int j)
const;
190 Pair split_right(
int j)
const;
196 template<
class Functor>
void transform(
const Functor& f)
const 199 Iterator b = this->begin();
200 Iterator e = this->end();
201 for (Iterator aij = b; aij != e; ++aij)
202 aij.value() = f(aij.value());
210 Iterator b = this->begin();
211 Iterator e = this->end();
214 for (Iterator aij = b; aij != e; ++aij)
215 if (aij.i() <= aij.j())
216 aij.value() = f(aij.value());
218 else if (uplo ==
'L')
220 for (Iterator aij = b; aij != e; ++aij)
221 if (aij.i() >= aij.j())
222 aij.value() = f(aij.value());
232 int N = II < JJ ? II : JJ;
233 for (
int n = 0; n < N; ++n)
235 Number* p = this->pointer(n,n);
242 void operator *= (Number alpha)
const;
245 void operator /= (Number alpha)
const;
274 {
public:
typedef Number type; };
277 template<
class Number>
class LIBPUBLIC SparseMatrixIterator
292 Number& value()
const;
301 void j_initialize(
int jj);
304 int i_initialize(
int ii);
320 template<
class Number>
class LIBPUBLIC CSparseMatrixRange
341 CSparseMatrixRange();
344 CSparseMatrixRange(
const int* in_Ao,
const int* in_Ai,
const Number* in_Av,
int I,
int J);
352 std::pair<int,int> size()
const;
355 int n_nonzeros()
const;
358 int n_nonzeros(
int j)
const;
361 bool test(
int i,
int j)
const;
367 std::vector<int> pattern(
int j)
const;
396 const Number* pointer(
int i,
int j)
const;
399 const Number& operator() (
int i,
int j)
const;
402 const Number& at(
int i,
int j)
const;
428 Pair split_top(
int i)
const;
437 Pair split_bottom(
int i)
const;
457 Pair split_left(
int j)
const;
466 Pair split_right(
int j)
const;
494 {
public:
typedef Number type; };
497 template<
class Number>
class LIBPUBLIC CSparseMatrixIterator
512 const Number& value()
const;
521 void j_initialize(
int jj);
524 int i_initialize(
int ii);
535 friend class CSparseMatrixRange<Number>;
540 LIBPUBLIC std::ostream& operator << (std::ostream& out, const CSparseMatrixRange<NumberS>& A);
542 LIBPUBLIC std::ostream& operator << (std::ostream& out, const CSparseMatrixRange<NumberD>& A);
543 LIBPUBLIC std::ostream& operator << (std::ostream& out, const CSparseMatrixRange<NumberC>& A);
544 LIBPUBLIC std::ostream& operator << (std::ostream& out, const CSparseMatrixRange<NumberZ>& A);
Container of values, allows random (i,j) access.
Definition: Array2.h:30
Reflects Number trait for a Container, containers of Numbers (Matrix's, Vector's, etc) should special...
Definition: Number.h:55
Represents a mutable SparseMatrixRange.
Definition: conjugate.h:21
const int * Ao
---------— Data members, all public ----------------—
Definition: SparseMatrixRange.h:46
const int * Ai
---------— Data members, all public ----------------—
Definition: SparseMatrixRange.h:47
void transform_triangle(const Functor &f, char uplo) const
Overwrites every A(i,j) in the 'U'pper or 'L'ower triangle of this SparseMatrixRange with f(A(i...
Definition: SparseMatrixRange.h:207
Tabulates an IxJ matrix. Allows random access, has column major layout to be compatible with BLAS/LAP...
Definition: bdsqr.h:20
Number * Av
---------— Data members, all public ----------------—
Definition: SparseMatrixRange.h:48
An iterator over a SparseMatrixRange.
Definition: SparseMatrixRange.h:33
void transform(const Functor &f) const
Overwrites every A(i,j) in this SparseMatrixRange with f(A(i,j)).
Definition: SparseMatrixRange.h:196
Represents an immutable view of a Pattern.
Definition: PatternRange.h:31
Abstraction layer, serializable objects write themselves to these.
Definition: Streams.h:39
Various utility functions/classes related to scalar Number types.
Represents a mutable MatrixRange.
Definition: conjugate.h:26
const int * Ai
---------— Data members, all public ----------------—
Definition: SparseMatrixRange.h:328
Represents a const SparseMatrixRange.
Definition: bothcat.h:24
const int * Ao
---------— Data members, all public ----------------—
Definition: SparseMatrixRange.h:327
int I1
---------— Data members, all public ----------------—
Definition: SparseMatrixRange.h:332
int J1
---------— Data members, all public ----------------—
Definition: SparseMatrixRange.h:52
bool sliced
---------— Data members, all public ----------------—
Definition: SparseMatrixRange.h:53
const Number * Av
---------— Data members, all public ----------------—
Definition: SparseMatrixRange.h:329
Container of values, allows random (i) access.
Definition: Array1.h:32
bool sliced
---------— Data members, all public ----------------—
Definition: SparseMatrixRange.h:334
An iterator over a CSparseMatrixRange.
Definition: SparseMatrixRange.h:32
void transform_diagonal(const Functor &f) const
Overwrites every A(n,n) on the diagonal of this SparseMatrixRange with f(A(n,n)). ...
Definition: SparseMatrixRange.h:228
Stores an IxJ matrix A in compressed sparse column format.
Definition: bothcat.h:23
int I1
---------— Data members, all public ----------------—
Definition: SparseMatrixRange.h:51
int J1
---------— Data members, all public ----------------—
Definition: SparseMatrixRange.h:333
Represents a const intRange.
Definition: intRange.h:142