VTK  9.3.20240418
vtkAbstractArray.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-License-Identifier: BSD-3-Clause
3 //
55 #ifndef vtkAbstractArray_h
56 #define vtkAbstractArray_h
57 
58 #include "vtkCommonCoreModule.h" // For export macro
59 #include "vtkIdList.h" // For InsertTuples
60 #include "vtkObject.h"
61 #include "vtkVariant.h" // for variant arguments
62 #include "vtkWrappingHints.h" // For VTK_MARSHALAUTO
63 
64 VTK_ABI_NAMESPACE_BEGIN
65 class vtkArrayIterator;
66 class vtkDataArray;
67 class vtkIdList;
68 class vtkIdTypeArray;
69 class vtkInformation;
74 class vtkVariantArray;
75 
76 class VTKCOMMONCORE_EXPORT VTK_MARSHALAUTO vtkAbstractArray : public vtkObject
77 {
78 public:
79  vtkTypeMacro(vtkAbstractArray, vtkObject);
80  void PrintSelf(ostream& os, vtkIndent indent) override;
81 
90  virtual vtkTypeBool Allocate(vtkIdType numValues, vtkIdType ext = 1000) = 0;
91 
95  virtual void Initialize() = 0;
96 
101  virtual int GetDataType() const = 0;
102 
104 
109  virtual int GetDataTypeSize() const = 0;
110  static int GetDataTypeSize(int type);
112 
120  virtual int GetElementComponentSize() const = 0;
121 
123 
127  vtkSetClampMacro(NumberOfComponents, int, 1, VTK_INT_MAX);
128  int GetNumberOfComponents() const { return this->NumberOfComponents; }
130 
135 
141 
145  bool HasAComponentName() const;
146 
152 
160  virtual void SetNumberOfTuples(vtkIdType numTuples) = 0;
161 
169  virtual bool SetNumberOfValues(vtkIdType numValues);
170 
174  vtkIdType GetNumberOfTuples() const { return (this->MaxId + 1) / this->NumberOfComponents; }
175 
183  inline vtkIdType GetNumberOfValues() const { return (this->MaxId + 1); }
184 
191  virtual void SetTuple(vtkIdType dstTupleIdx, vtkIdType srcTupleIdx, vtkAbstractArray* source) = 0;
192 
198  virtual void InsertTuple(
199  vtkIdType dstTupleIdx, vtkIdType srcTupleIdx, vtkAbstractArray* source) = 0;
200 
206  virtual void InsertTuples(vtkIdList* dstIds, vtkIdList* srcIds, vtkAbstractArray* source) = 0;
207 
214  vtkIdType dstStart, vtkIdList* srcIds, vtkAbstractArray* source) = 0;
215 
221  virtual void InsertTuples(
222  vtkIdType dstStart, vtkIdType n, vtkIdType srcStart, vtkAbstractArray* source) = 0;
223 
230 
236  virtual void GetTuples(vtkIdList* tupleIds, vtkAbstractArray* output);
237 
243  virtual void GetTuples(vtkIdType p1, vtkIdType p2, vtkAbstractArray* output);
244 
251  virtual bool HasStandardMemoryLayout() const;
252 
260  virtual void* GetVoidPointer(vtkIdType valueIdx) = 0;
261 
270  virtual void DeepCopy(vtkAbstractArray* da);
271 
279  virtual void InterpolateTuple(
280  vtkIdType dstTupleIdx, vtkIdList* ptIndices, vtkAbstractArray* source, double* weights) = 0;
281 
290  virtual void InterpolateTuple(vtkIdType dstTupleIdx, vtkIdType srcTupleIdx1,
291  vtkAbstractArray* source1, vtkIdType srcTupleIdx2, vtkAbstractArray* source2, double t) = 0;
292 
298  virtual void Squeeze() = 0;
299 
309  virtual vtkTypeBool Resize(vtkIdType numTuples) = 0;
310 
312 
315  void Reset()
316  {
317  this->MaxId = -1;
318  this->DataChanged();
319  }
321 
325  vtkIdType GetSize() const { return this->Size; }
326 
330  vtkIdType GetMaxId() const { return this->MaxId; }
331 
333  {
337  VTK_DATA_ARRAY_USER_DEFINED
338  };
339 
341 
358  virtual void SetVoidArray(
359  void* vtkNotUsed(array), vtkIdType vtkNotUsed(size), int vtkNotUsed(save)) = 0;
360  virtual void SetVoidArray(void* array, vtkIdType size, int save, int vtkNotUsed(deleteMethod))
361  {
362  this->SetVoidArray(array, size, save);
363  }
365 
372  virtual void SetArrayFreeFunction(void (*callback)(void*)) = 0;
373 
379  virtual void ExportToVoidPointer(void* out_ptr);
380 
389  virtual unsigned long GetActualMemorySize() const = 0;
390 
392 
395  vtkSetStringMacro(Name);
396  vtkGetStringMacro(Name);
398 
402  virtual const char* GetDataTypeAsString() const
403  {
404  return vtkImageScalarTypeNameMacro(this->GetDataType());
405  }
406 
417  static vtkAbstractArray* CreateArray(int dataType);
418 
423  virtual int IsNumeric() const = 0;
424 
428  virtual bool IsIntegral() const;
429 
436 
443  virtual vtkIdType GetDataSize() const
444  {
445  return this->GetNumberOfComponents() * this->GetNumberOfTuples();
446  }
447 
449 
457  virtual void LookupValue(vtkVariant value, vtkIdList* valueIds) = 0;
459 
464  VTK_EXPECTS(0 <= valueIdx && valueIdx < GetNumberOfValues());
465 
471  VTK_EXPECTS(0 <= valueIdx) = 0;
472 
477  virtual void SetVariantValue(vtkIdType valueIdx, vtkVariant value)
478  VTK_EXPECTS(0 <= valueIdx && valueIdx < GetNumberOfValues()) = 0;
479 
488  virtual void DataChanged() = 0;
489 
495  virtual void ClearLookup() = 0;
496 
549  virtual void GetProminentComponentValues(int comp, vtkVariantArray* values,
550  double uncertainty = 1.e-6, double minimumProminence = 1.e-3);
551 
552  // TODO: Implement these lookup functions also.
553  // virtual void LookupRange(vtkVariant min, vtkVariant max, vtkIdList* ids,
554  // bool includeMin = true, bool includeMax = true) = 0;
555  // virtual void LookupGreaterThan(vtkVariant min, vtkIdList* ids, bool includeMin = false) = 0;
556  // virtual void LookupLessThan(vtkVariant max, vtkIdList* ids, bool includeMax = false) = 0;
557 
568  bool HasInformation() const { return this->Information != nullptr; }
569 
581  virtual int CopyInformation(vtkInformation* infoFrom, vtkTypeBool deep = 1);
582 
588 
602 
616 
620  void Modified() override;
621 
628 
637 
638  // Deprecated. Use vtkAbstractArray::MaxDiscreteValues instead.
639  enum
640  {
641  MAX_DISCRETE_VALUES = 32
642  };
643 
645 
649  vtkGetMacro(MaxDiscreteValues, unsigned int);
650  vtkSetMacro(MaxDiscreteValues, unsigned int);
652 
653  enum
654  {
655  AbstractArray = 0,
663 
664  DataArrayTemplate = AoSDataArrayTemplate
665  };
666 
671  virtual int GetArrayType() const { return AbstractArray; }
672 
676  const char* GetArrayTypeAsString() const;
677 
678 protected:
679  // Construct object with default tuple dimension (number of components) of 1.
681  ~vtkAbstractArray() override;
682 
689 
701  virtual void UpdateDiscreteValueSet(double uncertainty, double minProminence);
702 
703  vtkIdType Size; // allocated size of data
704  vtkIdType MaxId; // maximum index inserted thus far
705  int NumberOfComponents; // the number of components per tuple
706 
707  // maximum number of prominent values before array is considered continuous.
708  unsigned int MaxDiscreteValues;
709 
710  char* Name;
711 
712  bool RebuildArray; // whether to rebuild the fast lookup data structure.
713 
715 
716  class vtkInternalComponentNames;
717  vtkInternalComponentNames* ComponentNames; // names for each component
718 
719 private:
720  vtkAbstractArray(const vtkAbstractArray&) = delete;
721  void operator=(const vtkAbstractArray&) = delete;
722 };
723 
725 
730 template <typename ArrayT>
732 {
733  inline ArrayT* operator()(vtkAbstractArray* array) { return ArrayT::SafeDownCast(array); }
734 };
736 
754 template <typename ArrayT>
756 {
757  // The default vtkArrayDownCast_impl struct uses SafeDownCast, but is
758  // specialized for arrays that support FastDownCast.
759  return vtkArrayDownCast_impl<ArrayT>()(array);
760 }
761 
762 VTK_ABI_NAMESPACE_END
763 
765 
769 #define vtkArrayDownCast_FastCastMacro(ArrayT) \
770  template <> \
771  struct vtkArrayDownCast_impl<ArrayT> \
772  { \
773  inline ArrayT* operator()(vtkAbstractArray* array) { return ArrayT::FastDownCast(array); } \
774  }
776 
778 
784 #define vtkArrayDownCast_TemplateFastCastMacro(ArrayT) \
785  template <typename ValueT> \
786  struct vtkArrayDownCast_impl<ArrayT<ValueT>> \
787  { \
788  inline ArrayT<ValueT>* operator()(vtkAbstractArray* array) \
789  { \
790  return ArrayT<ValueT>::FastDownCast(array); \
791  } \
792  }
794 #endif
Abstract superclass for all arrays.
static vtkInformationInformationVectorKey * PER_COMPONENT()
This key is used to hold a vector of COMPONENT_VALUES (and, for vtkDataArray subclasses,...
virtual void GetTuples(vtkIdList *tupleIds, vtkAbstractArray *output)
Given a list of tuple ids, return an array of tuples.
bool HasInformation() const
Inquire if this array has an instance of vtkInformation already associated with it.
virtual int IsNumeric() const =0
This method is here to make backward compatibility easier.
virtual vtkArrayIterator * NewIterator()=0
Subclasses must override this method and provide the right kind of templated vtkArrayIteratorTemplate...
virtual void Initialize()=0
Release storage and reset array to initial state.
virtual void DeepCopy(vtkAbstractArray *da)
Deep copy of data.
virtual int GetElementComponentSize() const =0
Return the size, in bytes, of the lowest-level element of an array.
virtual void SetInformation(vtkInformation *)
Set an information object that can be used to annotate the array.
virtual void InterpolateTuple(vtkIdType dstTupleIdx, vtkIdType srcTupleIdx1, vtkAbstractArray *source1, vtkIdType srcTupleIdx2, vtkAbstractArray *source2, double t)=0
Insert the tuple at dstTupleIdx in this array to the tuple interpolated from the two tuple indices,...
virtual void UpdateDiscreteValueSet(double uncertainty, double minProminence)
Obtain the set of unique values taken on by each component of the array, as well as by the tuples of ...
virtual vtkTypeBool Allocate(vtkIdType numValues, vtkIdType ext=1000)=0
Allocate memory for this array.
static vtkInformationDoubleVectorKey * DISCRETE_VALUE_SAMPLE_PARAMETERS()
A key used to hold conditions under which cached discrete values were generated; the value is a 2-vec...
virtual unsigned long GetActualMemorySize() const =0
Return the memory in kibibytes (1024 bytes) consumed by this data array.
int GetNumberOfComponents() const
Set/Get the dimension (n) of the components.
vtkIdType GetSize() const
Return the size of the data.
static vtkInformationInformationVectorKey * PER_FINITE_COMPONENT()
This key is used to hold a vector of COMPONENT_VALUES (and, for vtkDataArray subclasses,...
unsigned int MaxDiscreteValues
vtkInternalComponentNames * ComponentNames
static int GetDataTypeSize(int type)
Return the size of the underlying data type.
virtual void SetVoidArray(void *vtkNotUsed(array), vtkIdType vtkNotUsed(size), int vtkNotUsed(save))=0
This method lets the user specify data to be held by the array.
void SetComponentName(vtkIdType component, const char *name)
Set the name for a component.
virtual vtkTypeBool Resize(vtkIdType numTuples)=0
Resize the array to the requested number of tuples and preserve data.
static vtkAbstractArray * CreateArray(int dataType)
Creates an array for dataType where dataType is one of VTK_BIT, VTK_CHAR, VTK_UNSIGNED_CHAR,...
virtual vtkIdType GetDataSize() const
Returns the size of the data in DataTypeSize units.
virtual vtkVariant GetVariantValue(vtkIdType valueIdx)
Retrieve value from the array as a variant.
vtkIdType GetMaxId() const
What is the maximum id currently in the array.
virtual void SetNumberOfTuples(vtkIdType numTuples)=0
Set the number of tuples (a component group) in the array.
virtual void SetTuple(vtkIdType dstTupleIdx, vtkIdType srcTupleIdx, vtkAbstractArray *source)=0
Set the tuple at dstTupleIdx in this array to the tuple at srcTupleIdx in the source array.
virtual void ClearLookup()=0
Delete the associated fast lookup data structure on this array, if it exists.
virtual int GetDataTypeSize() const =0
Return the size of the underlying data type.
virtual void InsertTuples(vtkIdList *dstIds, vtkIdList *srcIds, vtkAbstractArray *source)=0
Copy the tuples indexed in srcIds from the source array to the tuple locations indexed by dstIds in t...
virtual void InsertTuplesStartingAt(vtkIdType dstStart, vtkIdList *srcIds, vtkAbstractArray *source)=0
Copy the tuples indexed in srcIds from the source array to the tuple locations starting at index dstS...
virtual void InterpolateTuple(vtkIdType dstTupleIdx, vtkIdList *ptIndices, vtkAbstractArray *source, double *weights)=0
Set the tuple at dstTupleIdx in this array to the interpolated tuple value, given the ptIndices in th...
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
const char * GetComponentName(vtkIdType component) const
Get the component name for a given component.
vtkInformation * Information
const char * GetArrayTypeAsString() const
Get the name for the array type as string.
void Reset()
Reset to an empty state, without freeing any memory.
virtual void SetArrayFreeFunction(void(*callback)(void *))=0
This method allows the user to specify a custom free function to be called when the array is dealloca...
vtkInformation * GetInformation()
Get an information object that can be used to annotate the array.
int CopyComponentNames(vtkAbstractArray *da)
Copies the component names from the inputted array to the current array make sure that the current ar...
virtual const char * GetDataTypeAsString() const
Get the name of a data type as a string.
void Modified() override
Removes out-of-date PER_COMPONENT() and PER_FINITE_COMPONENT() values.
virtual void ExportToVoidPointer(void *out_ptr)
This method copies the array data to the void pointer specified by the user.
virtual void InsertTuples(vtkIdType dstStart, vtkIdType n, vtkIdType srcStart, vtkAbstractArray *source)=0
Copy n consecutive tuples starting at srcStart from the source array to this array,...
virtual void SetVariantValue(vtkIdType valueIdx, vtkVariant value)=0
Set a value in the array from a variant.
virtual void InsertTuple(vtkIdType dstTupleIdx, vtkIdType srcTupleIdx, vtkAbstractArray *source)=0
Insert the tuple at srcTupleIdx in the source array into this array at dstTupleIdx.
virtual bool HasStandardMemoryLayout() const
Returns true if this array uses the standard memory layout defined in the VTK user guide,...
virtual bool IsIntegral() const
This method will return true if and only if an array contains integer-valued data.
bool HasAComponentName() const
Returns if any component has had a name assigned.
static vtkInformationVariantVectorKey * DISCRETE_VALUES()
A key used to hold discrete values taken on either by the tuples of the array (when present in this->...
virtual void GetTuples(vtkIdType p1, vtkIdType p2, vtkAbstractArray *output)
Get the tuples for the range of tuple ids specified (i.e., p1->p2 inclusive).
static vtkInformationIntegerKey * GUI_HIDE()
This key is a hint to end user interface that this array is internal and should not be shown to the e...
virtual int GetArrayType() const
Method for type-checking in FastDownCast implementations.
virtual vtkIdType LookupValue(vtkVariant value)=0
Return the value indices where a specific value appears.
virtual int GetDataType() const =0
Return the underlying data type.
~vtkAbstractArray() override
virtual void SetVoidArray(void *array, vtkIdType size, int save, int vtkNotUsed(deleteMethod))
This method lets the user specify data to be held by the array.
virtual void LookupValue(vtkVariant value, vtkIdList *valueIds)=0
Return the value indices where a specific value appears.
virtual void InsertVariantValue(vtkIdType valueIdx, vtkVariant value)=0
Insert a value into the array from a variant.
virtual vtkIdType InsertNextTuple(vtkIdType srcTupleIdx, vtkAbstractArray *source)=0
Insert the tuple from srcTupleIdx in the source array at the end of this array.
virtual void Squeeze()=0
Free any unnecessary memory.
virtual void GetProminentComponentValues(int comp, vtkVariantArray *values, double uncertainty=1.e-6, double minimumProminence=1.e-3)
Populate the given vtkVariantArray with a set of distinct values taken on by the requested component ...
virtual void DataChanged()=0
Tell the array explicitly that the data has changed.
virtual int CopyInformation(vtkInformation *infoFrom, vtkTypeBool deep=1)
Copy information instance.
virtual void * GetVoidPointer(vtkIdType valueIdx)=0
Return a void pointer.
Abstract superclass to iterate over elements in an vtkAbstractArray.
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:155
list of point or cell ids
Definition: vtkIdList.h:133
dynamic, self-adjusting array of vtkIdType
a simple class to control print indentation
Definition: vtkIndent.h:108
Key for integer values in vtkInformation.
Store vtkAlgorithm input/output information.
abstract base class for most VTK objects
Definition: vtkObject.h:162
An array holding vtkVariants.
A type representing the union of many types.
Definition: vtkVariant.h:162
@ component
Definition: vtkX3D.h:175
@ value
Definition: vtkX3D.h:220
@ type
Definition: vtkX3D.h:516
@ name
Definition: vtkX3D.h:219
@ size
Definition: vtkX3D.h:253
Implementation of vtkArrayDownCast.
ArrayT * operator()(vtkAbstractArray *array)
int vtkTypeBool
Definition: vtkABI.h:64
ArrayT * vtkArrayDownCast(vtkAbstractArray *array)
vtkArrayDownCast is to be used by generic (e.g.
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
int vtkIdType
Definition: vtkType.h:315
#define VTK_INT_MAX
Definition: vtkType.h:144
void save(Archiver &ar, const std::string &str, const unsigned int vtkNotUsed(version))
#define VTK_MARSHAL_EXCLUDE_REASON_IS_INTERNAL
#define VTK_EXPECTS(x)
#define VTK_MARSHALAUTO
#define VTK_MARSHALEXCLUDE(reason)
#define VTK_NEWINSTANCE