Finite Volume Solver  prototype
A framework to build finite volume solvers for the AG Klein at the Freie Universität Berlin.
Private Member Functions | List of all members
fub::layout_left::mapping< Extents > Class Template Reference

This mapping does row first indexing (as in Fortran). More...

#include <mdspan.hpp>

Public Member Functions

Constructors / Destructors
constexpr mapping ()=default
 Implicit Conversion from Extents. More...
 
constexpr mapping (const mapping &)=default
 Implicit Conversion from Extents. More...
 
constexpr mapping (mapping &&)=default
 Implicit Conversion from Extents. More...
 
mappingoperator= (const mapping &other) noexcept=default
 Implicit Conversion from Extents. More...
 
mappingoperator= (mapping &&other) noexcept=default
 Implicit Conversion from Extents. More...
 
constexpr mapping (const Extents &extents)
 Implicit Conversion from Extents. More...
 

Private Member Functions

template<std::size_t... Is, typename... IndexType>
constexpr std::ptrdiff_t DoMapping_ (index_sequence< Is... >, IndexType... indices) const noexcept
 

Observers

constexpr const Extentsextents () const noexcept
 
constexpr std::ptrdiff_t required_span_size () const noexcept
 
template<typename... IndexType, typename = std::enable_if_t<conjunction< std::is_convertible<IndexType, std::ptrdiff_t>...>::value>, typename = std::enable_if_t<(sizeof...(IndexType) == Extents::rank())>>
constexpr std::ptrdiff_t operator() (IndexType... indices) const noexcept
 
constexpr std::ptrdiff_t stride (std::size_t r) const noexcept
 
constexpr bool is_unique () const noexcept
 
constexpr bool is_contiguous () const noexcept
 
constexpr bool is_strided () const noexcept
 
template<class OtherExtents >
constexpr bool operator== (const mapping< OtherExtents > &other) const noexcept
 
template<class OtherExtents >
constexpr bool operator!= (const mapping< OtherExtents > &other) const noexcept
 
static constexpr bool is_always_unique () noexcept
 
static constexpr bool is_always_contiguous () noexcept
 
static constexpr bool is_always_strided () noexcept
 

Detailed Description

template<typename Extents>
class fub::layout_left::mapping< Extents >

This mapping does row first indexing (as in Fortran).

It holds for all valid i and j the equation

mapping(i + 1, j) - mapping(1, j) == 1
constexpr mapping()=default
Implicit Conversion from Extents.

Constructor & Destructor Documentation

◆ mapping() [1/4]

template<typename Extents >
constexpr fub::layout_left::mapping< Extents >::mapping ( )
constexprdefault

Implicit Conversion from Extents.

Exceptions
Nothing.
Postcondition
extents() == extents.

◆ mapping() [2/4]

template<typename Extents >
constexpr fub::layout_left::mapping< Extents >::mapping ( const mapping< Extents > &  )
constexprdefault

Implicit Conversion from Extents.

Exceptions
Nothing.
Postcondition
extents() == extents.

◆ mapping() [3/4]

template<typename Extents >
constexpr fub::layout_left::mapping< Extents >::mapping ( mapping< Extents > &&  )
constexprdefault

Implicit Conversion from Extents.

Exceptions
Nothing.
Postcondition
extents() == extents.

◆ mapping() [4/4]

template<typename Extents >
constexpr fub::layout_left::mapping< Extents >::mapping ( const Extents extents)
inlineconstexpr

Implicit Conversion from Extents.

Exceptions
Nothing.
Postcondition
extents() == extents.

Member Function Documentation

◆ DoMapping_()

template<typename Extents >
template<std::size_t... Is, typename... IndexType>
constexpr std::ptrdiff_t fub::layout_left::mapping< Extents >::DoMapping_ ( index_sequence< Is... >  ,
IndexType...  indices 
) const
inlineconstexprprivatenoexcept

◆ extents()

template<typename Extents >
constexpr const Extents& fub::layout_left::mapping< Extents >::extents ( ) const
inlineconstexprnoexcept
Returns
Returns the codomain index for specified multi dimensional index coordinates.

\effect Equivalent to offset in

index_type offset = 0;
for(size_t k = 0; k < Extents::rank(); ++k) {
offset += i[k] * stride(k);
}
constexpr std::ptrdiff_t stride(std::size_t r) const noexcept
Definition: mdspan.hpp:354
Exceptions
Nothing.

◆ is_always_contiguous()

template<typename Extents >
static constexpr bool fub::layout_left::mapping< Extents >::is_always_contiguous ( )
inlinestaticconstexprnoexcept
Returns
Returns the codomain index for specified multi dimensional index coordinates.

\effect Equivalent to offset in

index_type offset = 0;
for(size_t k = 0; k < Extents::rank(); ++k) {
offset += i[k] * stride(k);
}
Exceptions
Nothing.

◆ is_always_strided()

