VTK  9.2.6
vtkAbstractArray.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkAbstractArray.h
5
6 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7 All rights reserved.
8 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9
10 This software is distributed WITHOUT ANY WARRANTY; without even
11 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 PURPOSE. See the above copyright notice for more information.
13
14=========================================================================*/
15//
64#ifndef vtkAbstractArray_h
65#define vtkAbstractArray_h
66
67#include "vtkCommonCoreModule.h" // For export macro
68#include "vtkIdList.h" // For InsertTuples
69#include "vtkObject.h"
70#include "vtkVariant.h" // for variant arguments
71
73class vtkDataArray;
74class vtkIdList;
75class vtkIdTypeArray;
76class vtkInformation;
81class vtkVariantArray;
82
83class VTKCOMMONCORE_EXPORT vtkAbstractArray : public vtkObject
84{
85public:
87 void PrintSelf(ostream& os, vtkIndent indent) override;
88
97 virtual vtkTypeBool Allocate(vtkIdType numValues, vtkIdType ext = 1000) = 0;
98
102 virtual void Initialize() = 0;
103
108 virtual int GetDataType() const = 0;
109
111
116 virtual int GetDataTypeSize() const = 0;
117 static int GetDataTypeSize(int type);
119
127 virtual int GetElementComponentSize() const = 0;
128
130
134 vtkSetClampMacro(NumberOfComponents, int, 1, VTK_INT_MAX);
135 int GetNumberOfComponents() const { return this->NumberOfComponents; }
137
141 void SetComponentName(vtkIdType component, const char* name);
142
147 const char* GetComponentName(vtkIdType component) const;
148
152 bool HasAComponentName() const;
153
159
167 virtual void SetNumberOfTuples(vtkIdType numTuples) = 0;
168
175 virtual bool SetNumberOfValues(vtkIdType numValues);
176
180 vtkIdType GetNumberOfTuples() const { return (this->MaxId + 1) / this->NumberOfComponents; }
181
188 inline vtkIdType GetNumberOfValues() const { return (this->MaxId + 1); }
189
196 virtual void SetTuple(vtkIdType dstTupleIdx, vtkIdType srcTupleIdx, vtkAbstractArray* source) = 0;
197
203 virtual void InsertTuple(
204 vtkIdType dstTupleIdx, vtkIdType srcTupleIdx, vtkAbstractArray* source) = 0;
205
211 virtual void InsertTuples(vtkIdList* dstIds, vtkIdList* srcIds, vtkAbstractArray* source) = 0;
212
219 vtkIdType dstStart, vtkIdList* srcIds, vtkAbstractArray* source) = 0;
220
226 virtual void InsertTuples(
227 vtkIdType dstStart, vtkIdType n, vtkIdType srcStart, vtkAbstractArray* source) = 0;
228
235
241 virtual void GetTuples(vtkIdList* tupleIds, vtkAbstractArray* output);
242
248 virtual void GetTuples(vtkIdType p1, vtkIdType p2, vtkAbstractArray* output);
249
256 virtual bool HasStandardMemoryLayout() const;
257
265 virtual void* GetVoidPointer(vtkIdType valueIdx) = 0;
266
275 virtual void DeepCopy(vtkAbstractArray* da);
276
284 virtual void InterpolateTuple(
285 vtkIdType dstTupleIdx, vtkIdList* ptIndices, vtkAbstractArray* source, double* weights) = 0;
286
295 virtual void InterpolateTuple(vtkIdType dstTupleIdx, vtkIdType srcTupleIdx1,
296 vtkAbstractArray* source1, vtkIdType srcTupleIdx2, vtkAbstractArray* source2, double t) = 0;
297
303 virtual void Squeeze() = 0;
304
314 virtual vtkTypeBool Resize(vtkIdType numTuples) = 0;
315
317
320 void Reset()
321 {
322 this->MaxId = -1;
323 this->DataChanged();
324 }
326
330 vtkIdType GetSize() const { return this->Size; }
331
335 vtkIdType GetMaxId() const { return this->MaxId; }
336
338 {
342 VTK_DATA_ARRAY_USER_DEFINED
343 };
344
346
363 virtual void SetVoidArray(
364 void* vtkNotUsed(array), vtkIdType vtkNotUsed(size), int vtkNotUsed(save)) = 0;
365 virtual void SetVoidArray(void* array, vtkIdType size, int save, int vtkNotUsed(deleteMethod))
366 {
367 this->SetVoidArray(array, size, save);
368 }
370
377 virtual void SetArrayFreeFunction(void (*callback)(void*)) = 0;
378
384 virtual void ExportToVoidPointer(void* out_ptr);
385
394 virtual unsigned long GetActualMemorySize() const = 0;
395
397
400 vtkSetStringMacro(Name);
401 vtkGetStringMacro(Name);
403
407 virtual const char* GetDataTypeAsString(void) const
408 {
409 return vtkImageScalarTypeNameMacro(this->GetDataType());
410 }
411
422 static vtkAbstractArray* CreateArray(int dataType);
423
428 virtual int IsNumeric() const = 0;
429
436
443 virtual vtkIdType GetDataSize() const
444 {
445 return this->GetNumberOfComponents() * this->GetNumberOfTuples();
446 }
447
449
456 virtual vtkIdType LookupValue(vtkVariant value) = 0;
457 virtual void LookupValue(vtkVariant value, vtkIdList* valueIds) = 0;
459
464 VTK_EXPECTS(0 <= valueIdx && valueIdx < GetNumberOfValues());
465
470 virtual void InsertVariantValue(vtkIdType valueIdx, vtkVariant value)
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, int 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,
662
663 DataArrayTemplate = AoSDataArrayTemplate
664 };
665
670 virtual int GetArrayType() const { return AbstractArray; }
671
675 const char* GetArrayTypeAsString() const;
676
677protected:
678 // Construct object with default tuple dimension (number of components) of 1.
681
688
700 virtual void UpdateDiscreteValueSet(double uncertainty, double minProminence);
701
702 vtkIdType Size; // allocated size of data
703 vtkIdType MaxId; // maximum index inserted thus far
704 int NumberOfComponents; // the number of components per tuple
705
706 // maximum number of prominent values before array is considered continuous.
707 unsigned int MaxDiscreteValues;
708
709 char* Name;
710
711 bool RebuildArray; // whether to rebuild the fast lookup data structure.
712
714
715 class vtkInternalComponentNames;
716 vtkInternalComponentNames* ComponentNames; // names for each component
717
718private:
719 vtkAbstractArray(const vtkAbstractArray&) = delete;
720 void operator=(const vtkAbstractArray&) = delete;
721};
722
724
729template <typename ArrayT>
731{
732 inline ArrayT* operator()(vtkAbstractArray* array) { return ArrayT::SafeDownCast(array); }
733};
735
753template <typename ArrayT>
755{
756 // The default vtkArrayDownCast_impl struct uses SafeDownCast, but is
757 // specialized for arrays that support FastDownCast.
758 return vtkArrayDownCast_impl<ArrayT>()(array);
759}
760
762
766#define vtkArrayDownCast_FastCastMacro(ArrayT) \
767 template <> \
768 struct vtkArrayDownCast_impl<ArrayT> \
769 { \
770 inline ArrayT* operator()(vtkAbstractArray* array) { return ArrayT::FastDownCast(array); } \
771 }
773
775
781#define vtkArrayDownCast_TemplateFastCastMacro(ArrayT) \
782 template <typename ValueT> \
783 struct vtkArrayDownCast_impl<ArrayT<ValueT>> \
784 { \
785 inline ArrayT<ValueT>* operator()(vtkAbstractArray* array) \
786 { \
787 return ArrayT<ValueT>::FastDownCast(array); \
788 } \
789 }
791
792#endif
Abstract superclass for all arrays.
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.
const char * GetArrayTypeAsString() const
Get the name for the array type as string.
virtual int IsNumeric() const =0
This method is here to make backward compatibility easier.
static vtkInformationInformationVectorKey * PER_FINITE_COMPONENT()
This key is used to hold a vector of COMPONENT_VALUES (and, for vtkDataArray subclasses,...
virtual void Initialize()=0
Release storage and reset array to initial state.
virtual void DeepCopy(vtkAbstractArray *da)
Deep copy of data.
vtkInformation * GetInformation()
Get an information object that can be used to annotate the array.
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.
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.
unsigned int MaxDiscreteValues
vtkInternalComponentNames * ComponentNames
virtual vtkArrayIterator * NewIterator()=0
Subclasses must override this method and provide the right kind of templated vtkArrayIteratorTemplate...
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.
virtual vtkIdType GetDataSize() const
Returns the size of the data in DataTypeSize units.
static vtkAbstractArray * CreateArray(int dataType)
Creates an array for dataType where dataType is one of VTK_BIT, VTK_CHAR, VTK_UNSIGNED_CHAR,...
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.
static vtkInformationInformationVectorKey * PER_COMPONENT()
This key is used to hold a vector of COMPONENT_VALUES (and, for vtkDataArray subclasses,...
vtkIdType GetNumberOfTuples() const
Get the number of complete tuples (a component group) in the array.
virtual const char * GetDataTypeAsString(void) const
Get the name of a data type as a string.
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.
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 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 int CopyInformation(vtkInformation *infoFrom, int deep=1)
Copy information instance.
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.
vtkInformation * Information
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...
int CopyComponentNames(vtkAbstractArray *da)
Copies the component names from the inputted array to the current array make sure that the current ar...
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 bool SetNumberOfValues(vtkIdType numValues)
Specify the number of values (tuples * components) for this object to hold.
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,...
vtkIdType GetNumberOfValues() const
Get the total number of values in the array.
bool HasAComponentName() const
Returns if any component has had a name assigned.
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 void * GetVoidPointer(vtkIdType valueIdx)=0
Return a void pointer.
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.
const char * GetComponentName(vtkIdType component) const
Get the component name for a given component.
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.
Abstract superclass to iterate over elements in an vtkAbstractArray.
abstract superclass for arrays of numeric data
list of point or cell ids
Definition vtkIdList.h:31
dynamic, self-adjusting array of vtkIdType
a simple class to control print indentation
Definition vtkIndent.h:34
Key for integer values in vtkInformation.
Store vtkAlgorithm input/output information.
abstract base class for most VTK objects
Definition vtkObject.h:57
An array holding vtkVariants.
A atomic type representing the union of many types.
Definition vtkVariant.h:64
Implementation of vtkArrayDownCast.
ArrayT * operator()(vtkAbstractArray *array)
int vtkTypeBool
Definition vtkABI.h:69
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:332
#define VTK_INT_MAX
Definition vtkType.h:155
void save(Archiver &ar, const std::string &str, const unsigned int vtkNotUsed(version))
#define VTK_EXPECTS(x)
#define VTK_NEWINSTANCE