25#ifndef GRIDCONTAINER_GRIDCONTAINER_H
26#define GRIDCONTAINER_GRIDCONTAINER_H
38namespace GridContainer {
96template <
typename GridCellManager,
typename... AxesTypes>
106 template <
typename GCM>
109 template<
typename GCM>
110 static typename GCM::pointer_type
ptr_test(
typename GCM::pointer_type*);
112 template<
typename GCM>
115 template<
typename GCM>
116 static typename GCM::reference_type
ref_test(
typename GCM::reference_type*);
132 template <
typename CellType,
typename Po
interType,
typename ReferenceType>
161 template <
typename... Args>
431template <
typename GridCellManager,
typename... AxesTypes>
432template <
typename CellType,
typename Po
interType,
typename ReferenceType>
434 :
public std::iterator<std::forward_iterator_tag, CellType, std::ptrdiff_t, PointerType, ReferenceType> {
460 ReferenceType operator*();
466 PointerType operator->();
473 bool operator==(
const iter& other)
const;
477 bool operator!=(
const iter& other)
const;
482 size_t axisIndex()
const;
534 template <
typename OtherIter>
541 void forwardToIndex(
size_t axis,
size_t fixed_index);
Provides information related with an axis of a GridContainer.
Class to iterate through the GridContainer cells.
const axis_type< I > & axisValue() const
iter & fixAllAxes(const OtherIter &other)
iter & fixAxisByIndex(size_t index)
cell_manager_iter_type m_data_iter
const GridContainer< GridCellManager, AxesTypes... > & m_owner
std::map< size_t, size_t > m_fixed_indices
iter(iter &&)=default
Move constructor.
iter(const iter &)=default
Copy constructor.
iter & fixAxisByValue(const axis_type< I > &value)
Representation of a multi-dimensional grid which contains axis information.
GridCellManagerTraits< GridCellManager >::iterator cell_manager_iter_type
const_iterator cend()
Returns a constant iterator to the cell after the last of the grid.
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 copy() const
But if needed be, allow explicit copies.
const GridAxis< axis_type< I > > & getOriginalAxis() const
GridContainer & operator=(const GridContainer< GridCellManager, AxesTypes... > &)=delete
GridContainer< GridCellManager, AxesTypes... > fixAxisByValue(const axis_type< I > &value)
Returns a slice of the grid based on an axis value.
std::tuple< GridAxis< AxesTypes >... > m_axes
A tuple containing the axes of the grid.
virtual ~GridContainer()=default
Default destructor.
const reference_type operator()(decltype(std::declval< GridAxis< AxesTypes > >().size())... indices) const
const std::tuple< GridAxis< AxesTypes >... > & getAxesTuple() const
Returns a tuple containing the information of all the grid axes.
const GridAxis< axis_type< I > > & getAxis() const
GridContainer & operator=(GridContainer< GridCellManager, AxesTypes... > &&)=default
GridContainer(const GridContainer< GridCellManager, AxesTypes... > &)=delete
std::tuple< GridAxis< AxesTypes >... > AxesTuple
The type of the tuple keeping the axes of the grid.
decltype(ptr_test< GridCellManagerTraits< GridCellManager > >(nullptr)) pointer_type
Pointer type.
GridCellManagerTraits< GridCellManager >::data_type cell_type
The type of the values stored in the grid cells.
static cell_type & ref_test(...)
static constexpr size_t axisNumber()
Returns the number of axes of the grid (dimensionality)
std::tuple< GridAxis< AxesTypes >... > m_axes_fixed
a tuple containing the original axes of the full grid, if this grid is a slice
GridCellManager & getCellManager()
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.
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.
decltype(ref_test< GridCellManagerTraits< GridCellManager > >(nullptr)) reference_type
Reference type.
typename std::tuple_element< I, std::tuple< AxesTypes... > >::type axis_type
const_iterator cbegin()
Returns a constant iterator to the first cell of the grid.
iterator begin()
Returns an iterator to the first cell of the grid.
static cell_type * ptr_test(...)
const reference_type at(decltype(std::declval< GridAxis< AxesTypes > >().size())... indices) const
iter< cell_type, pointer_type, reference_type > iterator
const GridCellManager & getCellManager() 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.
GridContainer< GridCellManager, AxesTypes... > fixAxisByIndex(size_t index)
Returns a slice of the grid based on an axis index.
static GCM::pointer_type ptr_test(typename GCM::pointer_type *)
GridIndexHelper< AxesTypes... > m_index_helper_fixed
a helper class for calculations of the original axes indices
iter< cell_type const, pointer_type const, reference_type const > const_iterator
GridIndexHelper< AxesTypes... > m_index_helper
A helper class used for calculations of the axes indices.
static GCM::reference_type ref_test(typename GCM::reference_type *)
Helper class for converting multi-dimensional grid coordinates to the index of a long data array and ...
GridCellManager::iterator iterator
GridCellManager::data_type data_type
The type of the data kept by the GridCellManager.