VTK  9.2.6
vtkSparseArray.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkSparseArray.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 
88 #ifndef vtkSparseArray_h
89 #define vtkSparseArray_h
90 
91 #include "vtkArrayCoordinates.h"
92 #include "vtkArraySort.h"
93 #include "vtkObjectFactory.h"
94 #include "vtkTypedArray.h"
95 
96 template <typename T>
97 class vtkSparseArray : public vtkTypedArray<T>
98 {
99 public:
102  void PrintSelf(ostream& os, vtkIndent indent) override;
103 
106  typedef typename vtkArray::SizeT SizeT;
107 
108  // vtkArray API
109  bool IsDense() override;
110  const vtkArrayExtents& GetExtents() override;
111  SizeT GetNonNullSize() override;
112  void GetCoordinatesN(const SizeT n, vtkArrayCoordinates& coordinates) override;
113  vtkArray* DeepCopy() override;
114 
115  // vtkTypedArray API
116  const T& GetValue(CoordinateT i) override;
117  const T& GetValue(CoordinateT i, CoordinateT j) override;
118  const T& GetValue(CoordinateT i, CoordinateT j, CoordinateT k) override;
119  const T& GetValue(const vtkArrayCoordinates& coordinates) override;
120  const T& GetValueN(const SizeT n) override;
121  void SetValue(CoordinateT i, const T& value) override;
122  void SetValue(CoordinateT i, CoordinateT j, const T& value) override;
123  void SetValue(CoordinateT i, CoordinateT j, CoordinateT k, const T& value) override;
124  void SetValue(const vtkArrayCoordinates& coordinates, const T& value) override;
125  void SetValueN(const SizeT n, const T& value) override;
126 
127  // vtkSparseArray API
128 
132  void SetNullValue(const T& value);
133 
137  const T& GetNullValue();
138 
143  void Clear();
144 
151  void Sort(const vtkArraySort& sort);
152 
156  std::vector<CoordinateT> GetUniqueCoordinates(DimensionT dimension);
157 
164  const CoordinateT* GetCoordinateStorage(DimensionT dimension) const;
165 
173 
179  const T* GetValueStorage() const;
180 
187 
196  void ReserveStorage(const SizeT value_count);
197 
209  void SetExtents(const vtkArrayExtents& extents);
210 
212 
218  inline void AddValue(CoordinateT i, const T& value);
219  inline void AddValue(CoordinateT i, CoordinateT j, const T& value);
220  inline void AddValue(CoordinateT i, CoordinateT j, CoordinateT k, const T& value);
221  void AddValue(const vtkArrayCoordinates& coordinates, const T& value);
223 
233  bool Validate();
234 
235 protected:
237  ~vtkSparseArray() override;
238 
239 private:
240  vtkSparseArray(const vtkSparseArray&) = delete;
241  void operator=(const vtkSparseArray&) = delete;
242 
243  void InternalResize(const vtkArrayExtents& extents) override;
244  void InternalSetDimensionLabel(DimensionT i, const vtkStdString& label) override;
245  vtkStdString InternalGetDimensionLabel(DimensionT i) override;
246 
247  typedef vtkSparseArray<T> ThisT;
248 
252  vtkArrayExtents Extents;
253 
257  std::vector<vtkStdString> DimensionLabels;
258 
263  std::vector<std::vector<CoordinateT>> Coordinates;
264 
268  std::vector<T> Values;
269 
271 
275  T NullValue;
277 };
278 
279 #include "vtkSparseArray.txx"
280 
281 #endif
282 // VTK-HeaderTest-Exclude: vtkSparseArray.h
Stores coordinate into an N-way array.
Stores the number of dimensions and valid coordinate ranges along each dimension for vtkArray.
Controls sorting of sparse array coordinates.
Definition: vtkArraySort.h:55
Abstract interface for N-dimensional arrays.
Definition: vtkArray.h:68
vtkArrayExtents::SizeT SizeT
Definition: vtkArray.h:75
vtkArrayExtents::DimensionT DimensionT
Definition: vtkArray.h:74
vtkArrayExtents::CoordinateT CoordinateT
Definition: vtkArray.h:73
a simple class to control print indentation
Definition: vtkIndent.h:119
Sparse, independent coordinate storage for N-way arrays.
void SetExtents(const vtkArrayExtents &extents)
Specify arbitrary array extents, without altering the contents of the array.
void SetValue(CoordinateT i, const T &value) override
Overwrites the value stored in the array at the given coordinates.
void AddValue(CoordinateT i, const T &value)
Adds a new non-null element to the array.
bool Validate()
Validate the contents of the array, returning false if there are any problems.
void Sort(const vtkArraySort &sort)
Sorts array values so that their coordinates appear in some well-defined order.
vtkArray::SizeT SizeT
void SetNullValue(const T &value)
Set the value that will be returned by GetValue() for nullptr areas of the array.
vtkArray * DeepCopy() override
Returns a new array that is a deep copy of this array.
const T & GetNullValue()
Returns the value that will be returned by GetValue() for nullptr areas of the array.
void SetExtentsFromContents()
Update the array extents to match its contents, so that the extent along each dimension matches the m...
void AddValue(CoordinateT i, CoordinateT j, const T &value)
Adds a new non-null element to the array.
void SetValue(const vtkArrayCoordinates &coordinates, const T &value) override
Overwrites the value stored in the array at the given coordinates.
const T & GetValue(CoordinateT i, CoordinateT j) override
Returns the value stored in the array at the given coordinates.
void SetValue(CoordinateT i, CoordinateT j, const T &value) override
Overwrites the value stored in the array at the given coordinates.
static vtkSparseArray< T > * New()
~vtkSparseArray() override
const T & GetValueN(const SizeT n) override
Returns the n-th value stored in the array, where n is in the range [0, GetNonNullSize()).
vtkArray::DimensionT DimensionT
const CoordinateT * GetCoordinateStorage(DimensionT dimension) const
Return a read-only reference to the underlying coordinate storage.
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()).
SizeT GetNonNullSize() override
Returns the number of non-null values stored in the array.
void AddValue(CoordinateT i, CoordinateT j, CoordinateT k, const T &value)
Adds a new non-null element to the array.
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 * GetValueStorage() const
Return a read-only reference to the underlying value storage.
void AddValue(const vtkArrayCoordinates &coordinates, const T &value)
Adds a new non-null element to the array.
void Clear()
Remove all non-null elements from the array, leaving the number of dimensions, the extent of each dim...
T * GetValueStorage()
Return a mutable reference to the underlying value storage.
vtkTemplateTypeMacro(vtkSparseArray< T >, vtkTypedArray< T >)
const T & GetValue(const vtkArrayCoordinates &coordinates) override
Returns 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 ReserveStorage(const SizeT value_count)
Reserve storage for a specific number of values.
CoordinateT * GetCoordinateStorage(DimensionT dimension)
Return a mutable reference to the underlying coordinate storage.
const vtkArrayExtents & GetExtents() override
Returns the extents (the number of dimensions and size along each dimension) of the array.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
const T & GetValue(CoordinateT i, CoordinateT j, CoordinateT k) override
Returns the value stored in the array at the given coordinates.
const T & GetValue(CoordinateT i) override
Returns the value stored in the array at the given coordinates.
vtkArray::CoordinateT CoordinateT
std::vector< CoordinateT > GetUniqueCoordinates(DimensionT dimension)
Returns the set of unique coordinates along the given dimension.
bool IsDense() override
Returns true iff the underlying array storage is "dense", i.e.
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:108
Provides a type-specific interface to N-way arrays.
Definition: vtkTypedArray.h:59
@ value
Definition: vtkX3D.h:226