4#ifndef vtkImplicitArray_h 
    5#define vtkImplicitArray_h 
    7#include "vtkCommonCoreModule.h"  
  140#define vtkImplicitArrayTypeMacro(thisClass, superclass)                                           \ 
  141  vtkAbstractTypeMacroWithNewInstanceType(thisClass, superclass,                                   \ 
  142    vtkAOSDataArrayTemplate<thisClass::ValueTypeT>, typeid(thisClass).name());                     \ 
  145  vtkObjectBase* NewInstanceInternal() const override                                              \ 
  147    return vtkAOSDataArrayTemplate<thisClass::ValueTypeT>::New();                                  \ 
  153VTK_ABI_NAMESPACE_BEGIN
 
  154template <
class BackendT>
 
  157      typename vtk::detail::implicit_array_traits<BackendT>::rtype>
 
  161    "Supplied backend type does not have mandatory read trait. Must implement either map() const " 
  162    "or operator() const.");
 
  193    this->GetTypedTupleImpl<BackendT>(idx, tuple);
 
  206    return this->GetTypedComponentImpl<BackendT>(idx, comp);
 
  230  template <
typename... Params>
 
  233    this->
SetBackend(std::make_shared<BackendT>(std::forward<Params>(params)...));
 
  257    this->Initialize<BackendT>();
 
  272  template <
