VTK-m  1.8
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 Member Functions

 VTKM_ARRAY_HANDLE_SUBCLASS (ArrayHandleDecorator,(ArrayHandleDecorator< typename std::decay< DecoratorImplT >::type, typename std::decay< ArrayTs >::type... >),(typename Traits::Superclass))
 
VTKM_CONT 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_ >
template<typename Device >
struct VTKM_DEPRECATED (1.6, "Use ReadPortalType and WritePortalType.") ExecutionTypes
 
VTKM_CONT ArrayHandle ()
 Constructs an empty ArrayHandle. More...
 
VTKM_CONT ArrayHandle (const vtkm::cont::ArrayHandle< ValueType, StorageTag > &src)
 Copy constructor. More...
 
VTKM_CONT ArrayHandle (vtkm::cont::ArrayHandle< ValueType, StorageTag > &&src) noexcept
 Move constructor. More...
 
VTKM_CONT ~ArrayHandle ()
 Destructs an empty ArrayHandle. More...
 
VTKM_CONT vtkm::cont::ArrayHandle< ValueType, StorageTag > & operator= (const vtkm::cont::ArrayHandle< ValueType, StorageTag > &src)
 Copies an ArrayHandle. More...
 
VTKM_CONT vtkm::cont::ArrayHandle< ValueType, StorageTag > & operator= (vtkm::cont::ArrayHandle< ValueType, StorageTag > &&src) noexcept
 Move and Assignment of an ArrayHandle. More...
 
VTKM_CONT 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...
 
VTKM_CONT bool operator!= (const ArrayHandle< ValueType, StorageTag > &rhs) const
 
template<typename VT , typename ST >
VTKM_CONT bool operator== (const ArrayHandle< VT, ST > &) const
 
template<typename VT , typename ST >
VTKM_CONT bool operator!= (const ArrayHandle< VT, ST > &) const
 
VTKM_CONT StorageType GetStorage () const
 Get the storage. More...
 
VTKM_CONT VTKM_DEPRECATED (1.6, "Use ArrayHandle::WritePortal() instead. " "Note that the returned portal will lock the array while it is in scope.") VTKM_CONT VTKM_DEPRECATED(1.6
 Get the array portal of the control array. More...
 
VTKM_CONT Use ArrayHandle::ReadPortal () instead. " "Note that the returned portal will lock the array while it is in scope.") VTKM_CONT ReadPortalType ReadPortal() const
 Get an array portal that can be used in the control environment. More...
 
VTKM_CONT WritePortalType WritePortal () const
 Get an array portal that can be used in the control environment. More...
 
VTKM_CONT vtkm::Id GetNumberOfValues () const
 Returns the number of entries in the array. More...
 
 VTKM_DEPRECATED (1.6, "Use Allocate(n, vtkm::CopyFlag::On) instead of Shrink(n).") VTKM_CONT void Shrink(vtkm
 
VTKM_CONT void ReleaseResourcesExecution () const
 Releases any resources being used in the execution environment (that are not being shared by the control environment). More...
 
VTKM_CONT void ReleaseResources () const
 Releases all resources in both the control and execution environments. More...
 
VTKM_CONT 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...
 
VTKM_CONT 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...
 
VTKM_CONT 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...
 
VTKM_CONT VTKM_DEPRECATED (1.6, "PrepareForInput now requires a vtkm::cont::Token object.") ReadPortalType PrepareForInput(vtkm
 
VTKM_CONT ArrayHandle (const std::vector< vtkm::cont::internal::Buffer > &buffers)
 
VTKM_CONT ArrayHandle (std::vector< vtkm::cont::internal::Buffer > &&buffers) noexcept
 
VTKM_CONT ArrayHandle (const vtkm::cont::internal::Buffer *buffers)
 
VTKM_CONT 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...
 
VTKM_CONT 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...
 
VTKM_CONT 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...
 
VTKM_CONT 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...
 
VTKM_CONT void Fill (const ValueType &fillValue, vtkm::Id startIndex, vtkm::Id endIndex, vtkm::cont::Token &token) const
 Fills the array with a given value. More...
 
VTKM_CONT void Fill (const ValueType &fillValue, vtkm::Id startIndex, vtkm::Id endIndex) const
 Fills the array with a given value. More...
 
VTKM_CONT void Fill (const ValueType &fillValue, vtkm::Id startIndex=0) const
 Fills the array with a given value. More...
 

Private Types

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

Additional Inherited Members

- 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
 
using WritePortalType = typename StorageType::WritePortalType
 
using instead = WritePortalType
 
using instead = ReadPortalType
 
- Static Public Member Functions inherited from vtkm::cont::ArrayHandle< T, StorageTag_ >
static constexpr VTKM_CONT vtkm::IdComponent GetNumberOfBuffers ()
 
- Protected Member Functions inherited from vtkm::cont::ArrayHandle< T, StorageTag_ >
VTKM_CONT void SetBuffer (vtkm::IdComponent index, const vtkm::cont::internal::Buffer &buffer)
 Returns true if the ArrayHandle's data is on the given device. More...
 
template<typename BufferContainer >
VTKM_CONT void SetBuffers (const BufferContainer &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

◆ StorageType

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

◆ 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

Constructor & Destructor Documentation

◆ ArrayHandleDecorator()

template<typename DecoratorImplT , typename... ArrayTs>
VTKM_CONT 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

◆ VTKM_ARRAY_HANDLE_SUBCLASS()

template<typename DecoratorImplT , typename... ArrayTs>
vtkm::cont::ArrayHandleDecorator< DecoratorImplT, ArrayTs >::VTKM_ARRAY_HANDLE_SUBCLASS ( ArrayHandleDecorator< DecoratorImplT, ArrayTs >  ,
(ArrayHandleDecorator< typename std::decay< DecoratorImplT >::type, typename std::decay< ArrayTs >::type... >)  ,
(typename Traits::Superclass  
)

The documentation for this class was generated from the following file:
vtkm::Id
vtkm::Int32 Id
Represents an ID (index into arrays).
Definition: Types.h:191
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::CopyFlag
CopyFlag
Definition: Flags.h:16