1#ifndef CLASSIC_FArray2D_HH
2#define CLASSIC_FArray2D_HH
39template<
class T,
int M,
int N>
209template <
class T,
int M,
int N>
215template <
class T,
int M,
int N>
221template<
class T,
int M,
int N>
227template<
class T,
int M,
int N>
234template <
class T,
int M,
int N>
236 if(r >= M ||
c >= N) {
237 throw CLRangeError(
"FArray2D::operator()",
"Index out of range.");
243template <
class T,
int M,
int N>
245 if(r >= M ||
c >= N) {
246 throw CLRangeError(
"FArray2D::operator()",
"Index out of range.");
252template <
class T,
int M,
int N>
258template <
class T,
int M,
int N>
264template <
class T,
int M,
int N>
270template <
class T,
int M,
int N>
276template <
class T,
int M,
int N>
282template <
class T,
int M,
int N>
288template <
class T,
int M,
int N>
294template <
class T,
int M,
int N>
297 throw CLRangeError(
"FArray2D::row_begin()",
"Row index out of range.");
303template <
class T,
int M,
int N>
306 throw CLRangeError(
"FArray2D::row_end()",
"Row index out of range.");
308 return data + N * (r + 1);
312template <
class T,
int M,
int N>
315 throw CLRangeError(
"FArray2D::row_begin()",
"Row index out of range.");
321template <
class T,
int M,
int N>
324 throw CLRangeError(
"FArray2D::row_end()",
"Row index out of range.");
326 return data + N * (r + 1);
330template <
class T,
int M,
int N>
336template <
class T,
int M,
int N>
342template <
class T,
int M,
int N>
345 throw CLRangeError(
"FArray2D::col_begin()",
"Column index out of range.");
351template <
class T,
int M,
int N>
354 throw CLRangeError(
"FArray2D::col_end()",
"Column index out of range.");
360template <
class T,
int M,
int N>
363 throw CLRangeError(
"FArray2D::col_begin()",
"Column index out of range.");
369template <
class T,
int M,
int N>
372 throw CLRangeError(
"FArray2D::col_end()",
"Column index out of range.");
378template <
class T,
int M,
int N>
380 std::copy(col_begin(
c), col_end(
c), toArray.
begin());
384template <
class T,
int M,
int N>
386 std::copy(row_begin(r), row_end(r), toArray.
begin());
390template <
class T,
int M,
int N>
392 std::copy(fromArray.
begin(), fromArray.
end(), col_begin(
c));
396template <
class T,
int M,
int N>
398 std::copy(fromArray.
begin(), fromArray.
end(), row_begin(r));
402template <
class T,
int M,
int N>
404 std::swap_ranges(col_begin(col1), col_end(col1), col_begin(col2));
408template <
class T,
int M,
int N>
410 std::swap_ranges(row_begin(row1), row_end(row1), row_begin(row2));
414template <
class T,
int M,
int N>
417 std::streamsize old_prec = os.precision(12);
418 os.setf(std::ios::scientific, std::ios::floatfield);
420 for(
int i = 0; i < M; ++i) {
421 for(
int j = 0; j < N; ++j) {
422 os << std::setw(20) << v[i][j] <<
" ";
428 os.
setf(std::ios::fixed, std::ios::floatfield);
429 os.precision(old_prec);
std::ostream & operator<<(std::ostream &os, const FArray2D< T, M, N > &v)
PartBunchBase< T, Dim >::ConstIterator end(PartBunchBase< T, Dim > const &bunch)
PartBunchBase< T, Dim >::ConstIterator begin(PartBunchBase< T, Dim > const &bunch)
Inform & endl(Inform &inf)
constexpr double c
The velocity of light in m/s.
A templated representation for one-dimensional arrays.
iterator end()
Get iterator pointing past end of array.
iterator begin()
Get iterator pointing to beginning of array.
A templated representation for 2-dimensional arrays.
T value_type
The value type of the array.
const T * const_iterator
Iterator for constant array.
FArray2D(const FArray2D &)
Copy constructor.
int ncols() const
Get number of columns.
FConstSlice< T, N > const_col_iterator
Iterator for access by columns.
int size() const
Get total size.
iterator end()
Get pointer past end of data.
row_iterator row_end(int r)
Get row iterator.
row_iterator operator[](int r)
Get row iterator.
void getRow(FArray1D< T, N > &toArray, int r) const
Fetch row.
T * row_iterator
Iterator for access by rows.
const_row_iterator row_begin(int r) const
Get row iterator.
const_row_iterator operator[](int r) const
Get row iterator.
const_col_iterator col_end(int c) const
Get column iterator.
const FArray2D< T, M, N > & operator=(const FArray2D< T, M, N > &)
Assignment.
void getColumn(FArray1D< T, M > &toArray, int c) const
Fetch column.
void putColumn(const FArray1D< T, M > &fromArray, int c)
Store column.
col_iterator col_begin(int c)
Get column iterator.
const T * const_row_iterator
Iterator for access by rows.
void swapColumns(int c1, int c2)
Exchange columns.
const_col_iterator col_begin(int c) const
Get column iterator.
const T & operator()(int r, int c) const
Get element.
const_iterator begin() const
Get beginning of data.
int nrows() const
Get number of rows.
row_iterator row_begin(int r)
Get row iterator.
T & operator()(int r, int c)
Get element.
void putRow(const FArray1D< T, N > &fromArray, int r)
Store row.
T * iterator
Iterator for the array.
void swapRows(int r1, int r2)
Exchange rows.
FArray2D(const T &t)
Constructor.
const_iterator end() const
Get pointer past end of data.
const_row_iterator row_end(int r) const
Get row iterator.
FArray2D()
Default constructor.
FSlice< T, N > col_iterator
Iterator for access by columns.
iterator begin()
Get beginning of data.
col_iterator col_end(int c)
Get column iterator.
An iterator permitting to iterate with a stride different from 1.
Constant version of FSlice.
FmtFlags_t setf(FmtFlags_t setbits, FmtFlags_t field)