Viskores  1.0
Public Types | Public Member Functions | Private Types | List of all members
viskores::cont::ArrayHandleMultiplexer< ArrayHandleTypes > Class Template Reference

An ArrayHandle that can behave like several other handles. More...

#include <ArrayHandleMultiplexer.h>

Inheritance diagram for viskores::cont::ArrayHandleMultiplexer< ArrayHandleTypes >:
viskores::cont::ArrayHandle< detail::ArrayHandleMultiplexerTraits< ArrayHandleTypes... >::ValueType, detail::ArrayHandleMultiplexerTraits< ArrayHandleTypes... >::StorageTag >

Public Types

using Thisclass = typename viskores::cont::detail::GetTypeInParentheses< void(ArrayHandleMultiplexer< ArrayHandleTypes... >) >::type
 
using Superclass = typename viskores::cont::detail::GetTypeInParentheses< void(viskores::cont::ArrayHandle< typename Traits::ValueType, typename Traits::StorageTag >) >::type
 
using ValueType = typename Superclass::ValueType
 
using StorageTag = typename Superclass::StorageTag
 
using StorageType = typename Superclass::StorageType
 
using ReadPortalType = typename Superclass::ReadPortalType
 
using WritePortalType = typename Superclass::WritePortalType
 

Public Member Functions

 ArrayHandleMultiplexer ()
 
VISKORES_CONT ArrayHandleMultiplexer (const Thisclass &src)
 
VISKORES_CONT ArrayHandleMultiplexer (Thisclass &&src) noexcept
 
VISKORES_CONT ArrayHandleMultiplexer (const viskores::cont::ArrayHandle< typename Superclass::ValueType, typename Superclass::StorageTag > &src)
 
VISKORES_CONT ArrayHandleMultiplexer (viskores::cont::ArrayHandle< typename Superclass::ValueType, typename Superclass::StorageTag > &&src) noexcept
 
VISKORES_CONT ArrayHandleMultiplexer (const std::vector< viskores::cont::internal::Buffer > &buffers)
 
VISKORES_CONT ArrayHandleMultiplexer (std::vector< viskores::cont::internal::Buffer > &&buffers) noexcept
 
VISKORES_CONT Thisclassoperator= (const Thisclass &src)
 
VISKORES_CONT Thisclassoperator= (Thisclass &&src) noexcept
 
template<typename RealStorageTag >
 ArrayHandleMultiplexer (const viskores::cont::ArrayHandle< ValueType, RealStorageTag > &src)
 
bool IsValid () const
 
template<typename S >
void SetArray (const viskores::cont::ArrayHandle< ValueType, S > &src)
 
auto GetArrayHandleVariant () const -> decltype(StorageType::GetArrayHandleVariant(this->GetBuffers()))
 

Private Types

using Traits = detail::ArrayHandleMultiplexerTraits< ArrayHandleTypes... >
 

Detailed Description

template<typename... ArrayHandleTypes>
class viskores::cont::ArrayHandleMultiplexer< ArrayHandleTypes >

An ArrayHandle that can behave like several other handles.

An ArrayHandleMultiplexer simply redirects its calls to another ArrayHandle. However the type of that ArrayHandle does not need to be (completely) known at runtime. Rather, ArrayHandleMultiplexer is defined over a set of possible ArrayHandle types. Any one of these ArrayHandles may be assigned to the ArrayHandleMultiplexer.

When a value is retreived from the ArrayHandleMultiplexer, the multiplexer checks to see which type of array is currently stored in it. It then redirects to the ArrayHandle of the appropriate type.

The ArrayHandleMultiplexer template parameters are all the ArrayHandle types it should support.

If only one template parameter is given, it is assumed to be the ValueType of the array. A default list of supported arrays is supported (see viskores::cont::internal::ArrayHandleMultiplexerDefaultArrays.) If multiple template parameters are given, they are all considered possible ArrayHandle types.

Member Typedef Documentation

◆ ReadPortalType

template<typename... ArrayHandleTypes>
using viskores::cont::ArrayHandleMultiplexer< ArrayHandleTypes >::ReadPortalType = typename Superclass::ReadPortalType

◆ StorageTag

template<typename... ArrayHandleTypes>
using viskores::cont::ArrayHandleMultiplexer< ArrayHandleTypes >::StorageTag = typename Superclass::StorageTag

◆ StorageType

template<typename... ArrayHandleTypes>
using viskores::cont::ArrayHandleMultiplexer< ArrayHandleTypes >::StorageType = typename Superclass::StorageType

◆ Superclass

template<typename... ArrayHandleTypes>
using viskores::cont::ArrayHandleMultiplexer< ArrayHandleTypes >::Superclass = typename viskores::cont::detail::GetTypeInParentheses<void (viskores::cont::ArrayHandle<typename Traits::ValueType, typename Traits::StorageTag>) >::type

