VTK-m  2.2
Public Types | Public Member Functions | Private Types | List of all members
vtkm::cont::ArrayHandleDecorator< DecoratorImplT, ArrayTs > Class Template Reference

A fancy ArrayHandle that can be used to modify the results from one or more source ArrayHandle. More...

#include <ArrayHandleDecorator.h>

Inheritance diagram for vtkm::cont::ArrayHandleDecorator< DecoratorImplT, ArrayTs >:
vtkm::cont::ArrayHandle< T, StorageTag_ >

Public Types

using Thisclass = typename vtkm::cont::detail::GetTypeInParentheses< void(ArrayHandleDecorator< typename std::decay< DecoratorImplT >::type, typename std::decay< ArrayTs >::type... >) >::type
 
using Superclass = typename vtkm::cont::detail::GetTypeInParentheses< void(typename Traits::Superclass) >::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 Types inherited from vtkm::cont::ArrayHandle< T, StorageTag_ >
using ValueType = T
 
using StorageTag = StorageTag_
 
using StorageType = vtkm::cont::internal::Storage< ValueType, StorageTag >
 
using ReadPortalType = typename StorageType::ReadPortalType
 The type of portal used when accessing data in a read-only mode. More...
 
using WritePortalType = typename StorageType::WritePortalType
 The type of portal used when accessing data in a read-write mode. More...
 

Public Member Functions

 ArrayHandleDecorator ()
 
VTKM_CONT ArrayHandleDecorator (const Thisclass &src)
 
VTKM_CONT ArrayHandleDecorator (Thisclass &&src) noexcept
 
VTKM_CONT ArrayHandleDecorator (const vtkm::cont::ArrayHandle< typename Superclass::ValueType, typename Superclass::StorageTag > &src)
 
VTKM_CONT ArrayHandleDecorator (vtkm::cont::ArrayHandle< typename Superclass::ValueType, typename Superclass::StorageTag > &&src) noexcept
 
VTKM_CONT ArrayHandleDecorator (const std::vector< vtkm::cont::internal::Buffer > &buffers)
 
VTKM_CONT ArrayHandleDecorator (std::vector< vtkm::cont::internal::Buffer > &&buffers) noexcept
 
VTKM_CONT Thisclassoperator= (const Thisclass &src)
 
VTKM_CONT Thisclassoperator= (Thisclass &&src) noexcept
 
 ArrayHandleDecorator (vtkm::Id numValues, const typename std::decay< DecoratorImplT >::type &impl, const typename std::decay< ArrayTs >::type &... arrays)
 
- Public Member Functions inherited from vtkm::cont::ArrayHandle< T, StorageTag_ >
 ArrayHandle ()
 Constructs an empty ArrayHandle. More...
 
 ArrayHandle (const vtkm::cont::ArrayHandle< ValueType, StorageTag > &src)
 Copy constructor. More...
 
 ArrayHandle (vtkm::cont::ArrayHandle< ValueType, StorageTag > &&src) noexcept
 Move constructor. More...
 
 ArrayHandle (const std::vector< vtkm::cont::internal::Buffer > &buffers)
 Special constructor for subclass specializations that need to set the initial state array. More...
 
 ArrayHandle (std::vector< vtkm::cont::internal::Buffer > &&buffers) noexcept
 Special constructor for subclass specializations that need to set the initial state array. More...
 
 ~ArrayHandle ()
 Destructs an empty ArrayHandle. More...
 
vtkm::cont::ArrayHandle< ValueType, StorageTag > & operator= (const vtkm::cont::ArrayHandle< ValueType, StorageTag > &src)
 Shallow copies an ArrayHandle. More...
 
vtkm::cont::ArrayHandle< ValueType, StorageTag > & operator= (vtkm::cont::ArrayHandle< ValueType, StorageTag > &&src) noexcept
 Move and Assignment of an ArrayHandle. More...
 
bool operator== (const ArrayHandle< ValueType, StorageTag > &rhs) const
 Like a pointer, two ArrayHandles are considered equal if they point to the same location in memory. More...
 
bool operator!= (const ArrayHandle< ValueType, StorageTag > &rhs) const
 
template<typename VT , typename ST >
bool operator== (const ArrayHandle< VT, ST > &) const
 
