VTK-m  2.1
Public Types | Public Member Functions | List of all members
vtkm::worklet::Keys< T > Class Template Reference

Manage keys for a vtkm::worklet::WorkletReduceByKey. More...

#include <Keys.h>

Inheritance diagram for vtkm::worklet::Keys< T >:

Public Types

using KeyType = T
 
using KeyArrayHandleType = vtkm::cont::ArrayHandle< KeyType >
 
using ExecLookup = vtkm::exec::internal::ReduceByKeyLookup< typename KeyArrayHandleType::ReadPortalType, typename vtkm::cont::ArrayHandle< vtkm::Id >::ReadPortalType, typename vtkm::cont::ArrayHandle< vtkm::IdComponent >::ReadPortalType >
 

Public Member Functions

 Keys ()
 
template<typename KeyStorage >
 Keys (const vtkm::cont::ArrayHandle< KeyType, KeyStorage > &keys, vtkm::cont::DeviceAdapterId device=vtkm::cont::DeviceAdapterTagAny())
 Construct a Keys class from an array of keys. More...
 
template<typename KeyArrayType >
void BuildArrays (const KeyArrayType &keys, KeysSortType sort, vtkm::cont::DeviceAdapterId device=vtkm::cont::DeviceAdapterTagAny())
 Build the internal arrays without modifying the input. More...
 
template<typename KeyArrayType >
void BuildArraysInPlace (KeyArrayType &keys, KeysSortType sort, vtkm::cont::DeviceAdapterId device=vtkm::cont::DeviceAdapterTagAny())
 Build the internal arrays and also sort the input keys. More...
 
KeyArrayHandleType GetUniqueKeys () const
 Returns an array of unique keys. More...
 
vtkm::Id GetInputRange () const
 Returns the input range of a keys object when used as an input domain. More...
 
vtkm::cont::ArrayHandle< vtkm::IdGetSortedValuesMap () const
 Returns the array that maps each input value to an array of sorted keys. More...
 
vtkm::cont::ArrayHandle< vtkm::IdGetOffsets () const
 Returns an offsets array to group keys. More...
 
vtkm::Id GetNumberOfValues () const
 Returns the number of input keys and values used to build this structure. More...
 
ExecLookup PrepareForInput (vtkm::cont::DeviceAdapterId device, vtkm::cont::Token &token) const
 
bool operator== (const vtkm::worklet::Keys< KeyType > &other) const
 
bool operator!= (const vtkm::worklet::Keys< KeyType > &other) const
 

Detailed Description

template<typename T>
class vtkm::worklet::Keys< T >

Manage keys for a vtkm::worklet::WorkletReduceByKey.

The vtkm::worklet::WorkletReduceByKey worklet takes an array of keys for its input domain, finds all identical keys, and runs a worklet that produces a single value for every key given all matching values. This class is used as the associated input for the keys input domain.

Keys is templated on the key array handle type and accepts an instance of this array handle as its constructor. It builds the internal structures needed to use the keys.

The same Keys structure can be used for multiple different invokes of different or the same worklets. When used in this way, the processing done in the Keys structure is reused for all the invokes. This is more efficient than creating a different Keys structure for each invoke.

Member Typedef Documentation

◆ ExecLookup

template<typename T >
using vtkm::worklet::Keys< T >::ExecLookup = vtkm::exec::internal::ReduceByKeyLookup< typename KeyArrayHandleType::ReadPortalType, typename vtkm::cont::ArrayHandle<vtkm::Id>::ReadPortalType, typename vtkm::cont::ArrayHandle<vtkm::IdComponent>::ReadPortalType>

◆ KeyArrayHandleType

◆ KeyType

template<typename T >
using vtkm::worklet::Keys< T >::KeyType = T

Constructor & Destructor Documentation

◆ Keys() [1/2]

template<typename T >
vtkm::worklet::Keys< T >::Keys ( )
default

◆ Keys() [2/2]