◆ Thisclass

template<typename... ArrayHandleTypes>
using viskores::cont::ArrayHandleMultiplexer< ArrayHandleTypes >::Thisclass = typename viskores::cont::detail::GetTypeInParentheses<void (ArrayHandleMultiplexer<ArrayHandleTypes...>) >::type

◆ Traits

template<typename... ArrayHandleTypes>
using viskores::cont::ArrayHandleMultiplexer< ArrayHandleTypes >::Traits = detail::ArrayHandleMultiplexerTraits<ArrayHandleTypes...>
private

◆ ValueType

template<typename... ArrayHandleTypes>
using viskores::cont::ArrayHandleMultiplexer< ArrayHandleTypes >::ValueType = typename Superclass::ValueType

◆ WritePortalType

template<typename... ArrayHandleTypes>
using viskores::cont::ArrayHandleMultiplexer< ArrayHandleTypes >::WritePortalType = typename Superclass::WritePortalType

Constructor & Destructor Documentation

◆ ArrayHandleMultiplexer() [1/8]

template<typename... ArrayHandleTypes>
viskores::cont::ArrayHandleMultiplexer< ArrayHandleTypes >::ArrayHandleMultiplexer ( )
inline

◆ ArrayHandleMultiplexer() [2/8]

template<typename... ArrayHandleTypes>
VISKORES_CONT viskores::cont::ArrayHandleMultiplexer< ArrayHandleTypes >::ArrayHandleMultiplexer ( const Thisclass src)
inline

◆ ArrayHandleMultiplexer() [3/8]

template<typename... ArrayHandleTypes>
VISKORES_CONT viskores::cont::ArrayHandleMultiplexer< ArrayHandleTypes >::ArrayHandleMultiplexer ( Thisclass &&  src)
inlinenoexcept

◆ ArrayHandleMultiplexer() [4/8]

template<typename... ArrayHandleTypes>
VISKORES_CONT viskores::cont::ArrayHandleMultiplexer< ArrayHandleTypes >::ArrayHandleMultiplexer ( const viskores::cont::ArrayHandle< typename Superclass::ValueType, typename Superclass::StorageTag > &  src)
inline

◆ ArrayHandleMultiplexer() [5/8]

template<typename... ArrayHandleTypes>
VISKORES_CONT viskores::cont::ArrayHandleMultiplexer< ArrayHandleTypes >::ArrayHandleMultiplexer ( viskores::cont::ArrayHandle< typename Superclass::ValueType, typename Superclass::StorageTag > &&  src)
inlinenoexcept

◆ ArrayHandleMultiplexer() [6/8]

template<typename... ArrayHandleTypes>
VISKORES_CONT viskores::cont::ArrayHandleMultiplexer< ArrayHandleTypes >::ArrayHandleMultiplexer ( const std::vector< viskores::cont::internal::Buffer > &  buffers)
inlineexplicit

◆ ArrayHandleMultiplexer() [7/8]

template<typename... ArrayHandleTypes>
VISKORES_CONT viskores::cont::ArrayHandleMultiplexer< ArrayHandleTypes >::ArrayHandleMultiplexer ( std::vector< viskores::cont::internal::Buffer > &&  buffers)
inlineexplicitnoexcept

◆ ArrayHandleMultiplexer() [8/8]

template<typename... ArrayHandleTypes>
template<typename RealStorageTag >
viskores::cont::ArrayHandleMultiplexer< ArrayHandleTypes >::ArrayHandleMultiplexer ( const viskores::cont::ArrayHandle< ValueType, RealStorageTag > &  src)
inline

Member Function Documentation

◆ GetArrayHandleVariant()

template<typename... ArrayHandleTypes>
auto viskores::cont::ArrayHandleMultiplexer< ArrayHandleTypes >::GetArrayHandleVariant ( ) const -> decltype(StorageType::GetArrayHandleVariant(this->GetBuffers()))
inline

◆ IsValid()

template<typename... ArrayHandleTypes>
bool viskores::cont::ArrayHandleMultiplexer< ArrayHandleTypes >::IsValid ( ) const
inline

◆ operator=() [1/2]

template<typename... ArrayHandleTypes>
VISKORES_CONT Thisclass& viskores::cont::ArrayHandleMultiplexer< ArrayHandleTypes >::operator= ( const Thisclass src)
inline

◆ operator=() [2/2]

template<typename... ArrayHandleTypes>
VISKORES_CONT Thisclass& viskores::cont::ArrayHandleMultiplexer< ArrayHandleTypes >::operator= ( Thisclass &&  src)
inlinenoexcept

◆ SetArray()

template<typename... ArrayHandleTypes>
template<typename S >
void viskores::cont::ArrayHandleMultiplexer< ArrayHandleTypes >::SetArray ( const viskores::cont::ArrayHandle< ValueType, S > &  src)
inline

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