DASH  0.3.0
dash::CartesianIndexSpace< NumDimensions, Arrangement, IndexType > Class Template Reference

Defines a cartesian, totally-ordered index space by mapping linear indices to cartesian coordinates depending on memory order. More...

#include <Cartesian.h>

Public Types

typedef IndexType index_type
 
typedef SizeType size_type
 
typedef std::array< SizeType, NumDimensions > extents_type
 
typedef std::integral_constant< dim_t, NumDimensions > ndim
 The number of dimension in the cartesian space. More...
 

Public Member Functions

constexpr CartesianIndexSpace ()=default
 Default constructor, creates a cartesian index space of extent 0 in all dimensions. More...
 
 CartesianIndexSpace (const extents_type &extents)
 Constructor, creates a cartesian index space of given extents. More...
 
template<typename... Args>
 CartesianIndexSpace (SizeType arg, Args... args)
 Constructor, creates a cartesian index space of given extents. More...
 
constexpr dim_t rank () const noexcept
 The number of dimension in the cartesian space with extent greater than 1. More...
 
bool operator== (const self_t &other) const
 Equality comparison operator. More...
 
constexpr bool operator!= (const self_t &other) const
 Inequality comparison operator. More...
 
template<typename... Args>
void resize (SizeType arg, Args... args)
 Change the extent of the cartesian space in every dimension. More...
 
template<typename SizeType_ >
void resize (const std::array< SizeType_, NumDimensions > &extents)
 Change the extent of the cartesian space in every dimension. More...
 
void resize (dim_t dim, SizeType extent)
 Change the extent of the cartesian space in the given dimension. More...
 
constexpr SizeType size () const noexcept
 The number of discrete elements within the space spanned by the coordinate. More...
 
constexpr const extents_type & extents () const noexcept
 Extents of the cartesian space, by dimension. More...
 
SizeType extent (dim_t dim) const
 The extent of the cartesian space in the given dimension. More...
 
template<typename... Args, MemArrange AtArrangement = Arrangement>
constexpr IndexType at (IndexType arg, Args... args) const
 Convert the given coordinates to their respective linear index. More...
 
template<MemArrange AtArrangement = Arrangement, typename OffsetType >
IndexType at (const std::array< OffsetType, NumDimensions > &point) const
 Convert the given cartesian point to its respective linear index. More...
 
template<MemArrange AtArrangement = Arrangement, typename OffsetType >
IndexType at (const std::array< OffsetType, NumDimensions > &point, const ViewSpec_t &viewspec) const
 Convert the given cartesian point to a linear index, respective to the offsets specified in the given ViewSpec. More...
 
template<MemArrange CoordArrangement = Arrangement>
std::array< IndexType, NumDimensions > coords (IndexType index) const
 Convert given linear offset (index) to cartesian coordinates. More...
 
template<MemArrange CoordArrangement = Arrangement>
std::array< IndexType, NumDimensions > coords (IndexType index, const ViewSpec_t &viewspec) const
 Convert given linear offset (index) to cartesian coordinates with respect to a given viewspec. More...
 
template<dim_t U = NumDimensions>
constexpr std::enable_if<(U > 0), SizeType >::type x (SizeType offs) const
 Accessor for dimension 1 (x), enabled for dimensionality > 0. More...
 
template<dim_t U = NumDimensions>
constexpr std::enable_if<(U > 1), SizeType >::type y (SizeType offs) const
 Accessor for dimension 2 (y), enabled for dimensionality > 1. More...
 
template<dim_t U = NumDimensions>
constexpr std::enable_if<(U > 2), SizeType >::type z (SizeType offs) const
 Accessor for dimension 3 (z), enabled for dimensionality > 2. More...
 

Friends

template<dim_t NDim_>
std::ostream & operator<< (std::ostream &os, const CartesianIndexSpace< NDim_ > &cartesian_space)
 

Detailed Description

template<dim_t NumDimensions, MemArrange Arrangement = ROW_MAJOR, typename IndexType = dash::default_index_t>
class dash::CartesianIndexSpace< NumDimensions, Arrangement, IndexType >

Defines a cartesian, totally-ordered index space by mapping linear indices to cartesian coordinates depending on memory order.