typename OtherBackend>
 
  275    static_assert(std::is_same<BackendT, OtherBackend>::value,
 
  276      "Cannot copy implicit array with one type of backend to an implicit array with a different " 
  321  template <
typename U>
 
  322  typename std::enable_if<vtk::detail::has_map_trait<U>::value, 
ValueType>::type GetValueImpl(
 
  325    return this->Backend->map(idx);
 
  333  template <
typename U>
 
  334  typename std::enable_if<vtk::detail::is_closure_trait<U>::value, 
ValueType>::type GetValueImpl(
 
  337    return (*this->Backend)(idx);
 
  345  template <
typename U>
 
  346  typename std::enable_if<vtk::detail::implicit_array_traits<U>::default_constructible, 
void>::type
 
  349    this->Backend = std::make_shared<BackendT>();
 
  357  template <
typename U>
 
  358  typename std::enable_if<!vtk::detail::implicit_array_traits<U>::default_constructible, 
void>::type
 
  361    this->Backend = 
nullptr;
 
  369  template <
typename U>
 
  370  typename std::enable_if<vtk::detail::implicit_array_traits<U>::can_direct_read_tuple, 
void>::type
 
  374      std::is_same<typename vtk::detail::can_map_tuple_trait<U>::rtype, 
ValueType>::value,
 
  375      "Tuple type should be the same as the return type of the mapTuple");
 
  376    this->Backend->mapTuple(idx, tuple);
 
  384  template <
typename U>
 
  385  typename std::enable_if<!vtk::detail::implicit_array_traits<U>::can_direct_read_tuple &&
 
  399  template <
typename U>
 
  400  typename std::enable_if<!vtk::detail::implicit_array_traits<U>::can_direct_read_tuple &&
 
  408      tuple[comp] = this->
GetValue(tupIdx + comp);
 
  417  template <
typename U>
 
  418  typename std::enable_if<vtk::detail::implicit_array_traits<U>::can_direct_read_component,
 
  420  GetTypedComponentImpl(
vtkIdType idx, 
int comp)
 const 
  423      std::is_same<typename vtk::detail::can_map_component_trait<U>::rtype, 
ValueType>::value,
 
  424      "Component return type should be the same as the return type of the mapComponent");
 
  425    return this->Backend->mapComponent(idx, comp);
 
  433  template <
typename U>
 
  434  typename std::enable_if<!vtk::detail::implicit_array_traits<U>::can_direct_read_component,
 
  438    return this->
GetValue(idx * this->NumberOfComponents + comp);
 
  449#include "vtkImplicitArray.txx" 
  454#ifdef VTK_IMPLICIT_VALUERANGE_INSTANTIATING 
  455VTK_ABI_NAMESPACE_BEGIN
 
  456template <
typename ValueType>
 
  458template <
typename ValueType>
 
  460template <
typename ValueType>
 
  462template <
typename ValueType>
 
  468#define VTK_INSTANTIATE_VALUERANGE_ARRAYTYPE(ArrayType, ValueType)                                 \ 
  469  template VTKCOMMONCORE_EXPORT bool DoComputeScalarRange(                                         \ 
  470    ArrayType*, ValueType*, vtkDataArrayPrivate::AllValues, const unsigned char*, unsigned char);  \ 
  471  template VTKCOMMONCORE_EXPORT bool DoComputeScalarRange(ArrayType*, ValueType*,                  \ 
  472    vtkDataArrayPrivate::FiniteValues, const unsigned char*, unsigned char);                       \ 
  473  template VTKCOMMONCORE_EXPORT bool DoComputeVectorRange(ArrayType*, ValueType[2],                \ 
  474    vtkDataArrayPrivate::AllValues, const unsigned char*, unsigned char);                          \ 
  475  template VTKCOMMONCORE_EXPORT bool DoComputeVectorRange(ArrayType*, ValueType[2],                \ 
  476    vtkDataArrayPrivate::FiniteValues, const unsigned char*, unsigned char); 
  478#define VTK_INSTANTIATE_VALUERANGE_VALUETYPE(ValueType)                                            \ 
  479  VTK_INSTANTIATE_VALUERANGE_ARRAYTYPE(                                                            \ 
  480    vtkImplicitArray<vtkAffineImplicitBackend<ValueType>>, ValueType)                              \ 
  481  VTK_INSTANTIATE_VALUERANGE_ARRAYTYPE(                                                            \ 
  482    vtkImplicitArray<vtkCompositeImplicitBackend<ValueType>>, ValueType)                           \ 
  483  VTK_INSTANTIATE_VALUERANGE_ARRAYTYPE(                                                            \ 
  484    vtkImplicitArray<vtkConstantImplicitBackend<ValueType>>, ValueType)                            \ 
  485  VTK_INSTANTIATE_VALUERANGE_ARRAYTYPE(                                                            \ 
  486    vtkImplicitArray<vtkIndexedImplicitBackend<ValueType>>, ValueType)                             \ 
  487  VTK_INSTANTIATE_VALUERANGE_ARRAYTYPE(vtkImplicitArray<std::function<ValueType(int)>>, ValueType) 
  489#elif defined(VTK_USE_EXTERN_TEMPLATE)  
  491#ifndef VTK_IMPLICIT_TEMPLATE_EXTERN 
  492#define VTK_IMPLICIT_TEMPLATE_EXTERN 
  497#pragma warning(disable : 4910)  
  500VTK_ABI_NAMESPACE_BEGIN
 
  501template <
typename ValueType>
 
  503template <
typename ValueType>
 
  505template <
typename ValueType>
 
  507template <
typename ValueType>
 
  514VTK_ABI_NAMESPACE_BEGIN
 
  515template <
typename A, 
typename R, 
typename T>
 
  517template <
typename A, 
typename R>
 
  519  A*, R[2], AllValues, 
const unsigned char* ghosts, 
unsigned char ghostsToSkip);
 
  520template <
typename A, 
typename R>
 
  522  A*, R[2], FiniteValues, 