template<typename VT , typename ST >
bool operator!= (const ArrayHandle< VT, ST > &) const
 
StorageType GetStorage () const
 Get the storage. More...
 
ReadPortalType ReadPortal () const
 Get an array portal that can be used in the control environment. More...
 
ReadPortalType ReadPortal (vtkm::cont::Token &token) const
 The type of portal used when accessing data in a read-only mode. More...
 
WritePortalType WritePortal () const
 Get an array portal that can be used in the control environment. More...
 
WritePortalType WritePortal (vtkm::cont::Token &token) const
 Get an array portal that can be used in the control environment. More...
 
vtkm::Id GetNumberOfValues () const
 Returns the number of entries in the array. More...
 
vtkm::IdComponent GetNumberOfComponentsFlat () const
 Returns the total number of components for each value in the array. More...
 
void Allocate (vtkm::Id numberOfValues, vtkm::CopyFlag preserve, vtkm::cont::Token &token) const
 Allocates an array large enough to hold the given number of values. More...
 
void Allocate (vtkm::Id numberOfValues, vtkm::CopyFlag preserve=vtkm::CopyFlag::Off) const
 Allocates an array large enough to hold the given number of values. More...
 
void AllocateAndFill (vtkm::Id numberOfValues, const ValueType &fillValue, vtkm::CopyFlag preserve, vtkm::cont::Token &token) const
 Allocates an array and fills it with an initial value. More...
 
void AllocateAndFill (vtkm::Id numberOfValues, const ValueType &fillValue, vtkm::CopyFlag preserve=vtkm::CopyFlag::Off) const
 Allocates an array and fills it with an initial value. More...
 
void Fill (const ValueType &fillValue, vtkm::Id startIndex, vtkm::Id endIndex, vtkm::cont::Token &token) const
 Fills the array with a given value. More...
 
void Fill (const ValueType &fillValue, vtkm::Id startIndex, vtkm::Id endIndex) const
 Fills the array with a given value. More...
 
void Fill (const ValueType &fillValue, vtkm::Id startIndex=0) const
 Fills the array with a given value. More...
 
void ReleaseResourcesExecution () const
 Releases any resources being used in the execution environment (that are not being shared by the control environment). More...
 
void ReleaseResources () const
 Releases all resources in both the control and execution environments. More...
 
ReadPortalType PrepareForInput (vtkm::cont::DeviceAdapterId device, vtkm::cont::Token &token) const
 Prepares this array to be used as an input to an operation in the execution environment. More...
 
WritePortalType PrepareForInPlace (vtkm::cont::DeviceAdapterId device, vtkm::cont::Token &token) const
 Prepares this array to be used in an in-place operation (both as input and output) in the execution environment. More...
 
WritePortalType PrepareForOutput (vtkm::Id numberOfValues, vtkm::cont::DeviceAdapterId device, vtkm::cont::Token &token) const
 Prepares (allocates) this array to be used as an output from an operation in the execution environment. More...
 
bool IsOnDevice (vtkm::cont::DeviceAdapterId device) const
 Returns true if the ArrayHandle's data is on the given device. More...
 
bool IsOnHost () const
 Returns true if the ArrayHandle's data is on the host. More...
 
void SyncControlArray () const
 Synchronizes the control array with the execution array. More...
 
void Enqueue (const vtkm::cont::Token &token) const
 Enqueue a token for access to this ArrayHandle. More...
 
void DeepCopyFrom (const vtkm::cont::ArrayHandle< ValueType, StorageTag > &source) const
 Deep copies the data in the array. More...
 
const std::vector< vtkm::cont::internal::Buffer > & GetBuffers () const
 Returns the internal Buffer structures that hold the data. More...
 
std::vector< vtkm::cont::internal::Buffer > & GetBuffers ()
 

Private Types

using Traits = internal::DecoratorHandleTraits< typename std::decay< DecoratorImplT >::type, typename std::decay< ArrayTs >::type... >
 

Additional Inherited Members

- Protected Member Functions inherited from vtkm::cont::ArrayHandle< T, StorageTag_ >
void SetBuffer (vtkm::IdComponent index, const vtkm::cont::internal::Buffer &buffer)
 
void SetBuffers (const std::vector< vtkm::cont::internal::Buffer > &buffers)
 
void SetBuffers (std::vector< vtkm::cont::internal::Buffer > &&buffers)
 

