Loading...
Searching...
No Matches
PLMD::View< T, N > Class Template Reference

A not-owning view for generic data. More...

#include <View.h>

Inheritance diagram for PLMD::View< T, N >:

Public Types

using const_iterator = const pointer
 
using const_reference = const value_type &
 
using iterator = pointer
 
using pointer = value_type *
 
using reference = value_type &
 
using value_type = T
 

Public Member Functions

 View (const View &) noexcept=default
 
template<size_t NN = N, typename = std::enable_if_t<NN != helpers::dynamic_extent>>
 View (pointer p) noexcept
 
 View (pointer p, std::size_t const NN) noexcept
 
 View (View &&) noexcept=default
 
constexpr const_iterator begin () const noexcept
 
constexpr iterator begin () noexcept
 
constexpr const_iterator cbegin () const noexcept
 
constexpr const_iterator cend () const noexcept
 
template<size_t M = N, typename VT, unsigned VD>
auto & copyConv (const VectorTyped< VT, VD > &v) noexcept
 assignment from a PLMD::VectorTyped explicitly request an eventual conversion
 
constexpr pointer data () const noexcept
 return the pointer to the data
 
constexpr const_iterator end () const noexcept
 
constexpr iterator end () noexcept
 
double modulo () const noexcept
 
double modulo2 () const noexcept
 
template<typename TT>
auto & operator*= (const TT v) noexcept
 
template<size_t M = N, typename VT, unsigned VD>
auto & operator+= (const VectorTyped< VT, VD > &v) noexcept
 
template<size_t M = N, typename VT, unsigned VD>
auto & operator-= (const VectorTyped< VT, VD > &v) noexcept
 
template<typename TT>
auto & operator/= (const TT v) noexcept
 
template<size_t M = N, typename VT, unsigned VD>
auto & operator= (const VectorTyped< VT, VD > &v) noexcept
 assignment from a PLMD::VectorTyped of the same type
 
Viewoperator= (const View &) noexcept=default
 
Viewoperator= (View &&) noexcept=default
 
constexpr const_reference operator[] (size_t i) const noexcept
 returns the reference i-th element
 
constexpr reference operator[] (size_t i) noexcept
 returns the reference i-th element
 
constexpr size_t size () const noexcept
 
template<size_t Offset, size_t Count = helpers::dynamic_extent>
constexpr auto subview () const noexcept
 return a subview on consecutive elements
 
constexpr View< value_type, helpers::dynamic_extentsubview (size_t offset, size_t count=helpers::dynamic_extent) const noexcept
 return a subview on consecutive elements
 
template<size_t Count>
constexpr View< value_type, Count > subview_n (size_t offset) const noexcept
 return a subview of specific size consecutive elements
 
void zero () noexcept
 

Private Attributes

pointer ptr_
 
std::size_t size_ {N}
 

Detailed Description

template<typename T, std::size_t N = helpers::dynamic_extent>
class PLMD::View< T, N >

A not-owning view for generic data.

The main idea is to have something that works like the span from c++20.

View are CHEAP to copy (pointer and an integer), so it is better to pass them as values

Can be used from PLMD::Vectors and standard types

accessing the data of a PLMD::Vector as double:

std::vector<PLMD::VecorGeneric<3>> v(3);
PLMD::View<double,3> vd(&v[0][0]);
A not-owning view for generic data.
Definition View.h:68

accessing the data of a PLMD::Vector as PLMD::VectorGeneric<3>:

std::vector<PLMD::VecorGeneric<3>> v(3);
Todo
ctors from std::array and from iterators to parallel the span implementatio

Member Typedef Documentation

◆ const_iterator

template<typename T, std::size_t N = helpers::dynamic_extent>
using PLMD::View< T, N >::const_iterator = const pointer

◆ const_reference

template<typename T, std::size_t N = helpers::dynamic_extent>
using PLMD::View< T, N >::const_reference = const value_type &

◆ iterator

template<typename T, std::size_t N = helpers::dynamic_extent>
using PLMD::View< T, N >::iterator = pointer

◆ pointer

template<typename T, std::size_t N = helpers::dynamic_extent>
using PLMD::View< T, N >::pointer = value_type *

◆ reference

template<typename T, std::size_t N = helpers::dynamic_extent>
using PLMD::View< T, N >::reference = value_type &

◆ value_type

template<typename T, std::size_t N = helpers::dynamic_extent>
using PLMD::View< T, N >::value_type = T

Constructor & Destructor Documentation

◆ View() [1/4]

template<typename T, std::size_t N = helpers::dynamic_extent>
template<size_t NN = N, typename = std::enable_if_t<NN != helpers::dynamic_extent>>
PLMD::View< T, N >::View ( pointer p)
inlineexplicitnoexcept

◆ View() [2/4]

template<typename T, std::size_t N = helpers::dynamic_extent>
PLMD::View< T, N >::View ( pointer p,
std::size_t const NN )
inlinenoexcept

◆ View() [3/4]

template<typename T, std::size_t N = helpers::dynamic_extent>
PLMD::View< T, N >::View ( const View< T, N > & )
defaultnoexcept

◆ View() [4/4]

template<typename T, std::size_t N = helpers::dynamic_extent>
PLMD::View< T, N >::View ( View< T, N > && )
defaultnoexcept

Member Function Documentation

◆ begin() [1/2]

template<typename T, std::size_t N = helpers::dynamic_extent>
const_iterator PLMD::View< T, N >::begin ( ) const
inlineconstexprnoexcept

