VTK  9.2.6
vtkStringArray.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkStringArray.h
5  Language: C++
6 
7  Copyright 2004 Sandia Corporation.
8  Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive
9  license for use of this work by or on behalf of the
10  U.S. Government. Redistribution and use in source and binary forms, with
11  or without modification, are permitted provided that this Notice and any
12  statement of authorship are reproduced on all copies.
13 
14 =========================================================================*/
15 
33 #ifndef vtkStringArray_h
34 #define vtkStringArray_h
35 
36 #include "vtkAbstractArray.h"
37 #include "vtkCommonCoreModule.h" // For export macro
38 #include "vtkStdString.h" // needed for vtkStdString definition
39 
40 class vtkStringArrayLookup;
41 
42 class VTKCOMMONCORE_EXPORT vtkStringArray : public vtkAbstractArray
43 {
44 public:
46  {
48  VTK_DATA_ARRAY_DELETE = vtkAbstractArray::VTK_DATA_ARRAY_DELETE,
49  VTK_DATA_ARRAY_ALIGNED_FREE = vtkAbstractArray::VTK_DATA_ARRAY_ALIGNED_FREE,
50  VTK_DATA_ARRAY_USER_DEFINED = vtkAbstractArray::VTK_DATA_ARRAY_USER_DEFINED
51  };
52 
53  static vtkStringArray* New();
54  static vtkStringArray* ExtendedNew();
56  void PrintSelf(ostream& os, vtkIndent indent) override;
57 
58  //
59  //
60  // Functions required by vtkAbstractArray
61  //
62  //
63 
67  int GetDataType() const override { return VTK_STRING; }
68 
69  int IsNumeric() const override { return 0; }
70 
74  void Initialize() override;
75 
82  int GetDataTypeSize() const override;
83 
88  void Squeeze() override { this->ResizeAndExtend(this->MaxId + 1); }
89 
93  vtkTypeBool Resize(vtkIdType numTuples) override;
94 
101  void SetTuple(vtkIdType i, vtkIdType j, vtkAbstractArray* source) override;
102 
107  void InsertTuple(vtkIdType i, vtkIdType j, vtkAbstractArray* source) override;
108 
114  void InsertTuples(vtkIdList* dstIds, vtkIdList* srcIds, vtkAbstractArray* source) override;
115 
117  vtkIdType dstStart, vtkIdList* srcIds, vtkAbstractArray* source) override;
118 
124  void InsertTuples(
125  vtkIdType dstStart, vtkIdType n, vtkIdType srcStart, vtkAbstractArray* source) override;
126 
133 
141  void InterpolateTuple(
142  vtkIdType i, vtkIdList* ptIndices, vtkAbstractArray* source, double* weights) override;
143 
153  vtkAbstractArray* source2, double t) override;
154 
161  void GetTuples(vtkIdList* ptIds, vtkAbstractArray* output) override;
162 
170  void GetTuples(vtkIdType p1, vtkIdType p2, vtkAbstractArray* output) override;
171 
176  vtkTypeBool Allocate(vtkIdType sz, vtkIdType ext = 1000) override;
177 
181  const vtkStdString& GetValue(vtkIdType id) const
182  VTK_EXPECTS(0 <= id && id < this->GetNumberOfValues());
183 
187  vtkStdString& GetValue(vtkIdType id) VTK_EXPECTS(0 <= id && id < this->GetNumberOfValues());
188 
194  VTK_EXPECTS(0 <= id && id < this->GetNumberOfValues())
195  {
196  this->Array[id] = value;
197  this->DataChanged();
198  }
199 
200  void SetValue(vtkIdType id, const char* value)
201  VTK_EXPECTS(0 <= id && id < this->GetNumberOfValues()) VTK_EXPECTS(value != nullptr);
202 
207  void SetNumberOfTuples(vtkIdType number) override
208  {
209  this->SetNumberOfValues(this->NumberOfComponents * number);
210  }
211 
215  vtkIdType GetNumberOfValues() const { return (this->MaxId + 1); }
216 
217  int GetNumberOfElementComponents() { return 0; }
218  int GetElementComponentSize() const override
219  {
220  return static_cast<int>(sizeof(vtkStdString::value_type));
221  }
222 
226  void InsertValue(vtkIdType id, vtkStdString f) VTK_EXPECTS(0 <= id);
227  void InsertValue(vtkIdType id, const char* val) VTK_EXPECTS(0 <= id) VTK_EXPECTS(val != nullptr);
228 
233  void SetVariantValue(vtkIdType idx, vtkVariant value) override;
234 
239  void InsertVariantValue(vtkIdType idx, vtkVariant value) override;
240 
244  vtkIdType InsertNextValue(vtkStdString f);
245  vtkIdType InsertNextValue(const char* f) VTK_EXPECTS(f != nullptr);
246 
252  vtkStdString* WritePointer(vtkIdType id, vtkIdType number);
253 
258  vtkStdString* GetPointer(vtkIdType id) { return this->Array + id; }
259  void* GetVoidPointer(vtkIdType id) override { return this->GetPointer(id); }
260 
265  void DeepCopy(vtkAbstractArray* aa) override;
266 
279  void SetArray(
280  vtkStdString* array, vtkIdType size, int save, int deleteMethod = VTK_DATA_ARRAY_DELETE);
281  void SetVoidArray(void* array, vtkIdType size, int save) override
282  {
283  this->SetArray(static_cast<vtkStdString*>(array), size, save);
284  }
285  void SetVoidArray(void* array, vtkIdType size, int save, int deleteMethod) override
286  {
287  this->SetArray(static_cast<vtkStdString*>(array), size, save, deleteMethod);
288  }
289 
296  void SetArrayFreeFunction(void (*callback)(void*)) override;
297 
309  unsigned long GetActualMemorySize() const override;
310 
315 
321  vtkIdType GetDataSize() const override;
322 
324 
328  void LookupValue(vtkVariant value, vtkIdList* ids) override;
330 
332  void LookupValue(const vtkStdString& value, vtkIdList* ids);
333 
334  vtkIdType LookupValue(const char* value);
335  void LookupValue(const char* value, vtkIdList* ids);
336 
345  void DataChanged() override;
346 
352  virtual void DataElementChanged(vtkIdType id);
353 
359  void ClearLookup() override;
360 
361 protected:
362  vtkStringArray();
363  ~vtkStringArray() override;
364 
365  vtkStdString* Array; // pointer to data
366  vtkStdString* ResizeAndExtend(vtkIdType sz); // function to resize data
367 
368  void (*DeleteFunction)(void*);
369 
370 private:
371  vtkStringArray(const vtkStringArray&) = delete;
372  void operator=(const vtkStringArray&) = delete;
373 
374  vtkStringArrayLookup* Lookup;
375  void UpdateLookup();
376 };
377 
378 #endif
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:38
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 DataChanged()=0
Tell the array explicitly that the data has changed.
virtual void DeepCopy(vtkAbstractArray *da)
Deep copy of data.
virtual void GetTuples(vtkIdList *tupleIds, vtkAbstractArray *output)
Given a list of tuple ids, return an array of tuples.
Abstract superclass for all arrays.
virtual vtkIdType LookupValue(vtkVariant value)=0
Return the value indices where a specific value appears.
vtkStdString * Array
a vtkAbstractArray subclass for strings
int vtkIdType
Definition: vtkType.h:332
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...
int IsNumeric() const override
This method is here to make backward compatibility easier.
virtual void Initialize()=0
Release storage and reset array to initial state.
A atomic type representing the union of many types.
Definition: vtkVariant.h:69
void SetValue(vtkIdType id, vtkStdString value)
Set the data at a particular index.
#define VTK_STRING
Definition: vtkType.h:60
int GetDataType() const override
Get the data type.
int GetElementComponentSize() const override
Return the size, in bytes, of the lowest-level element of an array.
int vtkTypeBool
Definition: vtkABI.h:69
vtkIdType GetNumberOfValues() const
Get the total number of values in the array.
virtual int GetDataTypeSize() const =0
Return the size of the underlying data type.
void * GetVoidPointer(vtkIdType id) override
Return a void pointer.
virtual vtkIdType GetDataSize() const
Returns the size of the data in DataTypeSize units.
virtual unsigned long GetActualMemorySize() const =0
Return the memory in kibibytes (1024 bytes) consumed by this data array.
virtual void ClearLookup()=0
Delete the associated fast lookup data structure on this array, if it exists.
a simple class to control print indentation
Definition: vtkIndent.h:39
list of point or cell ids
Definition: vtkIdList.h:33
vtkIdType GetNumberOfValues() const
Return the number of values in the array.
void Squeeze() override
Free any unnecessary memory.
virtual vtkArrayIterator * NewIterator()=0
Subclasses must override this method and provide the right kind of templated vtkArrayIteratorTemplate...
void save(Archiver &ar, const std::string &str, const unsigned int vtkNotUsed(version))
Abstract superclass to iterate over elements in an vtkAbstractArray.
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
#define VTK_NEWINSTANCE
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 vtkTypeBool Allocate(vtkIdType numValues, vtkIdType ext=1000)=0
Allocate memory for this array.
virtual vtkIdType InsertNextTuple(vtkIdType srcTupleIdx, vtkAbstractArray *source)=0
Insert the tuple from srcTupleIdx in the source array at the end of this array.
virtual vtkTypeBool Resize(vtkIdType numTuples)=0
Resize the array to the requested number of tuples and preserve data.
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...
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...
StdString::value_type value_type
Definition: vtkStdString.h:42
void SetVoidArray(void *array, vtkIdType size, int save, int deleteMethod) override
virtual bool SetNumberOfValues(vtkIdType numValues)
Specify the number of values (tuples * components) for this object to hold.
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
#define VTK_EXPECTS(x)
void SetVoidArray(void *array, vtkIdType size, int save) override
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...
int GetNumberOfElementComponents()
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.