Note
Not derived from CartesianSpace to provide resizing in O(d) instead of O(2d).

Definition at line 239 of file Cartesian.h.

Member Typedef Documentation

◆ ndim

template<dim_t NumDimensions, MemArrange Arrangement = ROW_MAJOR, typename IndexType = dash::default_index_t>
typedef std::integral_constant<dim_t, NumDimensions> dash::CartesianIndexSpace< NumDimensions, Arrangement, IndexType >::ndim

The number of dimension in the cartesian space.

Definition at line 279 of file Cartesian.h.

Constructor & Destructor Documentation

◆ CartesianIndexSpace() [1/3]

template<dim_t NumDimensions, MemArrange Arrangement = ROW_MAJOR, typename IndexType = dash::default_index_t>
constexpr dash::CartesianIndexSpace< NumDimensions, Arrangement, IndexType >::CartesianIndexSpace ( )
default

Default constructor, creates a cartesian index space of extent 0 in all dimensions.

◆ CartesianIndexSpace() [2/3]

template<dim_t NumDimensions, MemArrange Arrangement = ROW_MAJOR, typename IndexType = dash::default_index_t>
dash::CartesianIndexSpace< NumDimensions, Arrangement, IndexType >::CartesianIndexSpace ( const extents_type &  extents)
inline

Constructor, creates a cartesian index space of given extents.

Definition at line 290 of file Cartesian.h.

292  : _extents(extents)
293  {
294  resize(extents);
295  }
void resize(SizeType arg, Args... args)
Change the extent of the cartesian space in every dimension.
Definition: Cartesian.h:350
constexpr const extents_type & extents() const noexcept
Extents of the cartesian space, by dimension.
Definition: Cartesian.h:402

◆ CartesianIndexSpace() [3/3]

template<dim_t NumDimensions, MemArrange Arrangement = ROW_MAJOR, typename IndexType = dash::default_index_t>
template<typename... Args>
dash::CartesianIndexSpace< NumDimensions, Arrangement, IndexType >::CartesianIndexSpace ( SizeType  arg,
Args...  args 
)
inline

Constructor, creates a cartesian index space of given extents.

Definition at line 301 of file Cartesian.h.

302  : _extents({{ }})
303  {
304  resize(arg, args...);
305  }
void resize(SizeType arg, Args... args)
Change the extent of the cartesian space in every dimension.
Definition: Cartesian.h:350

Member Function Documentation

◆ at() [1/3]

template<dim_t NumDimensions, MemArrange Arrangement = ROW_MAJOR, typename IndexType = dash::default_index_t>
template<typename... Args, MemArrange AtArrangement = Arrangement>
constexpr IndexType dash::CartesianIndexSpace< NumDimensions, Arrangement, IndexType >::at ( IndexType  arg,
Args...  args 
) const
inline

Convert the given coordinates to their respective linear index.

Parameters
argsAn argument list consisting of the coordinates, ordered by, dimension (x, y, z, ...)

Definition at line 429 of file Cartesian.h.