const unsigned char* ghosts, 
unsigned char ghostsToSkip);
 
  526#define VTK_DECLARE_VALUERANGE_ARRAYTYPE(ArrayType, ValueType)                                     \ 
  527  extern template VTKCOMMONCORE_EXPORT bool DoComputeScalarRange(                                  \ 
  528    ArrayType*, ValueType*, vtkDataArrayPrivate::AllValues, const unsigned char*, unsigned char);  \ 
  529  extern template VTKCOMMONCORE_EXPORT bool DoComputeScalarRange(ArrayType*, ValueType*,           \ 
  530    vtkDataArrayPrivate::FiniteValues, const unsigned char*, unsigned char);                       \ 
  531  extern template VTKCOMMONCORE_EXPORT bool DoComputeVectorRange(ArrayType*, ValueType[2],         \ 
  532    vtkDataArrayPrivate::AllValues, const unsigned char*, unsigned char);                          \ 
  533  extern template VTKCOMMONCORE_EXPORT bool DoComputeVectorRange(ArrayType*, ValueType[2],         \ 
  534    vtkDataArrayPrivate::FiniteValues, const unsigned char*, unsigned char); 
  536#define VTK_DECLARE_VALUERANGE_VALUETYPE(ValueType)                                                \ 
  537  VTK_DECLARE_VALUERANGE_ARRAYTYPE(                                                                \ 
  538    vtkImplicitArray<vtkAffineImplicitBackend<ValueType>>, ValueType)                              \ 
  539  VTK_DECLARE_VALUERANGE_ARRAYTYPE(                                                                \ 
  540    vtkImplicitArray<vtkCompositeImplicitBackend<ValueType>>, ValueType)                           \ 
  541  VTK_DECLARE_VALUERANGE_ARRAYTYPE(                                                                \ 
  542    vtkImplicitArray<vtkConstantImplicitBackend<ValueType>>, ValueType)                            \ 
  543  VTK_DECLARE_VALUERANGE_ARRAYTYPE(                                                                \ 
  544    vtkImplicitArray<vtkIndexedImplicitBackend<ValueType>>, ValueType)                             \ 
  545  VTK_DECLARE_VALUERANGE_ARRAYTYPE(vtkImplicitArray<std::function<ValueType(int)>>, ValueType) 
  547#define VTK_DECLARE_VALUERANGE_IMPLICIT_BACKENDTYPE(BackendT)                                      \ 
  548  VTK_DECLARE_VALUERANGE_ARRAYTYPE(vtkImplicitArray<BackendT<float>>, double)                      \ 
  549  VTK_DECLARE_VALUERANGE_ARRAYTYPE(vtkImplicitArray<BackendT<double>>, double)                     \ 
  550  VTK_DECLARE_VALUERANGE_ARRAYTYPE(vtkImplicitArray<BackendT<char>>, double)                       \ 
  551  VTK_DECLARE_VALUERANGE_ARRAYTYPE(vtkImplicitArray<BackendT<signed char>>, double)                \ 
  552  VTK_DECLARE_VALUERANGE_ARRAYTYPE(vtkImplicitArray<BackendT<unsigned char>>, double)              \ 
  553  VTK_DECLARE_VALUERANGE_ARRAYTYPE(vtkImplicitArray<BackendT<short>>, double)                      \ 
  554  VTK_DECLARE_VALUERANGE_ARRAYTYPE(vtkImplicitArray<BackendT<unsigned short>>, double)             \ 
  555  VTK_DECLARE_VALUERANGE_ARRAYTYPE(vtkImplicitArray<BackendT<int>>, double)                        \ 
  556  VTK_DECLARE_VALUERANGE_ARRAYTYPE(vtkImplicitArray<BackendT<unsigned int>>, double)               \ 
  557  VTK_DECLARE_VALUERANGE_ARRAYTYPE(vtkImplicitArray<BackendT<long>>, double)                       \ 
  558  VTK_DECLARE_VALUERANGE_ARRAYTYPE(vtkImplicitArray<BackendT<unsigned long>>, double)              \ 
  559  VTK_DECLARE_VALUERANGE_ARRAYTYPE(vtkImplicitArray<BackendT<long long>>, double)                  \ 
  560  VTK_DECLARE_VALUERANGE_ARRAYTYPE(vtkImplicitArray<BackendT<unsigned long long>>, double) 
  564VTK_ABI_NAMESPACE_BEGIN
 
  586#undef VTK_DECLARE_VALUERANGE_ARRAYTYPE 
  587#undef VTK_DECLARE_VALUERANGE_VALUETYPE 
Abstract superclass for all arrays.
 
