VTK  9.1.0
vtkDenseArray.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkDenseArray.h
5 
6 -------------------------------------------------------------------------
7  Copyright 2008 Sandia Corporation.
8  Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
9  the U.S. Government retains certain rights in this software.
10 -------------------------------------------------------------------------
11 
12  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
13  All rights reserved.
14  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
15 
16  This software is distributed WITHOUT ANY WARRANTY; without even
17  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
18  PURPOSE. See the above copyright notice for more information.
19 
20 =========================================================================*/
21 
46 #ifndef vtkDenseArray_h
47 #define vtkDenseArray_h
48 
49 #include "vtkArrayCoordinates.h"
50 #include "vtkObjectFactory.h"
51 #include "vtkTypedArray.h"
52 
53 template <typename T>
54 class vtkDenseArray : public vtkTypedArray<T>
55 {
56 public:
57  static vtkDenseArray<T>* New();
59  void PrintSelf(ostream& os, vtkIndent indent) override;
60 
62  typedef typename vtkArray::DimensionT DimensionT;
63  typedef typename vtkArray::SizeT SizeT;
64 
65  // vtkArray API
66  bool IsDense() override;
67  const vtkArrayExtents& GetExtents() override;
68  SizeT GetNonNullSize() override;
69  void GetCoordinatesN(const SizeT n, vtkArrayCoordinates& coordinates) override;
70  vtkArray* DeepCopy() override;
71 
72  // vtkTypedArray API
73  const T& GetValue(CoordinateT i) override;
74  const T& GetValue(CoordinateT i, CoordinateT j) override;
75  const T& GetValue(CoordinateT i, CoordinateT j, CoordinateT k) override;
76  const T& GetValue(const vtkArrayCoordinates& coordinates) override;
77  const T& GetValueN(const SizeT n) override;
78  void SetValue(CoordinateT i, const T& value) override;
79  void SetValue(CoordinateT i, CoordinateT j, const T& value) override;
80  void SetValue(CoordinateT i, CoordinateT j, CoordinateT k, const T& value) override;
81  void SetValue(const vtkArrayCoordinates& coordinates, const T& value) override;
82  void SetValueN(const SizeT n, const T& value) override;
83 
84  // vtkDenseArray API
85 
92  {
93  public:
94  virtual ~MemoryBlock();
96 
99  virtual T* GetAddress() = 0;
101  };
102 
104 
110  {
111  public:
113  ~HeapMemoryBlock() override;
114  T* GetAddress() override;
116 
117  private:
118  T* Storage;
119  };
120 
122 
126  {
127  public:
128  StaticMemoryBlock(T* const storage);
129  T* GetAddress() override;
131 
132  private:
133  T* Storage;
134  };
135 
152  void ExternalStorage(const vtkArrayExtents& extents, MemoryBlock* storage);
153 
157  void Fill(const T& value);
158 
162  T& operator[](const vtkArrayCoordinates& coordinates);
163 
168  const T* GetStorage() const;
169 
175 
176 protected:
178  ~vtkDenseArray() override;
179 
180 private:
181  vtkDenseArray(const vtkDenseArray&) = delete;
182  void operator=(const vtkDenseArray&) = delete;
183 
184  void InternalResize(const vtkArrayExtents& extents) override;
185  void InternalSetDimensionLabel(DimensionT i, const vtkStdString& label) override;
186  vtkStdString InternalGetDimensionLabel(DimensionT i) override;
187  inline vtkIdType MapCoordinates(CoordinateT i);
188  inline vtkIdType MapCoordinates(CoordinateT i, CoordinateT j);
189  inline vtkIdType MapCoordinates(CoordinateT i, CoordinateT j, CoordinateT k);
190  inline vtkIdType MapCoordinates(const vtkArrayCoordinates& coordinates);
191 
192  void Reconfigure(const vtkArrayExtents& extents, MemoryBlock* storage);
193 
194  typedef vtkDenseArray<T> ThisT;
195 
199  vtkArrayExtents Extents;
200 
204  std::vector<vtkStdString> DimensionLabels;
205 
209  MemoryBlock* Storage;
210 
212 
216  T* Begin;
217  T* End;
219 
223  std::vector<vtkIdType> Offsets;
225 
228  std::vector<vtkIdType> Strides;
230 };
231 
232 #include "vtkDenseArray.txx"
233 
234 #endif
235 
236 // VTK-HeaderTest-Exclude: vtkDenseArray.h
Stores coordinate into an N-way array.
Stores the number of dimensions and valid coordinate ranges along each dimension for vtkArray.
Abstract interface for N-dimensional arrays.
Definition: vtkArray.h:65
vtkArrayExtents::SizeT SizeT
Definition: vtkArray.h:72
vtkArrayExtents::DimensionT DimensionT
Definition: vtkArray.h:71
vtkArrayExtents::CoordinateT CoordinateT
Definition: vtkArray.h:70
MemoryBlock implementation that manages internally-allocated memory using new[] and delete[].
HeapMemoryBlock(const vtkArrayExtents &extents)
T * GetAddress() override
Returns a pointer to the block of memory to be used for storage.
Strategy object that contains a block of memory to be used by vtkDenseArray for value storage.
Definition: vtkDenseArray.h:92
virtual T * GetAddress()=0
Returns a pointer to the block of memory to be used for storage.
MemoryBlock implementation that manages a static (will not be freed) memory block.
StaticMemoryBlock(T *const storage)
T * GetAddress() override
Returns a pointer to the block of memory to be used for storage.
Contiguous storage for N-way arrays.
Definition: vtkDenseArray.h:55
void SetValueN(const SizeT n, const T &value) override
Overwrites the n-th value stored in the array, where n is in the range [0, GetNonNullSize()).
vtkTemplateTypeMacro(vtkDenseArray< T >, vtkTypedArray< T >)
vtkArray::DimensionT DimensionT
Definition: vtkDenseArray.h:62
SizeT GetNonNullSize() override
Returns the number of non-null values stored in the array.
void SetValue(CoordinateT i, const T &value) override
Overwrites the value stored in the array at the given coordinates.
T & operator[](const vtkArrayCoordinates &coordinates)
Returns a value by-reference, which is useful for performance and code-clarity.
~vtkDenseArray() override
Stores the current array extents (its size along each dimension)
T * GetStorage()
Returns a mutable reference to the underlying storage.
const T & GetValue(CoordinateT i, CoordinateT j, CoordinateT k) override
Returns the value stored in the array at the given coordinates.
bool IsDense() override
Returns true iff the underlying array storage is "dense", i.e.
void ExternalStorage(const vtkArrayExtents &extents, MemoryBlock *storage)
Initializes the array to use an externally-allocated memory block.
vtkArray * DeepCopy() override
Returns a new array that is a deep copy of this array.
vtkDenseArray()
Stores the current array extents (its size along each dimension)
void Fill(const T &value)
Fills every element in the array with the given value.
void GetCoordinatesN(const SizeT n, vtkArrayCoordinates &coordinates) override
Returns the coordinates of the n-th value in the array, where n is in the range [0,...
const T & GetValue(CoordinateT i, CoordinateT j) override
Returns the value stored in the array at the given coordinates.
vtkArray::SizeT SizeT
Definition: vtkDenseArray.h:63
const T * GetStorage() const
Returns a read-only reference to the underlying storage.
const vtkArrayExtents & GetExtents() override
Returns the extents (the number of dimensions and size along each dimension) of the array.
vtkArray::CoordinateT CoordinateT
Definition: vtkDenseArray.h:61
const T & GetValueN(const SizeT n) override
Returns the n-th value stored in the array, where n is in the range [0, GetNonNullSize()).
const T & GetValue(const vtkArrayCoordinates &coordinates) override
Returns the value stored in the array at the given coordinates.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void SetValue(CoordinateT i, CoordinateT j, const T &value) override
Overwrites the value stored in the array at the given coordinates.
void SetValue(CoordinateT i, CoordinateT j, CoordinateT k, const T &value) override
Overwrites the value stored in the array at the given coordinates.
void SetValue(const vtkArrayCoordinates &coordinates, const T &value) override
Overwrites the value stored in the array at the given coordinates.
static vtkDenseArray< T > * New()
const T & GetValue(CoordinateT i) override
Returns the value stored in the array at the given coordinates.
a simple class to control print indentation
Definition: vtkIndent.h:34
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:36
Provides a type-specific interface to N-way arrays.
Definition: vtkTypedArray.h:56
@ value
Definition: vtkX3D.h:226
int vtkIdType
Definition: vtkType.h:332