VTK
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 
72 #ifndef vtkSparseArray_h
73 #define vtkSparseArray_h
74 
75 #include "vtkArrayCoordinates.h"
76 #include "vtkArraySort.h"
77 #include "vtkObjectFactory.h"
78 #include "vtkTypedArray.h"
79 
80 template<typename T>
81 class vtkSparseArray : public vtkTypedArray<T>
82 {
83 public:
85  static vtkSparseArray<T>* New();
86  void PrintSelf(ostream &os, vtkIndent indent) override;
87 
89  typedef typename vtkArray::DimensionT DimensionT;
90  typedef typename vtkArray::SizeT SizeT;
91 
92  // vtkArray API
93  bool IsDense() override;
94  const vtkArrayExtents& GetExtents() override;
95  SizeT GetNonNullSize() override;
96  void GetCoordinatesN(const SizeT n, vtkArrayCoordinates& coordinates) override;
97  vtkArray* DeepCopy() override;
98 
99  // vtkTypedArray API
100  const T& GetValue(CoordinateT i) override;
101  const T& GetValue(CoordinateT i, CoordinateT j) override;
102  const T& GetValue(CoordinateT i, CoordinateT j, CoordinateT k) override;
103  const T& GetValue(const vtkArrayCoordinates& coordinates) override;
104  const T& GetValueN(const SizeT n) override;
105  void SetValue(CoordinateT i, const T& value) override;
106  void SetValue(CoordinateT i, CoordinateT j, const T& value) override;
107  void SetValue(CoordinateT i, CoordinateT j, CoordinateT k, const T& value) override;
108  void SetValue(const vtkArrayCoordinates& coordinates, const T& value) override;
109  void SetValueN(const SizeT n, const T& value) override;
110 
111  // vtkSparseArray API
112 
116  void SetNullValue(const T& value);
117 
121  const T& GetNullValue();
122 
127  void Clear();
128 
135  void Sort(const vtkArraySort& sort);
136 
140  std::vector<CoordinateT> GetUniqueCoordinates(DimensionT dimension);
141 
148  const CoordinateT* GetCoordinateStorage(DimensionT dimension) const;
149 
157 
163  const T* GetValueStorage() const;
164 
170  T* GetValueStorage();
171 
180  void ReserveStorage(const SizeT value_count);
181 
186  void SetExtentsFromContents();
193  void SetExtents(const vtkArrayExtents& extents);
194 
196 
202  inline void AddValue(CoordinateT i, const T& value);
203  inline void AddValue(CoordinateT i, CoordinateT j, const T& value);
204  inline void AddValue(CoordinateT i, CoordinateT j, CoordinateT k, const T& value);
205  void AddValue(const vtkArrayCoordinates& coordinates, const T& value);
207 
217  bool Validate();
218 
219 protected:
220  vtkSparseArray();
221  ~vtkSparseArray() override;
222 
223 private:
224  vtkSparseArray(const vtkSparseArray&) = delete;
225  void operator=(const vtkSparseArray&) = delete;
226 
227  void InternalResize(const vtkArrayExtents& extents) override;
228  void InternalSetDimensionLabel(DimensionT i, const vtkStdString& label) override;
229  vtkStdString InternalGetDimensionLabel(DimensionT i) override;
230 
231  typedef vtkSparseArray<T> ThisT;
232 
236  vtkArrayExtents Extents;
237 
241  std::vector<vtkStdString> DimensionLabels;
242 
247  std::vector<std::vector<CoordinateT> > Coordinates;
248 
252  std::vector<T> Values;
253 
255 
259  T NullValue;
260 };
262 
263 #include "vtkSparseArray.txx"
264 
265 #endif
266 // VTK-HeaderTest-Exclude: vtkSparseArray.h
vtkSparseArray::Sort
void Sort(const vtkArraySort &sort)
Sorts array values so that their coordinates appear in some well-defined order.
vtkSparseArray::SetExtents
void SetExtents(const vtkArrayExtents &extents)
Specify arbitrary array extents, without altering the contents of the array.
vtkArray::SizeT
vtkArrayExtents::SizeT SizeT
Definition: vtkArray.h:78
vtkSparseArray::Clear
void Clear()
Remove all non-null elements from the array, leaving the number of dimensions, the extent of each dim...
vtkSparseArray::IsDense
bool IsDense() override
Returns true iff the underlying array storage is "dense", i.e.
vtkSparseArray::vtkTemplateTypeMacro
vtkTemplateTypeMacro(vtkSparseArray< T >, vtkTypedArray< T >) static vtkSparseArray< T > *New()
vtkX3D::value
Definition: vtkX3D.h:220
vtkArraySort
Controls sorting of sparse array coordinates.
Definition: vtkArraySort.h:54
vtkSparseArray::GetValueStorage
const T * GetValueStorage() const
Return a read-only reference to the underlying value storage.
vtkTypedArray.h
vtkObject::New
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on.
vtkObjectFactory.h
vtkSparseArray::GetNullValue
const T & GetNullValue()
Returns the value that will be returned by GetValue() for nullptr areas of the array.
vtkSparseArray::GetCoordinateStorage
const CoordinateT * GetCoordinateStorage(DimensionT dimension) const
Return a read-only reference to the underlying coordinate storage.
vtkSparseArray::DimensionT
vtkArray::DimensionT DimensionT
Definition: vtkSparseArray.h:89
vtkSparseArray::GetCoordinatesN
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,...
vtkSparseArray::GetExtents
const vtkArrayExtents & GetExtents() override
Returns the extents (the number of dimensions and size along each dimension) of the array.
vtkArrayCoordinates.h
vtkSparseArray::GetUniqueCoordinates
std::vector< CoordinateT > GetUniqueCoordinates(DimensionT dimension)
Returns the set of unique coordinates along the given dimension.
vtkSparseArray::DeepCopy
vtkArray * DeepCopy() override
Returns a new array that is a deep copy of this array.
vtkSparseArray::AddValue
void AddValue(CoordinateT i, const T &value)
Adds a new non-null element to the array.
vtkTypedArray
Provides a type-specific interface to N-way arrays.
Definition: vtkTypedArray.h:58
vtkSparseArray::~vtkSparseArray
~vtkSparseArray() override
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:39
vtkSparseArray::SetValue
void SetValue(CoordinateT i, const T &value) override
Overwrites the value stored in the array at the given coordinates.
vtkSparseArray::vtkSparseArray
vtkSparseArray()
vtkSparseArray::SetNullValue
void SetNullValue(const T &value)
Set the value that will be returned by GetValue() for nullptr areas of the array.
vtkArray
Abstract interface for N-dimensional arrays.
Definition: vtkArray.h:70
vtkSparseArray
Sparse, independent coordinate storage for N-way arrays.
Definition: vtkSparseArray.h:81
vtkSparseArray::ReserveStorage
void ReserveStorage(const SizeT value_count)
Reserve storage for a specific number of values.
vtkSparseArray::GetValueN
const T & GetValueN(const SizeT n) override
Returns the n-th value stored in the array, where n is in the range [0, GetNonNullSize()).
vtkSparseArray::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkSparseArray::CoordinateT
vtkArray::CoordinateT CoordinateT
Definition: vtkSparseArray.h:88
vtkSparseArray::SizeT
vtkArray::SizeT SizeT
Definition: vtkSparseArray.h:90
vtkSparseArray::Validate
bool Validate()
Validate the contents of the array, returning false if there are any problems.
vtkSparseArray::SetExtentsFromContents
void SetExtentsFromContents()
Update the array extents to match its contents, so that the extent along each dimension matches the m...
vtkSparseArray::SetValueN
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()).
vtkArraySort.h
vtkStdString
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:40
vtkArray::CoordinateT
vtkArrayExtents::CoordinateT CoordinateT
Definition: vtkArray.h:76
vtkSparseArray::GetNonNullSize
SizeT GetNonNullSize() override
Returns the number of non-null values stored in the array.
vtkSparseArray::GetValue
const T & GetValue(CoordinateT i) override
Returns the value stored in the array at the given coordinates.
vtkArrayExtents
Stores the number of dimensions and valid coordinate ranges along each dimension for vtkArray.
Definition: vtkArrayExtents.h:74
vtkArrayCoordinates
Stores coordinate into an N-way array.
Definition: vtkArrayCoordinates.h:57
vtkArray::DimensionT
vtkArrayExtents::DimensionT DimensionT
Definition: vtkArray.h:77