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 PointerType, typename ReferenceType>
161 template <typename... Args>
257 infimum(const
std::tuple<AxesTypes...>& coordinates) const;
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.
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 copy() const
But if needed be, allow explicit copies.
const GridAxis< axis_type< I > > & getOriginalAxis() const
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.
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
decltype(ref_test< GridCellManagerTraits< GridCellManager > >(nullptr)) reference_type
Reference type.
GridCellManagerTraits< GridCellManager >::iterator cell_manager_iter_type
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.
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
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.
GridCellManagerTraits< GridCellManager >::data_type cell_type
The type of the values stored in the grid cells.
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
decltype(ptr_test< GridCellManagerTraits< GridCellManager > >(nullptr)) pointer_type
Pointer type.
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 ...
Class used by the GridContainer to access the different CellManagers.
GridCellManager::data_type data_type
The type of the data kept by the GridCellManager.
GridCellManager::iterator iterator