25#ifndef GRIDCONTAINER_GRIDCONTAINER_H
26#define GRIDCONTAINER_GRIDCONTAINER_H
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> {
534 template <
typename OtherIter>
Provides information related with an axis of a GridContainer.
Class to iterate through the GridContainer cells.
const axis_type< I > & axisValue() const
void forwardToIndex(size_t axis, size_t fixed_index)
bool operator!=(const iter &other) const
iter & fixAllAxes(const OtherIter &other)
iter & fixAxisByIndex(size_t index)
iter(const GridContainer< GridCellManager, AxesTypes... > &owner, const cell_manager_iter_type &data_iter)
Constructs a new iterator for the given grid.
cell_manager_iter_type m_data_iter
const GridContainer< GridCellManager, AxesTypes... > & m_owner
std::map< size_t, size_t > m_fixed_indices
ReferenceType operator*()
Returns a reference to the cell value.
iter(iter &&)=default
Move constructor.
std::add_const< ReferenceType >::type operator*() const
Returns a reference to the cell value (const version)
iter & operator=(const iter &other)
Copy operator of the iterator.
PointerType operator->()
Returns a pointer to the cell value.
bool operator==(const iter &other) const
std::add_const< PointerType >::type operator->() const
Returns a pointer to the cell value (const version)
iter & operator++()
Moves the iterator to the next grid cell.
iter(const iter &)=default
Copy constructor.
iter & fixAxisByValue(const axis_type< I > &value)
const_iterator begin() const
Returns an iterator to the first cell of the grid.
const_iterator cend()
Returns a constant iterator to the cell after the last of the grid.
std::shared_ptr< GridCellManager > m_cell_manager
reference_type at(decltype(std::declval< GridAxis< AxesTypes > >().size())... indices)
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.
iter< cell_type const, pointer_type const, reference_type const > const_iterator
std::tuple< GridAxis< AxesTypes >... > m_axes
GridContainer(std::tuple< GridAxis< AxesTypes >... > axes_tuple, Args &&... args)
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.
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
const_iterator end() const
Returns an iterator to the cell after the last of the grid.
GridContainer & operator=(GridContainer< GridCellManager, AxesTypes... > &&)=default
GridContainer(const GridContainer< GridCellManager, AxesTypes... > &)=delete
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
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.
const GridContainer< GridCellManager, AxesTypes... > fixAxisByValue(const axis_type< I > &value) const
const version of the fixAxisByValue(const axis_type<I>&) method
typename std::tuple_element< I, std::tuple< AxesTypes... > >::type axis_type
std::tuple< decltype(std::declval< GridAxis< AxesTypes > >().size())... > infimum(const std::tuple< AxesTypes... > &coordinates) const
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.
iter< cell_type, pointer_type, reference_type > iterator
std::tuple< GridAxis< AxesTypes >... > AxesTuple
The type of the tuple keeping the axes of the grid.
static cell_type * ptr_test(...)
const reference_type at(decltype(std::declval< GridAxis< AxesTypes > >().size())... indices) const
GridContainer(GridAxis< AxesTypes >... axes)
Constructs a GridContainer with the given axes.
const GridCellManager & getCellManager() const
std::map< size_t, size_t > m_fixed_indices
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.
reference_type operator()(decltype(std::declval< GridAxis< AxesTypes > >().size())... indices)
(decltype(std::declval<GridAxis<AxesTypes>>().size())...) const
static GCM::pointer_type ptr_test(typename GCM::pointer_type *)
GridIndexHelper< AxesTypes... > m_index_helper_fixed
const GridContainer< GridCellManager, AxesTypes... > fixAxisByIndex(size_t index) const
const version of the fixAxisByIndex(size_t) method
decltype(ptr_test< GridCellManagerTraits< GridCellManager > >(nullptr)) pointer_type
Pointer type.
GridIndexHelper< AxesTypes... > m_index_helper
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::data_type data_type
The type of the data kept by the GridCellManager.
GridCellManager::iterator iterator