template<typename T >
template<typename KeyStorage >
vtkm::worklet::Keys< T >::Keys ( const vtkm::cont::ArrayHandle< KeyType, KeyStorage > &  keys,
vtkm::cont::DeviceAdapterId  device = vtkm::cont::DeviceAdapterTagAny() 
)
inline

Construct a Keys class from an array of keys.

Given an array of keys, construct a Keys class that will manage using these keys to perform reduce-by-key operations.

The input keys object is not modified and the result is not stable sorted. This is the equivalent of calling BuildArrays(keys, KeysSortType::Unstable, device).

Member Function Documentation

◆ BuildArrays()

template<typename T >
template<typename KeyArrayType >
template VTKM_WORKLET_TEMPLATE_EXPORT VTKM_CONT void vtkm::worklet::Keys< T >::BuildArrays ( const KeyArrayType &  keys,
KeysSortType  sort,
vtkm::cont::DeviceAdapterId  device = vtkm::cont::DeviceAdapterTagAny() 
)

Build the internal arrays without modifying the input.

This is more efficient for stable sorted arrays, but requires an extra copy of the keys for unstable sorting.

◆ BuildArraysInPlace()

template<typename T >
template<typename KeyArrayType >
void vtkm::worklet::Keys< T >::BuildArraysInPlace ( KeyArrayType &  keys,
KeysSortType  sort,
vtkm::cont::DeviceAdapterId  device = vtkm::cont::DeviceAdapterTagAny() 
)

Build the internal arrays and also sort the input keys.

This is more efficient for unstable sorting, but requires an extra copy for stable sorting.

◆ GetInputRange()

template<typename T >
vtkm::Id vtkm::worklet::Keys< T >::GetInputRange ( ) const

Returns the input range of a keys object when used as an input domain.

This will be equal to the number of unique keys.

◆ GetNumberOfValues()

template<typename T >
vtkm::Id vtkm::worklet::Keys< T >::GetNumberOfValues ( ) const

Returns the number of input keys and values used to build this structure.

This is also the size of input arrays to a vtkm::worklet::WorkletReduceByKey.

◆ GetOffsets()

template<typename T >
vtkm::cont::ArrayHandle<vtkm::Id> vtkm::worklet::Keys< T >::GetOffsets ( ) const

Returns an offsets array to group keys.

Given an array of sorted keys (or more frequently values permuted to the sorting of the keys), this array of indices can be used as offsets for a vtkm::cont::ArrayHandleGroupVecVariable. This is an internal array that is seldom of use to code outside the vtkm::worklet::WorkletReduceByKey implementation.

◆ GetSortedValuesMap()

template<typename T >
vtkm::cont::ArrayHandle<vtkm::Id> vtkm::worklet::Keys< T >::GetSortedValuesMap ( ) const

Returns the array that maps each input value to an array of sorted keys.

This array is used internally as the indices to a vtkm::cont::ArrayHandlePermutation to order input values with the grouped keys so that they can then be grouped. This is an internal array that is seldom of use to code outside the vtkm::worklet::WorkletReduceByKey implementation.

◆ GetUniqueKeys()

template<typename T >
KeyArrayHandleType vtkm::worklet::Keys< T >::GetUniqueKeys ( ) const
inline

Returns an array of unique keys.

The order of keys in this array describes the order that result values will be placed in a vtkm::worklet::WorkletReduceByKey.

◆ operator!=()

template<typename T >
bool vtkm::worklet::Keys< T >::operator!= ( const vtkm::worklet::Keys< KeyType > &  other) const
inline

◆ operator==()

template<typename T >
bool vtkm::worklet::Keys< T >::operator== ( const vtkm::worklet::Keys< KeyType > &  other) const
inline

◆ PrepareForInput()

template<typename T >
ExecLookup vtkm::worklet::Keys< T >::PrepareForInput ( vtkm::cont::DeviceAdapterId  device,
vtkm::cont::Token token 
) const
inline

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