iterative-solver 0.0
molpro::linalg::array::span::Span< T > Class Template Reference

Non-owning container taking a pointer to the data buffer and its size and exposing routines for iteration. More...

#include <Span.h>

Detailed Description

template<typename T = double>
class molpro::linalg::array::span::Span< T >

Non-owning container taking a pointer to the data buffer and its size and exposing routines for iteration.

This is a poor mimic of std::span. If c++20 standard is used than std::span is aliased to Span.

Public Types

using element_type = T
 
using value_type = std::remove_cv_t< T >
 
using reference = T &
 
using const_reference = T &
 
using size_type = size_t
 
using difference_type = std::ptrdiff_t
 
using iterator = T *
 
using const_iterator = T const *
 

Public Member Functions

 Span ()=default
 
 ~Span ()=default
 
 Span (T *data, size_type size)
 
 Span (const Span &source)=default
 
 Span (Span< T > &&source) noexcept
 
Spanoperator= (const Span &source)=default
 
Spanoperator= (Span &&source) noexcept
 
reference operator[] (size_type i)
 
const_reference operator[] (size_type i) const
 
iterator data ()
 
const_iterator data () const
 
iterator begin ()
 
const_iterator begin () const
 
const_iterator cbegin () const
 
iterator end ()
 
const_iterator end () const
 
const_iterator cend () const
 
size_type size () const
 
bool empty () const
 

Protected Attributes

iterator m_buffer = nullptr
 
size_type m_size = 0
 

Friends

void swap (Span< T > &x, Span< T > &y)
 Swap content of two Spans. More...
 

Member Typedef Documentation

◆ const_iterator

template<typename T = double>
using molpro::linalg::array::span::Span< T >::const_iterator = T const*

◆ const_reference

template<typename T = double>
using molpro::linalg::array::span::Span< T >::const_reference = T&

◆ difference_type

template<typename T = double>
using molpro::linalg::array::span::Span< T >::difference_type = std::ptrdiff_t

◆ element_type

template<typename T = double>
using molpro::linalg::array::span::Span< T >::element_type = T

◆ iterator

template<typename T = double>
using molpro::linalg::array::span::Span< T >::iterator = T*

◆ reference

template<typename T = double>
using molpro::linalg::array::span::Span< T >::reference = T&

◆ size_type

template<typename T = double>
using molpro::linalg::array::span::Span< T >::size_type = size_t

◆ value_type

template<typename T = double>
using molpro::linalg::array::span::Span< T >::value_type = std::remove_cv_t<T>

Constructor & Destructor Documentation

◆ Span() [1/4]

template<typename T = double>
molpro::linalg::array::span::Span< T >::Span ( )
default

◆ ~Span()

template<typename T = double>
molpro::linalg::array::span::Span< T >::~Span ( )
default

◆ Span() [2/4]

template<typename T = double>
molpro::linalg::array::span::Span< T >::Span ( T *  data,
size_type  size 
)
inline

◆ Span() [3/4]

template<typename T = double>
molpro::linalg::array::span::Span< T >::Span ( const Span< T > &  source)
default

◆ Span() [4/4]

template<typename T = double>
molpro::linalg::array::span::Span< T >::Span ( Span< T > &&  source)
inlinenoexcept

Member Function Documentation

◆ begin() [1/2]

template<typename T = double>
iterator molpro::linalg::array::span::Span< T >::begin ( )
inline

◆ begin() [2/2]

template<typename T = double>
const_iterator molpro::linalg::array::span::Span< T >::begin ( ) const
inline

◆ cbegin()

template<typename T = double>
const_iterator molpro::linalg::array::span::Span< T >::cbegin ( ) const
inline

◆ cend()

template<typename T = double>
const_iterator molpro::linalg::array::span::Span< T >::cend ( ) const
inline

◆ data() [1/2]

template<typename T = double>
iterator molpro::linalg::array::span::Span< T >::data ( )
inline

◆ data() [2/2]

template<typename T = double>
const_iterator molpro::linalg::array::span::Span< T >::data ( ) const
inline

◆ empty()

template<typename T = double>
bool molpro::linalg::array::span::Span< T >::empty ( ) const
inline

◆ end() [1/2]

template<typename T = double>
iterator molpro::linalg::array::span::Span< T >::end ( )
inline

◆ end() [2/2]

template<typename T = double>
const_iterator molpro::linalg::array::span::Span< T >::end ( ) const
inline

◆ operator=() [1/2]

template<typename T = double>
Span & molpro::linalg::array::span::Span< T >::operator= ( const Span< T > &  source)
default

◆ operator=() [2/2]

template<typename T = double>
Span & molpro::linalg::array::span::Span< T >::operator= ( Span< T > &&  source)
inlinenoexcept

◆ operator[]() [1/2]

template<typename T = double>
reference molpro::linalg::array::span::Span< T >::operator[] ( size_type  i)
inline

◆ operator[]() [2/2]

template<typename T = double>
const_reference molpro::linalg::array::span::Span< T >::operator[] ( size_type  i) const
inline

◆ size()

template<typename T = double>
size_type molpro::linalg::array::span::Span< T >::size ( ) const
inline

Friends And Related Function Documentation

◆ swap

template<typename T = double>
void swap ( Span< T > &  x,
Span< T > &  y 
)
friend

Swap content of two Spans.

Member Data Documentation

◆ m_buffer

template<typename T = double>
iterator molpro::linalg::array::span::Span< T >::m_buffer = nullptr
protected

◆ m_size

template<typename T = double>
size_type molpro::linalg::array::span::Span< T >::m_size = 0
protected