Referenced by dash::TilePattern< NumDimensions, Arrangement, IndexType >::at(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::at(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::at(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::block_at(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::block_at(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::block_at(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::block_at(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::global(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::global(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::global_at(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::global_at(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::global_at(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::global_at(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::local(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::local(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::local_at(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::local_at(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::local_at(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::local_at(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::local_block_at(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::local_block_at(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::local_index(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::unit_at(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::unit_at(), and dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::unit_at().

430  {
431  static_assert(
432  sizeof...(Args) == NumDimensions-1,
433  "Invalid number of arguments");
434  return at<AtArrangement>(
435  std::array<IndexType, NumDimensions> {{
436  arg, (IndexType)(args) ... }}
437  );
438  }

◆ at() [2/3]

template<dim_t NumDimensions, MemArrange Arrangement = ROW_MAJOR, typename IndexType = dash::default_index_t>
template<MemArrange AtArrangement = Arrangement, typename OffsetType >
IndexType dash::CartesianIndexSpace< NumDimensions, Arrangement, IndexType >::at ( const std::array< OffsetType, NumDimensions > &  point) const
inline

Convert the given cartesian point to its respective linear index.

Parameters
pointAn array containing the coordinates, ordered by dimension (x, y, z, ...)

Definition at line 449 of file Cartesian.h.

450  {
451  SizeType offs = 0;
452  DASH_ASSERT_GT(_size, 0, "CartesianIndexSpace has size 0");
453  for (auto i = 0; i < NumDimensions; i++) {
454  DASH_ASSERT_RANGE(
455  0,
456  static_cast<IndexType>(point[i]),
457  static_cast<IndexType>(_extents[i]-1),
458  "Given coordinate for CartesianIndexSpace::at() exceeds extent");
459  SizeType offset_dim = 0;
460  if (AtArrangement == ROW_MAJOR) {
461  offset_dim = _offset_row_major[i];
462  } else if (AtArrangement == COL_MAJOR) {
463  offset_dim = _offset_col_major[i];
464  }
465  offs += offset_dim * point[i];
466  }
467  return offs;
468  }

◆ at() [3/3]

template<dim_t NumDimensions, MemArrange Arrangement = ROW_MAJOR, typename IndexType = dash::default_index_t>
template<MemArrange AtArrangement = Arrangement, typename OffsetType >
IndexType dash::CartesianIndexSpace< NumDimensions, Arrangement, IndexType >::at ( const std::array< OffsetType, NumDimensions > &  point,
const ViewSpec_t viewspec 
) const
inline

Convert the given cartesian point to a linear index, respective to the offsets specified in the given ViewSpec.

Parameters
pointAn array containing the coordinates, ordered by dimension (x, y, z, ...)
viewspecAn instance of ViewSpec to apply to the given point before resolving the linear index.

Definition at line 482 of file Cartesian.h.

484  {
485  std::array<OffsetType, NumDimensions> coords{};
486  for (auto d = 0; d < NumDimensions; ++d) {
487  coords[d] = point[d] + viewspec.offset(d);
488  }
489  return at(coords);
490  }
std::array< IndexType, NumDimensions > coords(IndexType index) const
Convert given linear offset (index) to cartesian coordinates.
Definition: Cartesian.h:497
constexpr IndexType at(IndexType arg, Args... args) const
Convert the given coordinates to their respective linear index.
Definition: Cartesian.h:429

◆ coords() [1/2]

template<dim_t NumDimensions, MemArrange Arrangement = ROW_MAJOR, typename IndexType = dash::default_index_t>
template<MemArrange CoordArrangement = Arrangement>
std::array<IndexType, NumDimensions> dash::CartesianIndexSpace< NumDimensions, Arrangement, IndexType >::coords ( IndexType  index) const
inline

Convert given linear offset (index) to cartesian coordinates.

Inverse of at(...).

Definition at line 497 of file Cartesian.h.

Referenced by dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::block(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::block(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::block(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::block(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::coords(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::coords(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::coords(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::coords(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::global(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::global(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::global(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::global(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::local_block(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::local_block(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::local_block_local(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::local_block_local(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::local_block_local(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::local_block_local(), dash::GlobViewIter< ElementT, PatternT, GlobMemT >::operator--(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::underfilled_blocksize(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::unit_at(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::unit_at(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::unit_at(), and dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::unit_at().

499  {
500  DASH_ASSERT_GT(_size, 0, "CartesianIndexSpace has size 0");
501  DASH_ASSERT_RANGE(
502  0, index, static_cast<IndexType>(_size-1),
503  "Given index for CartesianIndexSpace::coords() is out of bounds");
504 
505  ::std::array<IndexType, NumDimensions> pos{};
506  if (CoordArrangement == ROW_MAJOR) {
507  for(auto i = 0; i < NumDimensions; ++i) {
508  pos[i] = index / _offset_row_major[i];
509  index = index % _offset_row_major[i];
510  }
511  } else if (CoordArrangement == COL_MAJOR) {
512  for(auto i = NumDimensions-1; i >= 0; --i) {
513  pos[i] = index / _offset_col_major[i];
514  index = index % _offset_col_major[i];
515  }
516  }
517  return pos;
518  }
constexpr std::enable_if< std::is_integral< IndexType >::value, IndexType >::type index(IndexType idx)
Definition: Iterator.h:60

◆ coords() [2/2]

template<dim_t NumDimensions, MemArrange Arrangement = ROW_MAJOR, typename IndexType = dash::default_index_t>
template<MemArrange CoordArrangement = Arrangement>
std::array<IndexType, NumDimensions> dash::CartesianIndexSpace< NumDimensions, Arrangement, IndexType >::coords ( IndexType  index,
const ViewSpec_t viewspec 
) const
inline

Convert given linear offset (index) to cartesian coordinates with respect to a given viewspec.

Inverse of at(...).

Definition at line 526 of file Cartesian.h.

529  {
530  std::array<IndexType, NumDimensions> pos{};
531  extents_type offset;
532  if (CoordArrangement == ROW_MAJOR)
533  {
534  offset[NumDimensions-1] = 1;
535  for(auto i = NumDimensions-2; i >= 0; --i)
536  offset[i] = offset[i+1] * viewspec.extent(i+1);
537 
538  for(auto i = 0; i < NumDimensions; ++i)
539  {
540  pos[i] = index / offset[i] + viewspec.offset(i);
541  index = index % offset[i];
542  }
543  }
544  else if (CoordArrangement == COL_MAJOR)
545  {
546  offset[0] = 1;
547  for(auto i = 1; i < NumDimensions; ++i)
548  offset[i] = offset[i-1] * viewspec.extent(i-1);
549 
550  for(auto i = NumDimensions-1; i >= 0; --i)
551  {
552  pos[i] = index / offset[i] + viewspec.offset(i);
553  index = index % offset[i];
554  }
555  }
556  return pos;
557  }
constexpr std::enable_if< std::is_integral< IndexType >::value, IndexType >::type index(IndexType idx)
Definition: Iterator.h:60

◆ extent()

template<dim_t NumDimensions, MemArrange Arrangement = ROW_MAJOR, typename IndexType = dash::default_index_t>
SizeType dash::CartesianIndexSpace< NumDimensions, Arrangement, IndexType >::extent ( dim_t  dim) const
inline

The extent of the cartesian space in the given dimension.

Parameters
dimThe dimension in the coordinate
Returns
The extent in the given dimension

Definition at line 412 of file Cartesian.h.

Referenced by dash::TilePattern< NumDimensions, Arrangement, IndexType >::at(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::at(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::at(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::block(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::block(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::block(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::block(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::block_at(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::block_at(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::block_at(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::block_at(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::blocksize(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::blocksize(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::blocksize(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::blocksize(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::coords(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::coords(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::extent(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::extent(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::extent(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::extent(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::global(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::global(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::global(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::global_at(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::global_at(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::global_at(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::local(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::local(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::local_at(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::local_at(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::local_at(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::local_block(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::local_block(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::local_block_at(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::local_block_at(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::local_block_local(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::local_coords(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::local_coords(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::local_coords(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::local_coords(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::local_extent(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::local_extent(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::local_extent(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::local_extent(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::local_index(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::ndim(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::ndim(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::underfilled_blocksize(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::underfilled_blocksize(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::unit_at(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::unit_at(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::unit_at(), and dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::unit_at().

412  {
413  DASH_ASSERT_RANGE(
414  0, dim, NumDimensions-1,
415  "Given dimension " << dim <<
416  " for CartesianIndexSpace::extent(dim) is out of bounds");
417  return _extents[dim];
418  }

◆ extents()

template<dim_t NumDimensions, MemArrange Arrangement = ROW_MAJOR, typename IndexType = dash::default_index_t>
constexpr const extents_type& dash::CartesianIndexSpace< NumDimensions, Arrangement, IndexType >::extents ( ) const
inlinenoexcept

Extents of the cartesian space, by dimension.

Definition at line 402 of file Cartesian.h.

Referenced by dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::at(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::block(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::block(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::block(), dash::LocalMemoryLayout< NumDimensions, Arrangement, IndexType >::coords(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::extents(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::extents(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::extents(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::extents(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::local_at(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::local_at(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::local_at(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::local_block(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::local_block_local(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::local_block_local(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::local_block_local(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::local_block_local(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::local_extents(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::local_extents(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::ndim(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::ndim(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::sizespec(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::sizespec(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::sizespec(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::sizespec(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::underfilled_blocksize(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::underfilled_blocksize(), and dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::unit_at().

402  {
403  return _extents;
404  }

◆ operator!=()

template<dim_t NumDimensions, MemArrange Arrangement = ROW_MAJOR, typename IndexType = dash::default_index_t>
constexpr bool dash::CartesianIndexSpace< NumDimensions, Arrangement, IndexType >::operator!= ( const self_t other) const
inline

Inequality comparison operator.

Definition at line 342 of file Cartesian.h.

342  {
343  return !(*this == other);
344  }

◆ operator==()

template<dim_t NumDimensions, MemArrange Arrangement = ROW_MAJOR, typename IndexType = dash::default_index_t>
bool dash::CartesianIndexSpace< NumDimensions, Arrangement, IndexType >::operator== ( const self_t other) const
inline

Equality comparison operator.

Definition at line 322 of file Cartesian.h.

322  {
323  if (this == &other) {
324  return true;
325  }
326  for(auto i = 0; i < NumDimensions; i++) {
327  if (_extents[i] != other._extents[i]) {
328  return false;
329  }
330  // Comparing either row- or column major offsets suffices:
331  if (_offset_row_major[i] != other._offset_row_major[i]) {
332  return false;
333  }
334  }
335  // No need to compare _size as it is derived from _extents.
336  return true;
337  }

◆ rank()

template<dim_t NumDimensions, MemArrange Arrangement = ROW_MAJOR, typename IndexType = dash::default_index_t>
constexpr dim_t dash::CartesianIndexSpace< NumDimensions, Arrangement, IndexType >::rank ( ) const
inlinenoexcept

The number of dimension in the cartesian space with extent greater than 1.

See also
num_dimensions()
Returns
The number of dimensions in the coordinate

Definition at line 315 of file Cartesian.h.

315  {
316  return _rank;
317  }

◆ resize() [1/3]

template<dim_t NumDimensions, MemArrange Arrangement = ROW_MAJOR, typename IndexType = dash::default_index_t>
template<typename... Args>
void dash::CartesianIndexSpace< NumDimensions, Arrangement, IndexType >::resize ( SizeType  arg,
Args...  args 
)
inline

Change the extent of the cartesian space in every dimension.

Definition at line 350 of file Cartesian.h.

350  {
351  static_assert(
352  sizeof...(Args) == NumDimensions-1,
353  "Invalid number of arguments");
354  std::array<SizeType, NumDimensions> extents =
355  {{ arg, (SizeType)(args)... }};
356  resize(extents);
357  }
void resize(SizeType arg, Args... args)
Change the extent of the cartesian space in every dimension.
Definition: Cartesian.h:350
constexpr const extents_type & extents() const noexcept
Extents of the cartesian space, by dimension.
Definition: Cartesian.h:402

◆ resize() [2/3]

template<dim_t NumDimensions, MemArrange Arrangement = ROW_MAJOR, typename IndexType = dash::default_index_t>
template<typename SizeType_ >
void dash::CartesianIndexSpace< NumDimensions, Arrangement, IndexType >::resize ( const std::array< SizeType_, NumDimensions > &  extents)
inline

Change the extent of the cartesian space in every dimension.

Definition at line 363 of file Cartesian.h.

363  {
364  // Update size:
365  _size = 1;
366  for(auto i = 0; i < NumDimensions; i++ ) {
367  _extents[i] = static_cast<SizeType>(extents[i]);
368  _size *= _extents[i];
369  }
370  // Update offsets:
371  _offset_row_major[NumDimensions-1] = 1;
372  for(auto i = NumDimensions-2; i >= 0; --i) {
373  _offset_row_major[i] = _offset_row_major[i+1] * _extents[i+1];
374  }
375  _offset_col_major[0] = 1;
376  for(auto i = 1; i < NumDimensions; ++i) {
377  _offset_col_major[i] = _offset_col_major[i-1] * _extents[i-1];
378  }
379  }
constexpr const extents_type & extents() const noexcept
Extents of the cartesian space, by dimension.
Definition: Cartesian.h:402

◆ resize() [3/3]

template<dim_t NumDimensions, MemArrange Arrangement = ROW_MAJOR, typename IndexType = dash::default_index_t>
void dash::CartesianIndexSpace< NumDimensions, Arrangement, IndexType >::resize ( dim_t  dim,
SizeType  extent 
)
inline

Change the extent of the cartesian space in the given dimension.

Definition at line 384 of file Cartesian.h.

384  {
385  _extents[dim] = extent;
386  resize(_extents);
387  }
void resize(SizeType arg, Args... args)
Change the extent of the cartesian space in every dimension.
Definition: Cartesian.h:350
SizeType extent(dim_t dim) const
The extent of the cartesian space in the given dimension.
Definition: Cartesian.h:412

◆ size()

template<dim_t NumDimensions, MemArrange Arrangement = ROW_MAJOR, typename IndexType = dash::default_index_t>
constexpr SizeType dash::CartesianIndexSpace< NumDimensions, Arrangement, IndexType >::size ( ) const
inlinenoexcept

The number of discrete elements within the space spanned by the coordinate.

Returns
The number of discrete elements in the coordinate's space

Definition at line 395 of file Cartesian.h.

Referenced by dash::TilePattern< NumDimensions, Arrangement, IndexType >::at(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::at(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::at(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::capacity(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::capacity(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::capacity(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::capacity(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::coords(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::coords(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::global(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::global(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::global(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::global_at(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::global_at(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::global_at(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::local_at(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::local_at(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::local_at(), dash::BlockPattern< 1, Arrangement, IndexType >::local_block_at(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::max_blocksize(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::max_blocksize(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::max_blocksize(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::max_blocksize(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::ndim(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::ndim(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::num_units(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::num_units(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::num_units(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::size(), dash::ShiftTilePattern< NumDimensions, Arrangement, IndexType >::size(), dash::SeqTilePattern< NumDimensions, Arrangement, IndexType >::size(), dash::TilePattern< NumDimensions, Arrangement, IndexType >::size(), dash::BlockPattern< 1, ROW_MAJOR, dash::default_index_t >::underfilled_blocksize(), and dash::TilePattern< NumDimensions, Arrangement, IndexType >::underfilled_blocksize().

395  {
396  return _size;
397  }

◆ x()

template<dim_t NumDimensions, MemArrange Arrangement = ROW_MAJOR, typename IndexType = dash::default_index_t>
template<dim_t U = NumDimensions>
constexpr std::enable_if< (U > 0), SizeType >::type dash::CartesianIndexSpace< NumDimensions, Arrangement, IndexType >::x ( SizeType  offs) const
inline

Accessor for dimension 1 (x), enabled for dimensionality > 0.

Definition at line 591 of file Cartesian.h.

591  {
592  return coords(offs)[0];
593  }
std::array< IndexType, NumDimensions > coords(IndexType index) const
Convert given linear offset (index) to cartesian coordinates.
Definition: Cartesian.h:497

◆ y()

template<dim_t NumDimensions, MemArrange Arrangement = ROW_MAJOR, typename IndexType = dash::default_index_t>
template<dim_t U = NumDimensions>
constexpr std::enable_if< (U > 1), SizeType >::type dash::CartesianIndexSpace< NumDimensions, Arrangement, IndexType >::y ( SizeType  offs) const
inline

Accessor for dimension 2 (y), enabled for dimensionality > 1.

Definition at line 600 of file Cartesian.h.

600  {
601  return coords(offs)[1];
602  }
std::array< IndexType, NumDimensions > coords(IndexType index) const
Convert given linear offset (index) to cartesian coordinates.
Definition: Cartesian.h:497

◆ z()

template<dim_t NumDimensions, MemArrange Arrangement = ROW_MAJOR, typename IndexType = dash::default_index_t>
template<dim_t U = NumDimensions>
constexpr std::enable_if< (U > 2), SizeType >::type dash::CartesianIndexSpace< NumDimensions, Arrangement, IndexType >::z ( SizeType  offs) const
inline

Accessor for dimension 3 (z), enabled for dimensionality > 2.

Definition at line 609 of file Cartesian.h.

609  {
610  return coords(offs)[2];
611  }
std::array< IndexType, NumDimensions > coords(IndexType index) const
Convert given linear offset (index) to cartesian coordinates.
Definition: Cartesian.h:497

The documentation for this class was generated from the following file: