Finite Volume Solver  prototype
A framework to build finite volume solvers for the AG Klein at the Freie Universität Berlin.
Public Types | Public Member Functions | Static Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy > Class Template Reference

#include <mdspan.hpp>

Public Types

using extents_type = Extents
 
using layout_type = LayoutPolicy
 
using accessor_type = AccessorPolicy
 
using mapping_type = typename layout_type::template mapping< extents_type >
 
using element_type = typename accessor_type::element_type
 
using value_type = std::remove_cv_t< element_type >
 
using index_type = std::ptrdiff_t
 
using difference_type = std::ptrdiff_t
 
using pointer = typename accessor_type::pointer
 
using reference = typename accessor_type::reference
 

Public Member Functions

constexpr basic_mdspan () noexcept=default
 
constexpr basic_mdspan (const basic_mdspan &) noexcept=default
 
constexpr basic_mdspan (basic_mdspan &&) noexcept=default
 
template<class... IndexType, typename = std::enable_if_t<conjunction< std::is_convertible<IndexType, std::ptrdiff_t>...>::value>, typename = std::enable_if_t<sizeof...(IndexType) == Extents::rank_dynamic()>>
constexpr basic_mdspan (pointer p, IndexType... dynamic_extents)
 
template<class IndexType , std::size_t N>
constexpr basic_mdspan (pointer p, const std::array< IndexType, N > &dynamic_extents)
 
constexpr basic_mdspan (pointer p, const mapping_type &m)
 
constexpr basic_mdspan (pointer p, const mapping_type &m, const accessor_type &a)
 
template<class OtherElementType , class OtherExtents , class OtherLayoutPolicy , class OtherAccessorPolicy >
constexpr basic_mdspan (const basic_mdspan< OtherElementType, OtherExtents, OtherLayoutPolicy, OtherAccessorPolicy > &other)
 
 ~basic_mdspan ()=default
 
constexpr basic_mdspanoperator= (const basic_mdspan &) noexcept=default
 
constexpr basic_mdspanoperator= (basic_mdspan &&) noexcept=default
 
template<class OtherElementType , class OtherExtents , class OtherLayoutPolicy , class OtherAccessorPolicy >
constexpr basic_mdspanoperator= (const basic_mdspan< OtherElementType, OtherExtents, OtherLayoutPolicy, OtherAccessorPolicy > &other) noexcept
 
constexpr reference operator[] (index_type i) const noexcept
 
template<class... IndexType>
constexpr reference operator() (IndexType... indices) const noexcept
 
template<class IndexType , size_t N>
constexpr reference operator() (const std::array< IndexType, N > &indices) const noexcept
 
constexpr Extents extents () const noexcept
 
constexpr index_type extent (std::size_t rank) const noexcept
 
constexpr index_type size () const noexcept
 
constexpr index_type unique_size () const noexcept
 
constexpr span< element_typeget_span () const noexcept
 
constexpr pointer data () const noexcept
 
constexpr mapping_type mapping () const noexcept
 
constexpr accessor_type accessor () const noexcept
 
constexpr bool is_unique () const noexcept
 
constexpr bool is_contiguous () const noexcept
 
constexpr bool is_strided () const noexcept
 
constexpr index_type stride (std::size_t r) const
 

Static Public Member Functions

static constexpr int rank () noexcept
 
static constexpr int rank_dynamic () noexcept
 
static constexpr index_type static_extent (std::size_t rank) noexcept
 
static constexpr bool is_always_unique () noexcept
 
static constexpr bool is_always_contiguous () noexcept
 
static constexpr bool is_always_strided () noexcept
 

Private Types

using offset_policy = accessor_basic
 

Private Member Functions

constexpr pointer offset (pointer p, ptrdiff_t i) const noexcept
 
constexpr reference access (pointer p, ptrdiff_t i) const noexcept
 
constexpr pointer decay (pointer p) const noexcept
 

Private Attributes

pointer ptr_
 

Member Typedef Documentation

◆ accessor_type

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
using fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::accessor_type = AccessorPolicy

◆ difference_type

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
using fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::difference_type = std::ptrdiff_t

◆ element_type

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
using fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::element_type = typename accessor_type::element_type

◆ extents_type

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
using fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::extents_type = Extents

◆ index_type

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
using fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::index_type = std::ptrdiff_t

◆ layout_type

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
using fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::layout_type = LayoutPolicy

◆ mapping_type

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
using fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::mapping_type = typename layout_type::template mapping<extents_type>

◆ offset_policy

template<class ElementType >
using fub::accessor_basic< ElementType >::offset_policy = accessor_basic
inherited

◆ pointer

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
using fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::pointer = typename accessor_type::pointer

◆ reference

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
using fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::reference = typename accessor_type::reference

◆ value_type

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
using fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::value_type = std::remove_cv_t<element_type>

Constructor & Destructor Documentation

◆ basic_mdspan() [1/8]

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
constexpr fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::basic_mdspan ( )
constexprdefaultnoexcept

◆ basic_mdspan() [2/8]

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
constexpr fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::basic_mdspan ( const basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy > &  )
constexprdefaultnoexcept

◆ basic_mdspan() [3/8]

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
constexpr fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::basic_mdspan ( basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy > &&  )
constexprdefaultnoexcept

◆ basic_mdspan() [4/8]

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
template<class... IndexType, typename = std::enable_if_t<conjunction< std::is_convertible<IndexType, std::ptrdiff_t>...>::value>, typename = std::enable_if_t<sizeof...(IndexType) == Extents::rank_dynamic()>>
constexpr fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::basic_mdspan ( pointer  p,
IndexType...  dynamic_extents 
)
inlineexplicitconstexpr

◆ basic_mdspan() [5/8]

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
template<class IndexType , std::size_t N>
constexpr fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::basic_mdspan ( pointer  p,
const std::array< IndexType, N > &  dynamic_extents 
)
inlineexplicitconstexpr

◆ basic_mdspan() [6/8]

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
constexpr fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::basic_mdspan ( pointer  p,
const mapping_type m 
)
inlineconstexpr

◆ basic_mdspan() [7/8]

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
constexpr fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::basic_mdspan ( pointer  p,
const mapping_type m,
const accessor_type a 
)
inlineconstexpr

◆ basic_mdspan() [8/8]

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
template<class OtherElementType , class OtherExtents , class OtherLayoutPolicy , class OtherAccessorPolicy >
constexpr fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::basic_mdspan ( const basic_mdspan< OtherElementType, OtherExtents, OtherLayoutPolicy, OtherAccessorPolicy > &  other)
inlineconstexpr

◆ ~basic_mdspan()

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::~basic_mdspan ( )
default

Member Function Documentation

◆ access()

template<class ElementType >
constexpr reference fub::accessor_basic< ElementType >::access ( pointer  p,
ptrdiff_t  i 
) const
inlineconstexprnoexceptinherited

◆ accessor()

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
constexpr accessor_type fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::accessor ( ) const
inlineconstexprnoexcept

◆ data()

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
constexpr pointer fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::data ( ) const
inlineconstexprnoexcept

◆ decay()

template<class ElementType >
constexpr pointer fub::accessor_basic< ElementType >::decay ( pointer  p) const
inlineconstexprnoexceptinherited

◆ extent()

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
constexpr index_type fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::extent ( std::size_t  rank) const
inlineconstexprnoexcept

◆ extents()

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
constexpr Extents fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::extents ( ) const
inlineconstexprnoexcept

◆ get_span()

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
constexpr span<element_type> fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::get_span ( ) const
inlineconstexprnoexcept

◆ is_always_contiguous()

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
static constexpr bool fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::is_always_contiguous ( )
inlinestaticconstexprnoexcept

◆ is_always_strided()

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
static constexpr bool fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::is_always_strided ( )
inlinestaticconstexprnoexcept

◆ is_always_unique()

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
static constexpr bool fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::is_always_unique ( )
inlinestaticconstexprnoexcept

◆ is_contiguous()

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
constexpr bool fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::is_contiguous ( ) const
inlineconstexprnoexcept

◆ is_strided()

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
constexpr bool fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::is_strided ( ) const
inlineconstexprnoexcept

◆ is_unique()

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
constexpr bool fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::is_unique ( ) const
inlineconstexprnoexcept

◆ mapping()

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
constexpr mapping_type fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::mapping ( ) const
inlineconstexprnoexcept

◆ offset()

template<class ElementType >
constexpr pointer fub::accessor_basic< ElementType >::offset ( pointer  p,
ptrdiff_t  i 
) const
inlineconstexprnoexceptinherited

◆ operator()() [1/2]

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
template<class IndexType , size_t N>
constexpr reference fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::operator() ( const std::array< IndexType, N > &  indices) const
inlineconstexprnoexcept

◆ operator()() [2/2]

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
template<class... IndexType>
constexpr reference fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::operator() ( IndexType...  indices) const
inlineconstexprnoexcept

◆ operator=() [1/3]

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
constexpr basic_mdspan& fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::operator= ( basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy > &&  )
constexprdefaultnoexcept

◆ operator=() [2/3]

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
constexpr basic_mdspan& fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::operator= ( const basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy > &  )
constexprdefaultnoexcept

◆ operator=() [3/3]

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
template<class OtherElementType , class OtherExtents , class OtherLayoutPolicy , class OtherAccessorPolicy >
constexpr basic_mdspan& fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::operator= ( const basic_mdspan< OtherElementType, OtherExtents, OtherLayoutPolicy, OtherAccessorPolicy > &  other)
inlineconstexprnoexcept

◆ operator[]()

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
constexpr reference fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::operator[] ( index_type  i) const
inlineconstexprnoexcept

◆ rank()

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
static constexpr int fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::rank ( )
inlinestaticconstexprnoexcept

◆ rank_dynamic()

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
static constexpr int fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::rank_dynamic ( )
inlinestaticconstexprnoexcept

◆ size()

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
constexpr index_type fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::size ( ) const
inlineconstexprnoexcept

◆ static_extent()

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
static constexpr index_type fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::static_extent ( std::size_t  rank)
inlinestaticconstexprnoexcept

◆ stride()

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
constexpr index_type fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::stride ( std::size_t  r) const
inlineconstexpr

◆ unique_size()

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
constexpr index_type fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::unique_size ( ) const
inlineconstexprnoexcept

Member Data Documentation

◆ ptr_

template<class ElementType , class Extents , class LayoutPolicy = layout_right, class AccessorPolicy = accessor_basic<ElementType>>
pointer fub::basic_mdspan< ElementType, Extents, LayoutPolicy, AccessorPolicy >::ptr_
private

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