31 # include <tpl_dynArray.H> 57 const T & read_array_entry(
const size_t i)
const noexcept
59 T * entry_ptr = array_ptr->
test(i);
61 return entry_ptr ==
nullptr ? Zero : *entry_ptr;
64 T & write_array_entry(
const size_t i,
const T & data)
66 T & ref = array_ptr->
touch(i) = data;
71 size_t get_index(
const size_t i,
const size_t j)
const noexcept
89 std::swap(Zero, mat.Zero);
90 std::swap(array_ptr, mat.array_ptr);
96 if (array_ptr !=
nullptr)
102 const size_t N = n*m;
123 DynMatrix(
const size_t __n,
const size_t __m,
const T & zero = T())
124 : n(__n), m(__m), array_ptr(nullptr), Zero(zero)
139 *array_ptr = *mat.array_ptr;
171 const size_t N = n*m;
172 for (
int i = 0; i < N; ++i)
173 if (read_array_entry(i) != mat.read_array_entry(i))
180 const size_t &
rows() const noexcept {
return n; }
183 const size_t &
cols() const noexcept {
return m; }
186 const T &
read(
const size_t i,
const size_t j)
const 188 assert(i < n and j < m);
190 return read_array_entry(get_index(i, j));
201 T &
write(
const size_t i,
const size_t j,
const T & data)
203 assert(i < n and j < m);
205 return write_array_entry(get_index(i, j), data);
209 T &
access(
const size_t i,
const size_t j)
const 211 return array_ptr->
access(get_index(i, j));
225 template <
class Operation>
228 return array_ptr->
traverse(operation);
232 template <
class Operation>
235 return array_ptr->
traverse(operation);
239 template <
class Operation>
242 return traverse<Operation>(operation);
246 template <
class Operation>
249 return traverse<Operation>(operation);
255 #endif // TPL_DYNMAT_H
void reserve(const size_t l, const size_t r)
Definition: tpl_dynArray.H:998
bool operator==(const DynMatrix< T > &mat) const
Return true if this is equal to mat. It is based on T::operator ==
Definition: tpl_dynMat.H:169
bool traverse(Operation &operation) const
Definition: tpl_dynMat.H:226
const size_t & rows() const noexcept
Return the number of rows.
Definition: tpl_dynMat.H:180
T & access(const size_t i) const noexcept
Definition: tpl_dynArray.H:874
T & touch(const size_t i)
Definition: tpl_dynArray.H:958
DynMatrix(DynMatrix< T > &&mat)
Move constructor.
Definition: tpl_dynMat.H:143
void copy_array(const DynArray< T > &src_array)
Definition: tpl_dynArray.H:760
bool traverse(Operation &&operation) const
Definition: tpl_dynMat.H:240
DynMatrix(const DynMatrix< T > &mat)
Copy constructor.
Definition: tpl_dynMat.H:136
static void compute_sizes(const size_t n, size_t &d, size_t &s, size_t &b) noexcept
Definition: tpl_dynArray.H:224
void set_default_initial_value(const T &value)
Set the initial or zero value to value
Definition: tpl_dynMat.H:79
Definition: tpl_dynMat.H:46
T & operator()(const size_t i, const size_t j) const
Definition: tpl_dynMat.H:215
T & access(const size_t i, const size_t j) const
Fast access to i-th row j-th column.
Definition: tpl_dynMat.H:209
void swap(DynMatrix &mat)
Swap mat with this
Definition: tpl_dynMat.H:85
DynMatrix< T > & operator=(const DynMatrix< T > &mat)
Copy assign.
Definition: tpl_dynMat.H:149
DynMatrix(const size_t __n, const size_t __m, const T &zero=T())
Definition: tpl_dynMat.H:123
bool traverse(Operation &operation) const noexcept(noexcept(operation))
Definition: tpl_dynArray.H:1379
T * test(const size_t i) const noexcept
Definition: tpl_dynArray.H:927
bool traverse(Operation &&operation)
Definition: tpl_dynMat.H:247
const T & read(const size_t i, const size_t j) const
Read the entry at the row i and column j
Definition: tpl_dynMat.H:186
void set_dimension(const size_t __n, const size_t __m)
Change the matrix dimensions.
Definition: tpl_dynMat.H:94
Definition: tpl_dynArray.H:159
T & write(const size_t i, const size_t j, const T &data)
Definition: tpl_dynMat.H:201
void set_default_initial_value(const T &value) noexcept
Definition: tpl_dynArray.H:659
void allocate()
Definition: tpl_dynMat.H:111
const size_t & cols() const noexcept
Retorna la cantidad de columnas de la matriz.
Definition: tpl_dynMat.H:183
bool traverse(Operation &operation)
Definition: tpl_dynMat.H:233