Detailed Description

template<typename DecoratorImplT, typename... ArrayTs>
class vtkm::cont::ArrayHandleDecorator< DecoratorImplT, ArrayTs >

A fancy ArrayHandle that can be used to modify the results from one or more source ArrayHandle.

ArrayHandleDecorator is given a DecoratorImplT class and a list of one or more source ArrayHandles. There are no restrictions on the size or type of the source ArrayHandles.

The decorator implementation class is described below:

struct ExampleDecoratorImplementation
{
// Takes one portal for each source array handle (only two shown).
// Returns a functor that defines:
//
// VTKM_EXEC_CONT ValueType operator()(vtkm::Id id) const;
//
// which takes an index and returns a value which should be produced by
// the source arrays somehow. This ValueType will be the ValueType of the
// ArrayHandleDecorator.
//
// Both SomeFunctor::operator() and CreateFunctor must be const.
//
template <typename Portal1Type, typename Portal2Type>
SomeFunctor CreateFunctor(Portal1Type portal1, Portal2Type portal2) const;
// Takes one portal for each source array handle (only two shown).
// Returns a functor that defines:
//
// VTKM_EXEC_CONT void operator()(vtkm::Id id, ValueType val) const;
//
// which takes an index and a value, which should be used to modify one
// or more of the source arrays.
//
// CreateInverseFunctor is optional; if not provided, the
// ArrayHandleDecorator will be read-only. In addition, if all of the
// source ArrayHandles are read-only, the inverse functor will not be used
// and the ArrayHandleDecorator will be read only.
//
// Both SomeInverseFunctor::operator() and CreateInverseFunctor must be
// const.
//
template <typename Portal1Type, typename Portal2Type>
SomeInverseFunctor CreateInverseFunctor(Portal1Type portal1,
Portal2Type portal2) const;
// Given a set of ArrayHandles and a size, implement what should happen
// to the source ArrayHandles when Allocate() is called on the decorator
// handle.
//
// AllocateSourceArrays is optional; if not provided, the
// ArrayHandleDecorator will throw if its Allocate method is called. If
// an implementation is present and doesn't throw, the
// ArrayHandleDecorator's internal state is updated to show `size` as the
// number of values.
template <typename Array1Type, typename Array2Type>
void AllocateSourceArrays(vtkm::Id size,
vtkm::CopyFlag preserve,
Array1Type array1,
Array2Type array2) const;
};

There are several example DecoratorImpl classes provided in the UnitTestArrayHandleDecorator test file.

Member Typedef Documentation

◆ ReadPortalType

template<typename DecoratorImplT , typename... ArrayTs>
using vtkm::cont::ArrayHandleDecorator< DecoratorImplT, ArrayTs >::ReadPortalType = typename Superclass::ReadPortalType

◆ StorageTag

template<typename DecoratorImplT , typename... ArrayTs>
using vtkm::cont::ArrayHandleDecorator< DecoratorImplT, ArrayTs >::StorageTag = typename Superclass::StorageTag

◆ StorageType

template<typename DecoratorImplT , typename... ArrayTs>
using vtkm::cont::ArrayHandleDecorator< DecoratorImplT, ArrayTs >::StorageType = typename Superclass::StorageType

◆ Superclass

template<typename DecoratorImplT , typename... ArrayTs>
using vtkm::cont::ArrayHandleDecorator< DecoratorImplT, ArrayTs >::Superclass = typename vtkm::cont::detail::GetTypeInParentheses<void (typename Traits::Superclass) >::type

◆ Thisclass

template<typename DecoratorImplT , typename... ArrayTs>
using vtkm::cont::ArrayHandleDecorator< DecoratorImplT, ArrayTs >::Thisclass = typename vtkm::cont::detail::GetTypeInParentheses<void (ArrayHandleDecorator<typename std::decay<DecoratorImplT>::type, typename std::decay<ArrayTs>::type...>) >::type

◆ Traits

template<typename DecoratorImplT , typename... ArrayTs>
using vtkm::cont::ArrayHandleDecorator< DecoratorImplT, ArrayTs >::Traits = internal::DecoratorHandleTraits<typename std::decay<DecoratorImplT>::type, typename std::decay<ArrayTs>::type...>
private

◆ ValueType

