25 #ifndef GRIDCONTAINER_GRIDCONTAINER_H
26 #define GRIDCONTAINER_GRIDCONTAINER_H
35 #include <type_traits>
38 namespace GridContainer {
96 template <
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*);
129 using
axis_type = typename std::tuple_element<I, std::tuple<AxesTypes...>>::type;
132 template <typename CellType, typename PointerType, typename ReferenceType>
136 typedef iter<cell_type const, pointer_type const, reference_type const>
const_iterator;
161 template <typename... Args>
199 const_iterator begin() const;
208 const_iterator end() const;
211 const_iterator
cend();
226 const reference_type operator()(decltype(std::declval<
GridAxis<AxesTypes>>().
size())... indices) const;
229 reference_type operator()(decltype(std::declval<
GridAxis<AxesTypes>>().
size())... indices);
243 const reference_type
at(decltype(std::declval<
GridAxis<AxesTypes>>().
size())... indices) const;
246 reference_type
at(decltype(std::declval<
GridAxis<AxesTypes>>().
size())... indices);
253 std::tuple<decltype(std::declval<
GridAxis<AxesTypes>>().
size())...>
infimum(const AxesTypes... coordinates) const;
256 std::tuple<decltype(std::declval<
GridAxis<AxesTypes>>().
size())...>
257 infimum(const std::tuple<AxesTypes...>& coordinates) const;
431 template <
typename GridCellManager,
typename... AxesTypes>
432 template <
typename CellType,
typename Po
interType,
typename ReferenceType>
434 :
public std::iterator<std::forward_iterator_tag, CellType, std::ptrdiff_t, PointerType, ReferenceType> {
448 iter(
const iter&) =
default;
451 iter(iter&&) =
default;
460 ReferenceType operator*();
466 PointerType operator->();
473 bool operator==(
const iter& other)
const;
482 size_t axisIndex()
const;
487 const axis_type<I>& axisValue()
const;
534 template <
typename OtherIter>
535 iter& fixAllAxes(
const OtherIter& other);
541 void forwardToIndex(
size_t axis,
size_t fixed_index);
size_t size() const
Returns the total number of cells of the grid.
GridContainer copy() const
But if needed be, allow explicit copies.
iter< cell_type, pointer_type, reference_type > iterator
std::tuple< GridAxis< AxesTypes >...> m_axes
A tuple containing the axes of the grid.
std::map< size_t, size_t > m_fixed_indices
A map containing the axes which have been fixed, if this grid is a slice.
Class used by the GridContainer to access the different CellManagers.
GridContainer & operator=(GridContainer< GridCellManager, AxesTypes...> &&)=default
const reference_type at(decltype(std::declval< GridAxis< AxesTypes >>().size())...indices) const
cell_manager_iter_type m_data_iter
const GridAxis< axis_type< I > > & getAxis() const
const_iterator cbegin()
Returns a constant iterator to the first cell of the grid.
const_iterator cend()
Returns a constant iterator to the cell after the last of the grid.
bool operator!=(const Euclid::SourceCatalog::Source::id_type &a, const Euclid::SourceCatalog::Source::id_type &b)
boost::variant specifies an equality operator (==), but, in older boost versions, not an inequality o...
Representation of a multi-dimensional grid which contains axis information.
const GridCellManager & getCellManager() const
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.
const GridAxis< axis_type< I > > & getOriginalAxis() const
Helper class for converting multi-dimensional grid coordinates to the index of a long data array and ...
iter< cell_type const, pointer_type const, reference_type const > const_iterator
static cell_type & ref_test(...)
GridCellManagerTraits< GridCellManager >::iterator cell_manager_iter_type
std::shared_ptr< GridCellManager > m_cell_manager
A pointer to the data of the grid.
GridCellManager & getCellManager()
decltype(ref_test< GridCellManagerTraits< GridCellManager >>(nullptr)) typedef reference_type
Reference type.
Provides information related with an axis of a GridContainer.
GridContainer< GridCellManager, AxesTypes...> fixAxisByIndex(size_t index)
Returns a slice of the grid based on an axis index.
const GridContainer< GridCellManager, AxesTypes...> & m_owner
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_fixed
a tuple containing the original axes of the full grid, if this grid is a slice
GridIndexHelper< AxesTypes...> m_index_helper_fixed
a helper class for calculations of the original axes indices
std::map< size_t, size_t > m_fixed_indices
typename std::tuple_element< I, std::tuple< AxesTypes...>>::type axis_type
static cell_type * ptr_test(...)
GridIndexHelper< AxesTypes...> m_index_helper
A helper class used for calculations of the axes indices.
GridCellManager::iterator iterator
static constexpr size_t axisNumber()
Returns the number of axes of the grid (dimensionality)
GridCellManagerTraits< GridCellManager >::data_type cell_type
The type of the values stored in the grid cells.
iterator end()
Returns an iterator to the cell after the last of the grid.
iterator begin()
Returns an iterator to the first cell of the grid.
GridCellManager::data_type data_type
The type of the data kept by the GridCellManager.
decltype(ptr_test< GridCellManagerTraits< GridCellManager >>(nullptr)) typedef pointer_type
Pointer type.
const std::tuple< GridAxis< AxesTypes >...> & getAxesTuple() const
Returns a tuple containing the information of all the grid axes.