25 #ifndef GRIDCONTAINER_GRIDCONTAINER_H
26 #define GRIDCONTAINER_GRIDCONTAINER_H
35 #include <type_traits>
38 namespace GridContainer {
96 template <
typename GridCellManager,
typename... AxesTypes>
114 template <
typename CellType>
393 template <
typename GridCellManager,
typename... AxesTypes>
394 template <
typename CellType>
495 template <
typename OtherIter>
Provides information related with an axis of a GridContainer.
GridContainer construction helper class.
Class to iterate through the GridContainer cells.
iter & operator=(const iter &other)
Copy operator of the iterator.
iter(const iter< CellType > &)=default
Copy constructor.
CellType & operator*()
Returns a reference to the cell value.
const GridContainer< GridCellManager, AxesTypes... > & m_owner
std::map< size_t, size_t > m_fixed_indices
iter & fixAllAxes(const OtherIter &other)
const axis_type< I > & axisValue() const
iter & fixAxisByIndex(size_t index)
bool operator!=(const iter &other) const
iter(iter< CellType > &&)=default
Move constructor.
iter & operator++()
Moves the iterator to the next grid cell.
CellType * operator->()
Returns a pointer to the cell value.
std::add_const< CellType >::type & operator*() const
Returns a reference to the cell value (const version)
iter & fixAxisByValue(const axis_type< I > &value)
std::add_const< CellType >::type * operator->() const
Returns a pointer to the cell value (const version)
iter(const GridContainer< GridCellManager, AxesTypes... > &owner, const cell_manager_iter_type &data_iter)
Constructs a new iterator for the given grid.
bool operator==(const iter &other) const
void forwardToIndex(size_t axis, size_t fixed_index)
cell_manager_iter_type m_data_iter
Representation of a multi-dimensional grid which contains axis information.
const_iterator cend()
Returns a constant iterator to the cell after the last of the grid.
const GridContainer< GridCellManager, AxesTypes... > fixAxisByIndex(size_t index) const
const version of the fixAxisByIndex(size_t) method
std::shared_ptr< GridCellManager > m_cell_manager
A pointer to the data of the grid.
GridContainer(GridContainer< GridCellManager, AxesTypes... > &&)=default
Default move constructor and move assignment operator.
GridContainer< GridCellManager, AxesTypes... > fixAxisByIndex(size_t index)
Returns a slice of the grid based on an axis index.
std::tuple< decltype(std::declval< GridAxis< AxesTypes >>().size())... > infimum(const std::tuple< AxesTypes... > &coordinates) const
std::tuple< GridAxis< AxesTypes >... > m_axes
A tuple containing the axes of the grid.
GridContainer(std::tuple< GridAxis< AxesTypes >... > axes_tuple)
Constructs a GridContainer with the given axes.
GridContainer(const GridContainer< GridCellManager, AxesTypes... > &other, size_t axis, size_t index)
Slice constructor.
virtual ~GridContainer()=default
Default destructor.
typename std::tuple_element< I, std::tuple< AxesTypes... > >::type axis_type
const GridAxis< axis_type< I > > & getAxis() const
GridContainer(const GridContainer< GridCellManager, AxesTypes... > &)=delete
cell_type & operator()(decltype(std::declval< GridAxis< AxesTypes >>().size())... indices)
(decltype(std::declval<GridAxis<AxesTypes>>().size())...) const
const cell_type & at(decltype(std::declval< GridAxis< AxesTypes >>().size())... indices) const
GridCellManagerTraits< GridCellManager >::iterator cell_manager_iter_type
const_iterator end() const
Returns an iterator to the cell after the last of the grid.
const cell_type & operator()(decltype(std::declval< GridAxis< AxesTypes >>().size())... indices) const
iter< cell_type const > const_iterator
GridContainer & operator=(GridContainer< GridCellManager, AxesTypes... > &&)=default
std::tuple< GridAxis< AxesTypes >... > m_axes_fixed
a tuple containing the original axes of the full grid, if this grid is a slice
const_iterator cbegin()
Returns a constant iterator to the first cell of the grid.
iterator end()
Returns an iterator to the cell after the last of the grid.
size_t size() const
Returns the total number of cells of the grid.
const GridContainer< GridCellManager, AxesTypes... > fixAxisByValue(const axis_type< I > &value) const
const version of the fixAxisByValue(const axis_type<I>&) method
GridContainer< GridCellManager, AxesTypes... > fixAxisByValue(const axis_type< I > &value)
Returns a slice of the grid based on an axis value.
const_iterator begin() const
Returns an iterator to the first cell of the grid.
iter< cell_type > iterator
static constexpr size_t axisNumber()
Returns the number of axes of the grid (dimensionality)
std::tuple< GridAxis< AxesTypes >... > AxesTuple
The type of the tuple keeping the axes of the grid.
cell_type & at(decltype(std::declval< GridAxis< AxesTypes >>().size())... indices)
GridContainer & operator=(const GridContainer< GridCellManager, AxesTypes... > &)=delete
GridContainer(GridAxis< AxesTypes >... axes)
Constructs a GridContainer with the given axes.
const GridAxis< axis_type< I > > & getOriginalAxis() const
std::map< size_t, size_t > m_fixed_indices
A map containing the axes which have been fixed, if this grid is a slice.
std::tuple< decltype(std::declval< GridAxis< AxesTypes >>().size())... > infimum(const AxesTypes... coordinates) const
Returns the grid indexes to the greatest knot less or equal to the given coordinates.
GridCellManagerTraits< GridCellManager >::data_type cell_type
The type of the values stored in the grid cells.
iterator begin()
Returns an iterator to the first cell of the grid.
GridIndexHelper< AxesTypes... > m_index_helper_fixed
a helper class for calculations of the original axes indices
GridIndexHelper< AxesTypes... > m_index_helper
A helper class used for calculations of the axes indices.
const std::tuple< GridAxis< AxesTypes >... > & getAxesTuple() const
Returns a tuple containing the information of all the grid axes.
Helper class for converting multi-dimensional grid coordinates to the index of a long data array and ...
GridCellManager::data_type data_type
The type of the data kept by the GridCellManager.
static std::unique_ptr< GridCellManager > factory(size_t size)
GridCellManager::iterator iterator