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 Attributes | List of all members
fub::span< T, dynamic_extent > Class Template Reference

span is a compact view over a contiguous range of data. More...

#include <span.hpp>

Public Types

using element_type = T
 
using pointer = T *
 
using reference = T &
 
using value_type = std::remove_cv_t< T >
 
using index_type = std::ptrdiff_t
 
using difference_type = std::ptrdiff_t
 
using iterator = pointer
 
using const_iterator = std::add_const_t< T > *
 
using reverse_iterator = std::reverse_iterator< iterator >
 
using const_reverse_iterator = std::reverse_iterator< const_iterator >
 

Public Member Functions

constexpr span ()=default
 Constructs an empty span of size 0. More...
 
constexpr span (pointer p, index_type size) noexcept
 Constructs a span from a pointer + size pair. More...
 
constexpr span (pointer first, pointer last) noexcept
 Constructs a span from two pointers. More...
 
template<std::size_t M>
constexpr span (element_type(&arr)[M]) noexcept
 Implicit conversion from a built-in C-style array. More...
 
template<typename Container , typename = std::enable_if_t<!std::is_array<Container>::value>, typename = std::enable_if_t<!is_span<std::remove_const_t<Container>>::value>, typename = std::enable_if_t< std::is_convertible<detected_t<detail::array_type_t, Container&>, element_type (*)[]>::value>>
constexpr span (Container &container) noexcept
 Implicit conversion from mutable Container-like types. More...
 
template<typename S , index_type OtherExtents, typename = std::enable_if_t<std::is_convertible<S (*)[], T (*)[]>::value>>
constexpr span (const span< S, OtherExtents > &s) noexcept
 Implicit conversion from other span types. More...
 
constexpr span (const span &s) noexcept=default
 

Static Public Attributes

static constexpr index_type extent
 

Detailed Description

template<typename T>
class fub::span< T, dynamic_extent >

span is a compact view over a contiguous range of data.

This class models something like

struct span { pointer ptr; std::ptrdiff_t length; };
T * pointer
Definition: span.hpp:708
constexpr span()=default
Constructs an empty span of size 0.

Where the length can be omitted for statically sized views.

Member Typedef Documentation

◆ const_iterator

template<typename T >
using fub::span< T, dynamic_extent >::const_iterator = std::add_const_t<T>*

◆ const_reverse_iterator

template<typename T >
using fub::span< T, dynamic_extent >::const_reverse_iterator = std::reverse_iterator<const_iterator>

◆ difference_type

template<typename T >
using fub::span< T, dynamic_extent >::difference_type = std::ptrdiff_t

◆ element_type

template<typename T >
using fub::span< T, dynamic_extent >::element_type = T

◆ index_type

template<typename T >
using fub::span< T, dynamic_extent >::index_type = std::ptrdiff_t

◆ iterator

template<typename T >
using fub::span< T, dynamic_extent >::iterator = pointer

◆ pointer

template<typename T >
using fub::span< T, dynamic_extent >::pointer = T*

◆ reference

template<typename T >
using fub::span< T, dynamic_extent >::reference = T&

◆ reverse_iterator

template<typename T >
using fub::span< T, dynamic_extent >::reverse_iterator = std::reverse_iterator<iterator>

◆ value_type

template<typename T >
using fub::span< T, dynamic_extent >::value_type = std::remove_cv_t<T>

Constructor & Destructor Documentation

◆ span() [1/7]

template<typename T >
constexpr fub::span< T, dynamic_extent >::span ( )
constexprdefault

Constructs an empty span of size 0.

This initializes the underlying pointer to nullptr and the size to 0.

Exceptions
Nothing.
Postcondition
data() == nullptr
size() == 0

◆ span() [2/7]

template<typename T >
constexpr fub::span< T, dynamic_extent >::span ( pointer  p,
index_type  size 
)
inlineconstexprnoexcept

Constructs a span from a pointer + size pair.

This performs an assertion check in debug builds which will terminate the application if the specified size does not match the extent.

Exceptions
Nothing.
Postcondition
data() == p
size() == size

◆ span() [3/7]

template<typename T >
constexpr fub::span< T, dynamic_extent >::span ( pointer  first,
pointer  last 
)
inlineconstexprnoexcept

Constructs a span from two pointers.

This performs an assertion check in debug builds which will terminate the application if the specified size does not match the extent.

Exceptions
Nothing.
Postcondition
data() == first
size() == last - first

◆ span() [4/7]

template<typename T >
template<std::size_t M>
constexpr fub::span< T, dynamic_extent >::span ( element_type(&)  arr[M])
inlineconstexprnoexcept

Implicit conversion from a built-in C-style array.

Exceptions
Nothing.
Postcondition
data() = pointer(&arr[0])
size() == M

◆ span() [5/7]

template<typename T >
template<typename Container , typename = std::enable_if_t<!std::is_array<Container>::value>, typename = std::enable_if_t<!is_span<std::remove_const_t<Container>>::value>, typename = std::enable_if_t< std::is_convertible<detected_t<detail::array_type_t, Container&>, element_type (*)[]>::value>>
constexpr fub::span< T, dynamic_extent >::span ( Container &  container)
inlineconstexprnoexcept

Implicit conversion from mutable Container-like types.

Precondition
S(*)[] is convertible to element_type(*)[]
Exceptions
Nothing.
Postcondition
data() = container.data()
size() = container.size()

◆ span() [6/7]

template<typename T >
template<typename S , index_type OtherExtents, typename = std::enable_if_t<std::is_convertible<S (*)[], T (*)[]>::value>>
constexpr fub::span< T, dynamic_extent >::span ( const span< S, OtherExtents > &  s)
inlineconstexprnoexcept

Implicit conversion from other span types.

Precondition
size() <= M
std::is_convertible<S(*)[], T(*)[]>::value
Postcondition
data() == s.data()

◆ span() [7/7]

template<typename T >
constexpr fub::span< T, dynamic_extent >::span ( const span< T, dynamic_extent > &  s)
constexprdefaultnoexcept

Member Data Documentation

◆ extent

template<typename T >
constexpr index_type fub::span< T, dynamic_extent >::extent
staticconstexpr

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