gives cells access to their neighboring cells in a given stencil shape. More...
#include <linepointerneighborhood.h>
Inherits West< CELL, STENCIL, BOUNDARY_WEST >, East< CELL, STENCIL, BOUNDARY_EAST >, Top< CELL, STENCIL, BOUNDARY_TOP >, Bottom< CELL, STENCIL, BOUNDARY_BOTTOM >, North< CELL, STENCIL, BOUNDARY_NORTH >, and South< CELL, STENCIL, BOUNDARY_SOUTH >.
Public Types | |
typedef CELL | Cell |
Public Member Functions | |
LinePointerNeighborhood (const CELL **lines, long *offset) | |
template<int X, int Y, int Z> | |
const CELL & | access (FixedCoord< X, Y, Z >, const CELL **lines) const |
template<int X, int Y, int Z> | |
const CELL & | operator[] (FixedCoord< X, Y, Z >) const |
Private Attributes | |
const CELL ** | lines |
long * | offset |
gives cells access to their neighboring cells in a given stencil shape.
It is meant as a low-overhead replacement for CoordMap. The flags are used in template specializations to cover those cases in which accesses to neighboring cells need to be rerouted. In essence, we go through the pain of having such many parameters to resolve runtime conditionals for range checking at compile time.
BOUNDARY_WEST: X == -1 -> use WEST pointers = X >= 0 -> use center pointers + X
BOUNDARY_EAST: X == 1 -> use EAST pointers X <= 0 -> use center pointers + X
BOUNDARY_TOP: Y == -1 -> use TOP pointer (don't set this on a torus, as its not needed!) Y >= 0 -> use center pointers + X
typedef CELL LibGeoDecomp::LinePointerNeighborhood< CELL, STENCIL, BOUNDARY_WEST, BOUNDARY_EAST, BOUNDARY_TOP, BOUNDARY_BOTTOM, BOUNDARY_SOUTH, BOUNDARY_NORTH >::Cell |
LibGeoDecomp::LinePointerNeighborhood< CELL, STENCIL, BOUNDARY_WEST, BOUNDARY_EAST, BOUNDARY_TOP, BOUNDARY_BOTTOM, BOUNDARY_SOUTH, BOUNDARY_NORTH >::LinePointerNeighborhood | ( | const CELL ** | lines, | |
long * | offset | |||
) | [inline] |
const CELL& LibGeoDecomp::LinePointerNeighborhood< CELL, STENCIL, BOUNDARY_WEST, BOUNDARY_EAST, BOUNDARY_TOP, BOUNDARY_BOTTOM, BOUNDARY_SOUTH, BOUNDARY_NORTH >::access | ( | FixedCoord< X, Y, Z > | , | |
const CELL ** | lines | |||
) | const [inline] |
const CELL& LibGeoDecomp::LinePointerNeighborhood< CELL, STENCIL, BOUNDARY_WEST, BOUNDARY_EAST, BOUNDARY_TOP, BOUNDARY_BOTTOM, BOUNDARY_SOUTH, BOUNDARY_NORTH >::operator[] | ( | FixedCoord< X, Y, Z > | ) | const [inline] |
References LibGeoDecomp::LinePointerNeighborhood< CELL, STENCIL, BOUNDARY_WEST, BOUNDARY_EAST, BOUNDARY_TOP, BOUNDARY_BOTTOM, BOUNDARY_SOUTH, BOUNDARY_NORTH >::access(), and LibGeoDecomp::LinePointerNeighborhood< CELL, STENCIL, BOUNDARY_WEST, BOUNDARY_EAST, BOUNDARY_TOP, BOUNDARY_BOTTOM, BOUNDARY_SOUTH, BOUNDARY_NORTH >::lines.
const CELL** LibGeoDecomp::LinePointerNeighborhood< CELL, STENCIL, BOUNDARY_WEST, BOUNDARY_EAST, BOUNDARY_TOP, BOUNDARY_BOTTOM, BOUNDARY_SOUTH, BOUNDARY_NORTH >::lines [private] |
long* LibGeoDecomp::LinePointerNeighborhood< CELL, STENCIL, BOUNDARY_WEST, BOUNDARY_EAST, BOUNDARY_TOP, BOUNDARY_BOTTOM, BOUNDARY_SOUTH, BOUNDARY_NORTH >::offset [private] |