dune-common 2.9.0
Loading...
Searching...
No Matches
Public Types | Public Member Functions | List of all members
Dune::Simd::VcImpl::Proxy< V > Class Template Reference

A reference-like proxy for elements of random-access vectors. More...

#include <dune/common/simd/vc.hh>

Public Types

using value_type = typename V::value_type
 

Public Member Functions

 Proxy (std::size_t idx, V &vec)
 
 Proxy (const Proxy &)=delete
 
 Proxy (Proxy &&)=default
 
 operator value_type () const
 
 DUNE_SIMD_VC_ASSIGNMENT (=)
 
DUNE_SIMD_VC_ASSIGNMENT * DUNE_SIMD_VC_ASSIGNMENT (/=);DUNE_SIMD_VC_ASSIGNMENT(%=
 
 DUNE_SIMD_VC_ASSIGNMENT (+=)
 
 DUNE_SIMD_VC_ASSIGNMENT (-=)
 
 DUNE_SIMD_VC_ASSIGNMENT (<<=)
 
 DUNE_SIMD_VC_ASSIGNMENT (> >=)
 
DUNE_SIMD_VC_ASSIGNMENT & DUNE_SIMD_VC_ASSIGNMENT (^=);DUNE_SIMD_VC_ASSIGNMENT(|=
 
template<class T = value_type, class = std::enable_if_t<!std::is_same<T, bool>::value>>
Proxy operator++ ()
 
template<class T = value_type, class = std::enable_if_t<!std::is_same<T, bool>::value>>
Proxy operator-- ()
 
template<class T = value_type, class = std::enable_if_t<!std::is_same<T, bool>::value>>
value_type operator++ (int)
 
template<class T = value_type, class = std::enable_if_t<!std::is_same<T, bool>::value>>
value_type operator-- (int)
 
DUNE_SIMD_VC_BINARY * DUNE_SIMD_VC_BINARY (/);DUNE_SIMD_VC_BINARY(%
 
 DUNE_SIMD_VC_BINARY (+)
 
 DUNE_SIMD_VC_BINARY (-)
 
 DUNE_SIMD_VC_BINARY (<<)
 
 DUNE_SIMD_VC_BINARY (> >)
 
DUNE_SIMD_VC_BINARY & DUNE_SIMD_VC_BINARY (^);DUNE_SIMD_VC_BINARY(|
 
 DUNE_SIMD_VC_BINARY (<)
 
 DUNE_SIMD_VC_BINARY (>)
 
 DUNE_SIMD_VC_BINARY (<=)
 
 DUNE_SIMD_VC_BINARY (>=)
 
 DUNE_SIMD_VC_BINARY (==)
 
 DUNE_SIMD_VC_BINARY (!=)
 
template<class T , class Abi , class = std::enable_if_t<std::is_convertible<value_type, T>::value>>
 operator Vc::Vector< T, Abi > () &&
 
template<class T , std::size_t n, class Vec , std::size_t m, class = std::enable_if_t<std::is_convertible<value_type, T>::value>>
 operator Vc::SimdArray< T, n, Vec, m > () &&
 
DUNE_SIMD_VC_ASSIGN * DUNE_SIMD_VC_ASSIGN (/=);DUNE_SIMD_VC_ASSIGN(%=
 
 DUNE_SIMD_VC_ASSIGN (+=)
 
 DUNE_SIMD_VC_ASSIGN (-=)
 
DUNE_SIMD_VC_ASSIGN & DUNE_SIMD_VC_ASSIGN (^=);DUNE_SIMD_VC_ASSIGN(|=
 
 DUNE_SIMD_VC_ASSIGN (<<=)
 
 DUNE_SIMD_VC_ASSIGN (> >=)
 

Detailed Description

template<class V>
class Dune::Simd::VcImpl::Proxy< V >

A reference-like proxy for elements of random-access vectors.

This is necessary because Vc's lane-access operation return a proxy that cannot constructed by non-Vc code (i.e. code that isn't explicitly declared friend). This means in particular that there is no copy/move constructor, meaning we cannot return such proxies from our own functions, such as lane(). To work around this, we define our own proxy class which internally holds a reference to the vector and a lane index.

Note: this should be unnecessary with C++17, as just returning a temporary object should not involve copying it.

Member Typedef Documentation

◆ value_type

template<class V >
using Dune::Simd::VcImpl::Proxy< V >::value_type = typename V::value_type

Constructor & Destructor Documentation

◆ Proxy() [1/3]

template<class V >
Dune::Simd::VcImpl::Proxy< V >::Proxy ( std::size_t  idx,
V &  vec 
)
inline

◆ Proxy() [2/3]

template<class V >
Dune::Simd::VcImpl::Proxy< V >::Proxy ( const Proxy< V > &  )
delete

◆ Proxy() [3/3]

template<class V >
Dune::Simd::VcImpl::Proxy< V >::Proxy ( Proxy< V > &&  )
default

Member Function Documentation

◆ DUNE_SIMD_VC_ASSIGN() [1/6]

template<class V >
Dune::Simd::VcImpl::Proxy< V >::DUNE_SIMD_VC_ASSIGN ( )

◆ DUNE_SIMD_VC_ASSIGN() [2/6]

template<class V >
Dune::Simd::VcImpl::Proxy< V >::DUNE_SIMD_VC_ASSIGN ( )

◆ DUNE_SIMD_VC_ASSIGN() [3/6]

template<class V >
DUNE_SIMD_VC_ASSIGN * Dune::Simd::VcImpl::Proxy< V >::DUNE_SIMD_VC_ASSIGN ( )

◆ DUNE_SIMD_VC_ASSIGN() [4/6]

template<class V >
Dune::Simd::VcImpl::Proxy< V >::DUNE_SIMD_VC_ASSIGN ( <<  )

◆ DUNE_SIMD_VC_ASSIGN() [5/6]

template<class V >
Dune::Simd::VcImpl::Proxy< V >::DUNE_SIMD_VC_ASSIGN ( >=  )

◆ DUNE_SIMD_VC_ASSIGN() [6/6]

template<class V >
DUNE_SIMD_VC_ASSIGN & Dune::Simd::VcImpl::Proxy< V >::DUNE_SIMD_VC_ASSIGN ( )

◆ DUNE_SIMD_VC_ASSIGNMENT() [1/7]

template<class V >
Dune::Simd::VcImpl::Proxy< V >::DUNE_SIMD_VC_ASSIGNMENT ( )

◆ DUNE_SIMD_VC_ASSIGNMENT() [2/7]

template<class V >
Dune::Simd::VcImpl::Proxy< V >::DUNE_SIMD_VC_ASSIGNMENT ( )

◆ DUNE_SIMD_VC_ASSIGNMENT() [3/7]

template<class V >
DUNE_SIMD_VC_ASSIGNMENT * Dune::Simd::VcImpl::Proxy< V >::DUNE_SIMD_VC_ASSIGNMENT ( )

◆ DUNE_SIMD_VC_ASSIGNMENT() [4/7]

template<class V >
Dune::Simd::VcImpl::Proxy< V >::DUNE_SIMD_VC_ASSIGNMENT ( <<  )

◆ DUNE_SIMD_VC_ASSIGNMENT() [5/7]

template<class V >
Dune::Simd::VcImpl::Proxy< V >::DUNE_SIMD_VC_ASSIGNMENT ( )

◆ DUNE_SIMD_VC_ASSIGNMENT() [6/7]

template<class V >
Dune::Simd::VcImpl::Proxy< V >::DUNE_SIMD_VC_ASSIGNMENT ( >=  )

◆ DUNE_SIMD_VC_ASSIGNMENT() [7/7]

template<class V >
DUNE_SIMD_VC_ASSIGNMENT & Dune::Simd::VcImpl::Proxy< V >::DUNE_SIMD_VC_ASSIGNMENT ( )

◆ DUNE_SIMD_VC_BINARY() [1/12]

template<class V >
Dune::Simd::VcImpl::Proxy< V >::DUNE_SIMD_VC_BINARY ( )

◆ DUNE_SIMD_VC_BINARY() [2/12]

template<class V >
Dune::Simd::VcImpl::Proxy< V >::DUNE_SIMD_VC_BINARY ( )

◆ DUNE_SIMD_VC_BINARY() [3/12]

template<class V >
Dune::Simd::VcImpl::Proxy< V >::DUNE_SIMD_VC_BINARY ( )

◆ DUNE_SIMD_VC_BINARY() [4/12]

template<class V >
DUNE_SIMD_VC_BINARY * Dune::Simd::VcImpl::Proxy< V >::DUNE_SIMD_VC_BINARY ( )

◆ DUNE_SIMD_VC_BINARY() [5/12]

template<class V >
Dune::Simd::VcImpl::Proxy< V >::DUNE_SIMD_VC_BINARY ( )

◆ DUNE_SIMD_VC_BINARY() [6/12]

template<class V >
Dune::Simd::VcImpl::Proxy< V >::DUNE_SIMD_VC_BINARY ( <<  )

◆ DUNE_SIMD_VC_BINARY() [7/12]

template<class V >
Dune::Simd::VcImpl::Proxy< V >::DUNE_SIMD_VC_BINARY ( <=  )

◆ DUNE_SIMD_VC_BINARY() [8/12]

template<class V >
Dune::Simd::VcImpl::Proxy< V >::DUNE_SIMD_VC_BINARY ( )

◆ DUNE_SIMD_VC_BINARY() [9/12]

template<class V >
Dune::Simd::VcImpl::Proxy< V >::DUNE_SIMD_VC_BINARY ( )

◆ DUNE_SIMD_VC_BINARY() [10/12]

template<class V >
Dune::Simd::VcImpl::Proxy< V >::DUNE_SIMD_VC_BINARY ( )

◆ DUNE_SIMD_VC_BINARY() [11/12]

template<class V >
Dune::Simd::VcImpl::Proxy< V >::DUNE_SIMD_VC_BINARY ( >=  )

◆ DUNE_SIMD_VC_BINARY() [12/12]

template<class V >
DUNE_SIMD_VC_BINARY & Dune::Simd::VcImpl::Proxy< V >::DUNE_SIMD_VC_BINARY ( )

◆ operator value_type()

template<class V >
Dune::Simd::VcImpl::Proxy< V >::operator value_type ( ) const
inline

◆ operator Vc::SimdArray< T, n, Vec, m >()

template<class V >
template<class T , std::size_t n, class Vec , std::size_t m, class = std::enable_if_t<std::is_convertible<value_type, T>::value>>
Dune::Simd::VcImpl::Proxy< V >::operator Vc::SimdArray< T, n, Vec, m > ( ) &&
inline

◆ operator Vc::Vector< T, Abi >()

template<class V >
template<class T , class Abi , class = std::enable_if_t<std::is_convertible<value_type, T>::value>>
Dune::Simd::VcImpl::Proxy< V >::operator Vc::Vector< T, Abi > ( ) &&
inline

◆ operator++() [1/2]

template<class V >
template<class T = value_type, class = std::enable_if_t<!std::is_same<T, bool>::value>>
Proxy Dune::Simd::VcImpl::Proxy< V >::operator++ ( )
inline

◆ operator++() [2/2]

template<class V >
template<class T = value_type, class = std::enable_if_t<!std::is_same<T, bool>::value>>
value_type Dune::Simd::VcImpl::Proxy< V >::operator++ ( int  )
inline

◆ operator--() [1/2]

template<class V >
template<class T = value_type, class = std::enable_if_t<!std::is_same<T, bool>::value>>
Proxy Dune::Simd::VcImpl::Proxy< V >::operator-- ( )
inline

◆ operator--() [2/2]

template<class V >
template<class T = value_type, class = std::enable_if_t<!std::is_same<T, bool>::value>>
value_type Dune::Simd::VcImpl::Proxy< V >::operator-- ( int  )
inline

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