6 #ifndef MYRAMATH_DENSE_MATRIXRANGE_H 7 #define MYRAMATH_DENSE_MATRIXRANGE_H 15 #include <myramath/utility/detail/LIBPUBLIC.h> 24 template<
int Arity,
class Number>
class Expression;
25 template<
class Number>
class MatrixRange;
26 template<
class Number>
class CMatrixRange;
27 template<
class Number>
class VectorRange;
28 template<
class Number>
class CVectorRange;
29 template<
class T>
class Array1;
30 template<
class T>
class Array2;
35 template<
class Number>
class LIBPUBLIC MatrixRange
56 MatrixRange(Number* in_begin,
int in_I,
int in_J,
int in_LD);
67 std::pair<int,int> size()
const;
70 uint64_t n_words()
const;
87 Number& operator() (
int i,
int j)
const;
90 Number& at(
int i,
int j)
const;
107 Pair split_top(
int i)
const;
116 Pair split_bottom(
int i)
const;
136 Pair split_left(
int j)
const;
145 Pair split_right(
int j)
const;
160 template<
class Functor>
void transform(
const Functor& f)
const 162 for (
int j = 0; j < J; ++j)
163 for (
int i = 0; i < I; ++i)
164 *pointer(i,j) = f( *pointer(i,j) );
173 for (
int j = 0; j < J; ++j)
174 for (
int i = 0; i <= j && i < I; ++i)
175 *pointer(i,j) = f( *pointer(i,j) );
177 else if (uplo ==
'L')
179 for (
int j = 0; j < J; ++j)
180 for (
int i = j; i < I; ++i)
181 *pointer(i,j) = f( *pointer(i,j) );
189 int N = I < J ? I : J;
190 for (
int n = 0; n < N; ++n)
191 *pointer(n,n) = f( *pointer(n,n) );
214 void operator *= (Number alpha)
const;
217 void operator /= (Number alpha)
const;
225 Number* pointer(
int i,
int j)
const;
228 void check_size(
const std::pair<int,int>& IJ)
const;
233 template<
class Number>
class LIBPUBLIC CMatrixRange
254 CMatrixRange(
const Number* in_begin,
int in_I,
int in_J,
int in_LD);
257 CMatrixRange(
const Number* in_begin,
int in_I,
int in_J);
265 std::pair<int,int> size()
const;
268 uint64_t n_words()
const;
282 const Number& operator() (
int i,
int j)
const;
285 const Number& at(
int i,
int j)
const;
305 Pair split_top(
int i)
const;
314 Pair split_bottom(
int i)
const;
334 Pair split_left(
int j)
const;
343 Pair split_right(
int j)
const;
351 const Number* pointer(
int i,
int j)
const;
356 {
public:
typedef Number type; };
360 {
public:
typedef Number type; };
395 LIBPUBLIC std::ostream& operator << (std::ostream& out, const CMatrixRange<NumberS>& A);
397 LIBPUBLIC std::ostream& operator << (std::ostream& out, const CMatrixRange<NumberD>& A);
398 LIBPUBLIC std::ostream& operator << (std::ostream& out, const CMatrixRange<NumberC>& A);
399 LIBPUBLIC std::ostream& operator << (std::ostream& out, const CMatrixRange<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
int J
---------— Data members, all public ----------------—
Definition: MatrixRange.h:43
void transform_triangle(const Functor &f, char uplo) const
Overwrites every A(i,j) in the 'U'pper or 'L'ower triangle of this MatrixRange with f(A(i...
Definition: MatrixRange.h:169
Represents a mutable VectorRange.
Definition: axpy.h:21
int I
---------— Data members, all public ----------------—
Definition: MatrixRange.h:42
int LD
---------— Data members, all public ----------------—
Definition: MatrixRange.h:44
Represents a const MatrixRange.
Definition: bothcat.h:22
Abstraction layer, serializable objects write themselves to these.
Definition: Streams.h:39
Various utility functions/classes related to scalar Number types.
int J
---------— Data members, all public ----------------—
Definition: MatrixRange.h:241
Represents a mutable MatrixRange.
Definition: conjugate.h:26
int I
---------— Data members, all public ----------------—
Definition: MatrixRange.h:240
void transform_diagonal(const Functor &f) const
Overwrites every A(n,n) on the diagonal of this MatrixRange with f(A(n,n)).
Definition: MatrixRange.h:187
int LD
---------— Data members, all public ----------------—
Definition: MatrixRange.h:242
Represents a const VectorRange.
Definition: axpy.h:20
Container of values, allows random (i) access.
Definition: Array1.h:32
Given an index (i,j,etc), returns a value.
Definition: arithmetic.h:19
Represents a const intRange.
Definition: intRange.h:142
void transform(const Functor &f) const
Overwrites every A(i,j) in this MatrixRange with f(A(i,j)).
Definition: MatrixRange.h:160