6 #ifndef MYRAMATH_SPARSE_SPARSEMATRIXBUILDER_H 7 #define MYRAMATH_SPARSE_SPARSEMATRIXBUILDER_H 14 #include <myramath/utility/detail/LIBPUBLIC.h> 27 template<
class Number>
class SparseMatrix;
28 template<
class Number>
class CSparseMatrixRange;
29 template<
class Number>
class Matrix;
32 template<
class Number>
class LIBPUBLIC SparseMatrixBuilder
37 typedef std::map<int,Number> Column;
38 typedef std::vector<Column> Columns;
39 typedef typename Column::const_iterator Iterator;
44 SparseMatrixBuilder();
47 explicit SparseMatrixBuilder(
int in_I,
int in_J);
48 explicit SparseMatrixBuilder(std::pair<int,int> in_IJ);
51 SparseMatrixBuilder(
const SparseMatrixBuilder& that);
54 void swap(SparseMatrixBuilder& that);
56 #ifdef MYRAMATH_ENABLE_CPP11 57 SparseMatrixBuilder(SparseMatrixBuilder&& that);
62 SparseMatrixBuilder& operator = (SparseMatrixBuilder that);
65 SparseMatrixBuilder& operator = (
const CSparseMatrixRange<Number>& that);
68 explicit SparseMatrixBuilder(
const CSparseMatrixRange<Number>& that);
71 explicit SparseMatrixBuilder(InputStream& in);
74 void write(OutputStream& out)
const;
77 ~SparseMatrixBuilder();
82 Iterator begin(
int j)
const;
83 Iterator end(
int j)
const;
88 const Number& operator () (
int i,
int j)
const;
91 Number& operator () (
int i,
int j);
94 void erase(
int i,
int j);
97 void operator += (
const SparseMatrixBuilder& that);
98 void operator += (
const CSparseMatrixRange<Number>& that);
101 void operator -= (
const SparseMatrixBuilder& that);
102 void operator -= (
const CSparseMatrixRange<Number>& that);
105 void operator *= (Number alpha);
108 void operator /= (Number alpha);
113 bool test(
int i,
int j)
const;
116 PatternBuilder pattern()
const;
119 std::vector<int> pattern(
int j)
const;
122 std::pair<int,int> size()
const;
125 int n_nonzeros(
int j)
const;
126 int n_nonzeros()
const;
131 static SparseMatrixBuilder<Number> identity(
int IJ);
134 static SparseMatrixBuilder<Number>
random(
int I,
int J,
int N);
137 static SparseMatrixBuilder<Number>
random(
const PatternBuilder& P);
140 SparseMatrix<Number> make_SparseMatrix()
const;
143 Matrix<Number> make_Matrix()
const;
148 void check_size(
const std::pair<int,int>& IJ)
const;
159 template<
class Number>
class ReflectNumber
160 {
public:
typedef Number type; };
163 LIBPUBLIC SparseMatrixBuilder<NumberS> operator + (
const SparseMatrixBuilder<NumberS>& A,
const SparseMatrixBuilder<NumberS>& B);
164 LIBPUBLIC SparseMatrixBuilder<NumberD> operator + (
const SparseMatrixBuilder<NumberD>& A,
const SparseMatrixBuilder<NumberD>& B);
165 LIBPUBLIC SparseMatrixBuilder<NumberC> operator + (
const SparseMatrixBuilder<NumberC>& A,
const SparseMatrixBuilder<NumberC>& B);
166 LIBPUBLIC SparseMatrixBuilder<NumberZ> operator + (
const SparseMatrixBuilder<NumberZ>& A,
const SparseMatrixBuilder<NumberZ>& B);
169 LIBPUBLIC SparseMatrixBuilder<NumberS> operator - (
const SparseMatrixBuilder<NumberS>& A,
const SparseMatrixBuilder<NumberS>& B);
170 LIBPUBLIC SparseMatrixBuilder<NumberD> operator - (
const SparseMatrixBuilder<NumberD>& A,
const SparseMatrixBuilder<NumberD>& B);
171 LIBPUBLIC SparseMatrixBuilder<NumberC> operator - (
const SparseMatrixBuilder<NumberC>& A,
const SparseMatrixBuilder<NumberC>& B);
172 LIBPUBLIC SparseMatrixBuilder<NumberZ> operator - (
const SparseMatrixBuilder<NumberZ>& A,
const SparseMatrixBuilder<NumberZ>& B);
175 LIBPUBLIC SparseMatrixBuilder<NumberS> operator * (
const SparseMatrixBuilder<NumberS>& A, NumberS alpha);
176 LIBPUBLIC SparseMatrixBuilder<NumberD> operator * (
const SparseMatrixBuilder<NumberD>& A, NumberD alpha);
177 LIBPUBLIC SparseMatrixBuilder<NumberC> operator * (
const SparseMatrixBuilder<NumberC>& A, NumberC alpha);
178 LIBPUBLIC SparseMatrixBuilder<NumberZ> operator * (
const SparseMatrixBuilder<NumberZ>& A, NumberZ alpha);
181 LIBPUBLIC SparseMatrixBuilder<NumberS> operator * (NumberS alpha,
const SparseMatrixBuilder<NumberS>& A);
182 LIBPUBLIC SparseMatrixBuilder<NumberD> operator * (NumberD alpha,
const SparseMatrixBuilder<NumberD>& A);
183 LIBPUBLIC SparseMatrixBuilder<NumberC> operator * (NumberC alpha,
const SparseMatrixBuilder<NumberC>& A);
184 LIBPUBLIC SparseMatrixBuilder<NumberZ> operator * (NumberZ alpha,
const SparseMatrixBuilder<NumberZ>& A);
187 LIBPUBLIC std::ostream& operator << (std::ostream& out, const SparseMatrixBuilder<NumberS>& A);
188 LIBPUBLIC std::ostream& operator << (std::ostream& out, const SparseMatrixBuilder<NumberD>& A);
189 LIBPUBLIC std::ostream& operator << (std::ostream& out, const SparseMatrixBuilder<NumberC>& A);
190 LIBPUBLIC std::ostream& operator << (std::ostream& out, const SparseMatrixBuilder<NumberZ>& A);
Number random()
Generate random real/complex Numbers, uniformly distributed over [-1,1].
Various utility functions/classes related to scalar Number types.