20 #ifndef OPM_WINDOWED_ARRAY_HPP 21 #define OPM_WINDOWED_ARRAY_HPP 27 #include <type_traits> 30 #include <boost/range/iterator_range.hpp> 37 namespace 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;
77 const T initial = T{})
78 : x_ (n.value * sz.value, initial)
79 , windowSize_(sz.value)
82 throw std::invalid_argument {
83 "Zero-sized windows are not permitted" 96 return this->x_.size() / this->windowSize_;
102 return this->windowSize_;
112 "Window ID Out of Bounds");
114 auto b = std::begin(this->x_) + window*this->windowSize_;
115 auto e = b + this->windowSize_;
127 "Window ID Out of Bounds");
129 auto b = std::begin(this->x_) + window*this->windowSize_;
130 auto e = b + this->windowSize_;
137 const std::vector<T>&
data()
const 147 return std::move(this->x_);
168 template <
typename T>
178 using Idx =
typename WindowedArray<T>::Idx;
195 const NumCols& nCols,
196 const WindowSize& sz,
197 const T initial = T{})
198 : data_ (NumWindows{ nRows.value * nCols.value }, sz, initial)
199 , numCols_(nCols.value)
201 if (nCols.value == 0) {
202 throw std::invalid_argument {
203 "Zero-columned windowed matrices are not permitted" 211 return this->numCols_;
217 return this->data_.numWindows() / this->
numCols();
223 return this->data_.windowSize();
237 return this->data_[ this->i(row, col) ];
251 return this->data_[ this->i(row, col) ];
259 return this->data_.data();
269 return this->data_.getDataDestructively();
278 Idx i(
const Idx row,
const Idx col)
const 280 return row*this->
numCols() + col;
286 #endif // OPM_WINDOW_ARRAY_HPP 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 windows in underlying storage.
Definition: WindowedArray.hpp:64
const std::vector< T > & data() const
Get read-only access to full, linearised data items for all windows.
Definition: WindowedArray.hpp:137
Distinct compile-time type for number of matrix rows in underlying storage.
Definition: WindowedArray.hpp:182
Idx numCols() const
Retrieve number of columns allocated for this matrix.
Definition: WindowedArray.hpp:209
ReadWindow operator()(const Idx row, const Idx col) const
Request read-only access to individual window.
Definition: WindowedArray.hpp:249
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition: Exceptions.hpp:30
boost::iterator_range< typename std::vector< int >::const_iterator > ReadWindow
Read-only access.
Definition: WindowedArray.hpp:58
WindowedArray(const NumWindows n, const WindowSize sz, const T initial=T{})
Constructor.
Definition: WindowedArray.hpp:75
Idx windowSize() const
Retrieve number of data items per windows.
Definition: WindowedArray.hpp:221
ReadWindow operator[](const Idx window) const
Request read-only access to individual window.
Definition: WindowedArray.hpp:124
Idx numRows() const
Retrieve number of rows allocated for this matrix.
Definition: WindowedArray.hpp:215
Distinct compile-time type for number of matrix columns in underlying storage.
Definition: WindowedArray.hpp:186
auto getDataDestructively() -> decltype(std::declval< WindowedArray< T >>() .getDataDestructively())
Extract full, linearised data items for all windows.
Definition: WindowedArray.hpp:265
WriteWindow operator[](const Idx window)
Request read/write access to individual window.
Definition: WindowedArray.hpp:109
Idx windowSize() const
Retrieve number of data items per windows.
Definition: WindowedArray.hpp:100
WriteWindow operator()(const Idx row, const Idx col)
Request read/write access to individual window.
Definition: WindowedArray.hpp:235
Provide read-only and read/write access to constantly sized portions/windows of a linearised buffer w...
Definition: WindowedArray.hpp:49
WindowedMatrix(const NumRows &nRows, const NumCols &nCols, const WindowSize &sz, const T initial=T{})
Constructor.
Definition: WindowedArray.hpp:194
Idx numWindows() const
Retrieve number of windows allocated for this array.
Definition: WindowedArray.hpp:94
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:256
std::vector< T > getDataDestructively()
Extract full, linearised data items for all windows.
Definition: WindowedArray.hpp:145
Provide read-only and read/write access to constantly sized portions/windows of a linearised buffer w...
Definition: WindowedArray.hpp:169
boost::iterator_range< typename std::vector< T >::iterator > WriteWindow
Read/write access.
Definition: WindowedArray.hpp:54