25 #ifndef GRIDCONTAINER_GRIDCONTAINER_H 26 #define GRIDCONTAINER_GRIDCONTAINER_H 32 #include <type_traits> 38 namespace GridContainer {
96 template<
typename GridCellManager,
typename... AxesTypes>
112 using axis_type =
typename std::tuple_element<I, std::tuple<AxesTypes...>>::type;
115 template<
typename CellType>
168 const std::tuple<GridAxis<AxesTypes>...>&
getAxesTuple()
const;
338 std::tuple<GridAxis<AxesTypes>...>
m_axes;
388 template<
typename GridCellManager,
typename... AxesTypes>
389 template<
typename CellType>
390 class GridContainer<GridCellManager, AxesTypes...>::iter :
public std::iterator<std::forward_iterator_tag, CellType> {
402 iter(
const GridContainer<GridCellManager, AxesTypes...>& owner,
406 iter(
const iter<CellType>&) =
default;
409 iter(iter<CellType>&&) =
default;
418 CellType& operator*();
421 typename std::add_const<CellType>::type& operator*()
const;
424 CellType* operator->();
427 typename std::add_const<CellType>::type* operator->()
const;
431 bool operator==(
const iter& other)
const;
440 size_t axisIndex()
const;
445 const axis_type<I>& axisValue()
const;
492 template<
typename OtherIter>
493 iter& fixAllAxes(
const OtherIter& other);
500 void forwardToIndex(
size_t axis,
size_t fixed_index);
cell_manager_iter_type m_data_iter
std::map< size_t, size_t > m_fixed_indices
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.
std::map< size_t, size_t > m_fixed_indices
A map containing the axes which have been fixed, if this grid is a slice.
iter< cell_type const > const_iterator
std::tuple< GridAxis< AxesTypes >... > AxesTuple
The type of the tuple keeping the axes of the grid.
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.
const GridAxis< axis_type< I > > & getAxis() const
size_t size() const
Returns the total number of cells 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.
iter< cell_type > iterator
GridContainer< GridCellManager, AxesTypes... > fixAxisByIndex(size_t index)
Returns a slice of the grid based on an axis index.
GridContainer & operator=(GridContainer< GridCellManager, AxesTypes... > &&)=default
Helper class for converting multi-dimensional grid coordinates to the index of a long data array and ...
GridCellManagerTraits< GridCellManager >::iterator cell_manager_iter_type
std::shared_ptr< GridCellManager > m_cell_manager
A pointer to the data of the grid.
const cell_type & at(decltype(std::declval< GridAxis< AxesTypes >>().size())... indices) const
Provides information related with an axis of a GridContainer.
GridContainer(GridAxis< AxesTypes >... axes)
Constructs a GridContainer with the given axes.
const cell_type & operator()(decltype(std::declval< GridAxis< AxesTypes >>().size())... indices) const
typename std::tuple_element< I, std::tuple< AxesTypes... > >::type axis_type
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
GridContainer construction helper class.
static std::unique_ptr< GridCellManager > factory(size_t size)
virtual ~GridContainer()=default
Default destructor.
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.
const GridContainer< GridCellManager, AxesTypes... > & m_owner
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.
const GridAxis< axis_type< I > > & getOriginalAxis() const
const std::tuple< GridAxis< AxesTypes >... > & getAxesTuple() const
Returns a tuple containing the information of all the grid axes.