◆ begin() [2/2]

template<typename T, std::size_t N = helpers::dynamic_extent>
iterator PLMD::View< T, N >::begin ( )
inlineconstexprnoexcept

◆ cbegin()

template<typename T, std::size_t N = helpers::dynamic_extent>
const_iterator PLMD::View< T, N >::cbegin ( ) const
inlineconstexprnoexcept

◆ cend()

template<typename T, std::size_t N = helpers::dynamic_extent>
const_iterator PLMD::View< T, N >::cend ( ) const
inlineconstexprnoexcept

◆ copyConv()

template<typename T, std::size_t N = helpers::dynamic_extent>
template<size_t M = N, typename VT, unsigned VD>
auto & PLMD::View< T, N >::copyConv ( const VectorTyped< VT, VD > & v)
inlinenoexcept

assignment from a PLMD::VectorTyped explicitly request an eventual conversion

◆ data()

template<typename T, std::size_t N = helpers::dynamic_extent>
pointer PLMD::View< T, N >::data ( ) const
inlineconstexprnoexcept

return the pointer to the data

◆ end() [1/2]

template<typename T, std::size_t N = helpers::dynamic_extent>
const_iterator PLMD::View< T, N >::end ( ) const
inlineconstexprnoexcept

◆ end() [2/2]

template<typename T, std::size_t N = helpers::dynamic_extent>
iterator PLMD::View< T, N >::end ( )
inlineconstexprnoexcept

◆ modulo()

template<typename T, std::size_t N = helpers::dynamic_extent>
double PLMD::View< T, N >::modulo ( ) const
inlinenoexcept

◆ modulo2()

template<typename T, std::size_t N = helpers::dynamic_extent>
double PLMD::View< T, N >::modulo2 ( ) const
inlinenoexcept

◆ operator*=()

template<typename T, std::size_t N = helpers::dynamic_extent>
template<typename TT>
auto & PLMD::View< T, N >::operator*= ( const TT v)
inlinenoexcept

◆ operator+=()

template<typename T, std::size_t N = helpers::dynamic_extent>
template<size_t M = N, typename VT, unsigned VD>
auto & PLMD::View< T, N >::operator+= ( const VectorTyped< VT, VD > & v)
inlinenoexcept

◆ operator-=()

template<typename T, std::size_t N = helpers::dynamic_extent>
template<size_t M = N, typename VT, unsigned VD>
auto & PLMD::View< T, N >::operator-= ( const VectorTyped< VT, VD > & v)
inlinenoexcept

◆ operator/=()

template<typename T, std::size_t N = helpers::dynamic_extent>
template<typename TT>
auto & PLMD::View< T, N >::operator/= ( const TT v)
inlinenoexcept

◆ operator=() [1/3]

template<typename T, std::size_t N = helpers::dynamic_extent>
template<size_t M = N, typename VT, unsigned VD>
auto & PLMD::View< T, N >::operator= ( const VectorTyped< VT, VD > & v)
inlinenoexcept

assignment from a PLMD::VectorTyped of the same type

◆ operator=() [2/3]

template<typename T, std::size_t N = helpers::dynamic_extent>
View & PLMD::View< T, N >::operator= ( const View< T, N > & )
defaultnoexcept

◆ operator=() [3/3]

template<typename T, std::size_t N = helpers::dynamic_extent>
View & PLMD::View< T, N >::operator= ( View< T, N > && )
defaultnoexcept

◆ operator[]() [1/2]

template<typename T, std::size_t N = helpers::dynamic_extent>
const_reference PLMD::View< T, N >::operator[] ( size_t i) const
inlineconstexprnoexcept

returns the reference i-th element

◆ operator[]() [2/2]

template<typename T, std::size_t N = helpers::dynamic_extent>
reference PLMD::View< T, N >::operator[] ( size_t i)
inlineconstexprnoexcept

returns the reference i-th element

◆ size()

template<typename T, std::size_t N = helpers::dynamic_extent>
size_t PLMD::View< T, N >::size ( ) const
inlineconstexprnoexcept

◆ subview() [1/2]

template<typename T, std::size_t N = helpers::dynamic_extent>
template<size_t Offset, size_t Count = helpers::dynamic_extent>
auto PLMD::View< T, N >::subview ( ) const
inlineconstexprnoexcept

return a subview on consecutive elements

◆ subview() [2/2]

template<typename T, std::size_t N = helpers::dynamic_extent>
View< value_type, helpers::dynamic_extent > PLMD::View< T, N >::subview ( size_t offset,
size_t count = helpers::dynamic_extent ) const
inlineconstexprnoexcept

return a subview on consecutive elements

@TODO: enforce these or accept the risk of undefined behaviour in exchange for performance

◆ subview_n()

template<typename T, std::size_t N = helpers::dynamic_extent>
template<size_t Count>
View< value_type, Count > PLMD::View< T, N >::subview_n ( size_t offset) const
inlineconstexprnoexcept

return a subview of specific size consecutive elements

@TODO: enforce these or accept the risk of undefined behaviour in exchange for performance

◆ zero()

template<typename T, std::size_t N = helpers::dynamic_extent>
void PLMD::View< T, N >::zero ( )
inlinenoexcept

Member Data Documentation

◆ ptr_

template<typename T, std::size_t N = helpers::dynamic_extent>
pointer PLMD::View< T, N >::ptr_
private

◆ size_

template<typename T, std::size_t N = helpers::dynamic_extent>
std::size_t PLMD::View< T, N >::size_ {N}
private

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