int GetNumberOfComponents() const
Set/Get the dimension (n) of the components.
 
vtkIdType GetNumberOfTuples() const
Get the number of complete tuples (a component group) in the array.
 
A utility structure serving as a backend for composite arrays: an array composed of multiple arrays c...
 
void Modified() override
Removes out-of-date L2_NORM_RANGE() and L2_NORM_FINITE_RANGE() values.
 
Base interface for all typed vtkDataArray subclasses.
 
void SetNumberOfComponents(int num) override
 
void SetNumberOfTuples(vtkIdType number) override
 
A read only array class that wraps an implicit function from integers to any value type supported by ...
 
ValueType GetTypedComponent(vtkIdType idx, int comp) const
Get component comp of the tuple at idx.
 
typename GenericDataArrayType::ValueType ValueType
 
void SetBackend(std::shared_ptr< BackendT > newBackend)
Setter/Getter for Backend.
 
void SetTypedTuple(vtkIdType tupleIdx, const ValueType *tuple)
Will not do anything for these read only arrays!
 
std::shared_ptr< BackendT > GetBackend()
Setter/Getter for Backend.
 
vtkImplicitArrayTypeMacro(SelfType, GenericDataArrayType)
 
std::shared_ptr< BackendT > Backend
The backend object actually mapping the indexes.
 
void * GetVoidPointer(vtkIdType valueIdx) override
Use of this method is discouraged, it creates a memory copy of the data into a contiguous AoS-ordered...
 
std::unique_ptr< vtkInternals > Internals
 
bool ReallocateTuples(vtkIdType vtkNotUsed(numTuples))
No allocation necessary.
 
void Initialize() override
Reset the array to default construction.
 
void ConstructBackend(Params &&... params)
Utility method for setting backend parameterization directly.
 
~vtkImplicitArray() override
 
bool AllocateTuples(vtkIdType vtkNotUsed(numTuples))
No allocation necessary.
 
int GetArrayType() const override
Get the type of array this is when down casting.
 
void GetTypedTuple(vtkIdType idx, ValueType *tuple) const
Copy the tuple at idx into tuple.
 
void ImplicitDeepCopy(vtkImplicitArray< OtherBackend > *other)
Specific DeepCopy for implicit arrays.
 
static vtkImplicitArray * New()
 
ValueType GetValue(vtkIdType idx) const
Implementation of vtkGDAConceptMethods.
 
void SetValue(vtkIdType idx, ValueType value)
Will not do anything for these read only arrays!
 
static vtkImplicitArray< BackendT > * FastDownCast(vtkAbstractArray *source)
Perform a fast, safe cast from a vtkAbstractArray to a vtkDataArray.
 
void SetTypedComponent(vtkIdType tupleIdx, int comp, ValueType value)
Will not do anything for these read only arrays!
 
void Squeeze() override
Release all extraneous internal memory including the void pointer used by GetVoidPointer
 
A backend for the vtkImplicitArray framework allowing one to use a subset of a given data array,...
 
bool DoComputeScalarRange(A *, R *, T, const unsigned char *ghosts, unsigned char ghostsToSkip)
 
bool DoComputeVectorRange(A *, R[2], AllValues, const unsigned char *ghosts, unsigned char ghostsToSkip)
 
A utility structure serving as a backend for affine (as a function of the index) implicit arrays.
 
A utility structure serving as a backend for constant implicit arrays.
 
A composite trait for handling all the different capabilities a "backend" to an implicit array can ha...
 
static constexpr bool can_read
 
typename trait::rtype rtype
 
#define vtkArrayDownCast_TemplateFastCastMacro(ArrayT)
Same as vtkArrayDownCast_FastCastMacro, but treats ArrayT as a single-parameter template (the paramet...
 
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
 
#define VTK_DECLARE_VALUERANGE_ARRAYTYPE(ArrayType, ValueType)
 
#define VTK_DECLARE_VALUERANGE_IMPLICIT_BACKENDTYPE(BackendT)