template<typename DecoratorImplT , typename... ArrayTs>
using vtkm::cont::ArrayHandleDecorator< DecoratorImplT, ArrayTs >::ValueType = typename Superclass::ValueType

◆ WritePortalType

template<typename DecoratorImplT , typename... ArrayTs>
using vtkm::cont::ArrayHandleDecorator< DecoratorImplT, ArrayTs >::WritePortalType = typename Superclass::WritePortalType

Constructor & Destructor Documentation

◆ ArrayHandleDecorator() [1/8]

template<typename DecoratorImplT , typename... ArrayTs>
vtkm::cont::ArrayHandleDecorator< DecoratorImplT, ArrayTs >::ArrayHandleDecorator ( )
inline

◆ ArrayHandleDecorator() [2/8]

template<typename DecoratorImplT , typename... ArrayTs>
VTKM_CONT vtkm::cont::ArrayHandleDecorator< DecoratorImplT, ArrayTs >::ArrayHandleDecorator ( const Thisclass src)
inline

◆ ArrayHandleDecorator() [3/8]

template<typename DecoratorImplT , typename... ArrayTs>
VTKM_CONT vtkm::cont::ArrayHandleDecorator< DecoratorImplT, ArrayTs >::ArrayHandleDecorator ( Thisclass &&  src)
inlinenoexcept

◆ ArrayHandleDecorator() [4/8]

template<typename DecoratorImplT , typename... ArrayTs>
VTKM_CONT vtkm::cont::ArrayHandleDecorator< DecoratorImplT, ArrayTs >::ArrayHandleDecorator ( const vtkm::cont::ArrayHandle< typename Superclass::ValueType, typename Superclass::StorageTag > &  src)
inline

◆ ArrayHandleDecorator() [5/8]

template<typename DecoratorImplT , typename... ArrayTs>
VTKM_CONT vtkm::cont::ArrayHandleDecorator< DecoratorImplT, ArrayTs >::ArrayHandleDecorator ( vtkm::cont::ArrayHandle< typename Superclass::ValueType, typename Superclass::StorageTag > &&  src)
inlinenoexcept

◆ ArrayHandleDecorator() [6/8]

template<typename DecoratorImplT , typename... ArrayTs>
VTKM_CONT vtkm::cont::ArrayHandleDecorator< DecoratorImplT, ArrayTs >::ArrayHandleDecorator ( const std::vector< vtkm::cont::internal::Buffer > &  buffers)
inlineexplicit

◆ ArrayHandleDecorator() [7/8]

template<typename DecoratorImplT , typename... ArrayTs>
VTKM_CONT vtkm::cont::ArrayHandleDecorator< DecoratorImplT, ArrayTs >::ArrayHandleDecorator ( std::vector< vtkm::cont::internal::Buffer > &&  buffers)
inlineexplicitnoexcept

◆ ArrayHandleDecorator() [8/8]

template<typename DecoratorImplT , typename... ArrayTs>
vtkm::cont::ArrayHandleDecorator< DecoratorImplT, ArrayTs >::ArrayHandleDecorator ( vtkm::Id  numValues,
const typename std::decay< DecoratorImplT >::type &  impl,
const typename std::decay< ArrayTs >::type &...  arrays 
)
inline

Member Function Documentation

◆ operator=() [1/2]

template<typename DecoratorImplT , typename... ArrayTs>
VTKM_CONT Thisclass& vtkm::cont::ArrayHandleDecorator< DecoratorImplT, ArrayTs >::operator= ( const Thisclass src)
inline

◆ operator=() [2/2]

template<typename DecoratorImplT , typename... ArrayTs>
VTKM_CONT Thisclass& vtkm::cont::ArrayHandleDecorator< DecoratorImplT, ArrayTs >::operator= ( Thisclass &&  src)
inlinenoexcept

The documentation for this class was generated from the following file:
vtkm::cont::Token
A token to hold the scope of an ArrayHandle or other object.
Definition: Token.h:35
VTKM_CONT
#define VTKM_CONT
Definition: ExportMacros.h:57
vtkm::Id
vtkm::Int64 Id
Base type to use to index arrays.
Definition: Types.h:227
vtkm::CopyFlag
CopyFlag
Identifier used to specify whether a function should deep copy data.
Definition: Flags.h:17