template<typename Extents >
static constexpr bool fub::layout_left::mapping< Extents >::is_always_strided ( )
inlinestaticconstexprnoexcept
Returns
Returns the codomain index for specified multi dimensional index coordinates.

\effect Equivalent to offset in

index_type offset = 0;
for(size_t k = 0; k < Extents::rank(); ++k) {
offset += i[k] * stride(k);
}
Exceptions
Nothing.

◆ is_always_unique()

template<typename Extents >
static constexpr bool fub::layout_left::mapping< Extents >::is_always_unique ( )
inlinestaticconstexprnoexcept
Returns
Returns the codomain index for specified multi dimensional index coordinates.

\effect Equivalent to offset in

index_type offset = 0;
for(size_t k = 0; k < Extents::rank(); ++k) {
offset += i[k] * stride(k);
}
Exceptions
Nothing.

◆ is_contiguous()

template<typename Extents >
constexpr bool fub::layout_left::mapping< Extents >::is_contiguous ( ) const
inlineconstexprnoexcept
Returns
Returns the codomain index for specified multi dimensional index coordinates.

\effect Equivalent to offset in

index_type offset = 0;
for(size_t k = 0; k < Extents::rank(); ++k) {
offset += i[k] * stride(k);
}
Exceptions
Nothing.

◆ is_strided()

template<typename Extents >
constexpr bool fub::layout_left::mapping< Extents >::is_strided ( ) const
inlineconstexprnoexcept
Returns
Returns the codomain index for specified multi dimensional index coordinates.

\effect Equivalent to offset in

index_type offset = 0;
for(size_t k = 0; k < Extents::rank(); ++k) {
offset += i[k] * stride(k);
}
Exceptions
Nothing.

◆ is_unique()

template<typename Extents >
constexpr bool fub::layout_left::mapping< Extents >::is_unique ( ) const
inlineconstexprnoexcept
Returns
Returns the codomain index for specified multi dimensional index coordinates.

\effect Equivalent to offset in

index_type offset = 0;
for(size_t k = 0; k < Extents::rank(); ++k) {
offset += i[k] * stride(k);
}
Exceptions
Nothing.

◆ operator!=()

template<typename Extents >
template<class OtherExtents >
constexpr bool fub::layout_left::mapping< Extents >::operator!= ( const mapping< OtherExtents > &  other) const
inlineconstexprnoexcept
Returns
Returns the codomain index for specified multi dimensional index coordinates.

\effect Equivalent to offset in

index_type offset = 0;
for(size_t k = 0; k < Extents::rank(); ++k) {
offset += i[k] * stride(k);
}
Exceptions
Nothing.

◆ operator()()

template<typename Extents >
template<typename... IndexType, typename = std::enable_if_t<conjunction< std::is_convertible<IndexType, std::ptrdiff_t>...>::value>, typename = std::enable_if_t<(sizeof...(IndexType) == Extents::rank())>>
constexpr std::ptrdiff_t fub::layout_left::mapping< Extents >::operator() ( IndexType...  indices) const
inlineconstexprnoexcept
Returns
Returns the codomain index for specified multi dimensional index coordinates.

\effect Equivalent to offset in

index_type offset = 0;
for(size_t k = 0; k < Extents::rank(); ++k) {
offset += i[k] * stride(k);
}
Exceptions
Nothing.

◆ operator=() [1/2]

template<typename Extents >
mapping& fub::layout_left::mapping< Extents >::operator= ( const mapping< Extents > &  other)
defaultnoexcept

Implicit Conversion from Extents.

Exceptions
Nothing.
Postcondition
extents() == extents.

◆ operator=() [2/2]

template<typename Extents >
mapping& fub::layout_left::mapping< Extents >::operator= ( mapping< Extents > &&  other)
defaultnoexcept

Implicit Conversion from Extents.

Exceptions
Nothing.
Postcondition
extents() == extents.

◆ operator==()

template<typename Extents >
template<class OtherExtents >
constexpr bool fub::layout_left::mapping< Extents >::operator== ( const mapping< OtherExtents > &  other) const
inlineconstexprnoexcept
Returns
Returns the codomain index for specified multi dimensional index coordinates.

\effect Equivalent to offset in

index_type offset = 0;
for(size_t k = 0; k < Extents::rank(); ++k) {
offset += i[k] * stride(k);
}
Exceptions
Nothing.

◆ required_span_size()

template<typename Extents >
constexpr std::ptrdiff_t fub::layout_left::mapping< Extents >::required_span_size ( ) const
inlineconstexprnoexcept
Returns
Returns the codomain index for specified multi dimensional index coordinates.

\effect Equivalent to offset in

index_type offset = 0;
for(size_t k = 0; k < Extents::rank(); ++k) {
offset += i[k] * stride(k);
}
Exceptions
Nothing.

◆ stride()

template<typename Extents >
constexpr std::ptrdiff_t fub::layout_left::mapping< Extents >::stride ( std::size_t  r) const
inlineconstexprnoexcept
Returns
Returns the stride value in a specified dimension r.
Exceptions
Nothing.

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