20#ifndef OPM_WINDOWED_ARRAY_HPP
21#define OPM_WINDOWED_ARRAY_HPP
30#include <boost/range/iterator_range.hpp>
37namespace Opm {
namespace RestartIO {
namespace Helpers {
54 typename std::vector<T>::iterator>;
58 typename std::vector<T>::const_iterator>;
60 using Idx =
typename std::vector<T>::size_type;
76 const T initial = T{})
77 : x_ (n.value * sz.value, initial)
78 , windowSize_(sz.value)
81 throw std::invalid_argument {
82 "Zero-sized windows are not permitted"
87 WindowedArray(
const WindowedArray& rhs) =
default;
88 WindowedArray(WindowedArray&& rhs) =
default;
89 WindowedArray& operator=(
const WindowedArray& rhs) =
delete;
90 WindowedArray& operator=(WindowedArray&& rhs) =
default;
95 return this->x_.size() / this->windowSize_;
101 return this->windowSize_;
111 "Window ID Out of Bounds");
113 auto b = std::begin(this->x_) + window*this->windowSize_;
114 auto e = b + this->windowSize_;
126 "Window ID Out of Bounds");
128 auto b = std::begin(this->x_) + window*this->windowSize_;
129 auto e = b + this->windowSize_;
136 const std::vector<T>&
data()
const
146 return std::move(this->x_);
167 template <
typename T>
177 using Idx =
typename WindowedArray<T>::Idx;
194 const WindowSize& sz,
195 const T initial = T{})
196 : data_ (NumWindows{ nRows.value * nCols.value }, sz, initial)
197 , numCols_(nCols.value)
199 if (nCols.value == 0) {
200 throw std::invalid_argument {
201 "Zero-columned windowed matrices are not permitted"
209 return this->numCols_;
215 return this->data_.numWindows() / this->
numCols();
221 return this->data_.windowSize();
235 return this->data_[ this->i(row, col) ];
249 return this->data_[ this->i(row, col) ];
257 return this->data_.data();
264 ->
decltype(std::declval<WindowedArray<T>>()
267 return this->data_.getDataDestructively();
276 Idx i(
const Idx row,
const Idx col)
const
278 return row*this->
numCols() + col;
Provide read-only and read/write access to constantly sized portions/windows of a linearised buffer w...
Definition WindowedArray.hpp:50
std::vector< T > getDataDestructively()
Extract full, linearised data items for all windows.
Definition WindowedArray.hpp:144
Idx numWindows() const
Retrieve number of windows allocated for this array.
Definition WindowedArray.hpp:93
Idx windowSize() const
Retrieve number of data items per windows.
Definition WindowedArray.hpp:99
boost::iterator_range< typename std::vector< T >::const_iterator > ReadWindow
Read-only access.
Definition WindowedArray.hpp:58
const std::vector< T > & data() const
Get read-only access to full, linearised data items for all windows.
Definition WindowedArray.hpp:136
WriteWindow operator[](const Idx window)
Request read/write access to individual window.
Definition WindowedArray.hpp:108
boost::iterator_range< typename std::vector< T >::iterator > WriteWindow
Read/write access.
Definition WindowedArray.hpp:54
ReadWindow operator[](const Idx window) const
Request read-only access to individual window.
Definition WindowedArray.hpp:123
WindowedArray(const NumWindows n, const WindowSize sz, const T initial=T{})
Constructor.
Definition WindowedArray.hpp:74
Provide read-only and read/write access to constantly sized portions/windows of a linearised buffer w...
Definition WindowedArray.hpp:169
ReadWindow operator()(const Idx row, const Idx col) const
Request read-only access to individual window.
Definition WindowedArray.hpp:247
WriteWindow operator()(const Idx row, const Idx col)
Request read/write access to individual window.
Definition WindowedArray.hpp:233
auto getDataDestructively() -> decltype(std::declval< WindowedArray< T > >() .getDataDestructively())
Extract full, linearised data items for all windows.
Definition WindowedArray.hpp:263
Idx windowSize() const
Retrieve number of data items per windows.
Definition WindowedArray.hpp:219
Idx numRows() const
Retrieve number of rows allocated for this matrix.
Definition WindowedArray.hpp:213
Idx numCols() const
Retrieve number of columns allocated for this matrix.
Definition WindowedArray.hpp:207
WindowedMatrix(const NumRows &nRows, const NumCols &nCols, const WindowSize &sz, const T initial=T{})
Constructor.
Definition WindowedArray.hpp:192
auto data() const -> decltype(std::declval< const WindowedArray< T > >().data())
Get read-only access to full, linearised data items for all windows.
Definition WindowedArray.hpp:254
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition Exceptions.hpp:30
Distinct compile-time type for number of windows in underlying storage.
Definition WindowedArray.hpp:64
Distinct compile-time type for size of windows (number of data items per window.)
Definition WindowedArray.hpp:68
Distinct compile-time type for number of matrix columns in underlying storage.
Definition WindowedArray.hpp:185
Distinct compile-time type for number of matrix rows in underlying storage.
Definition WindowedArray.hpp:181