00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00056 #ifndef __vtkSparseArray_h
00057 #define __vtkSparseArray_h
00058
00059 #include "vtkArrayCoordinates.h"
00060 #include "vtkObjectFactory.h"
00061 #include "vtkTypeTemplate.h"
00062 #include "vtkTypedArray.h"
00063
00064 template<typename T>
00065 class vtkSparseArray :
00066 public vtkTypeTemplate<vtkSparseArray<T>, vtkTypedArray<T> >
00067 {
00068 public:
00069 using vtkTypedArray<T>::GetValue;
00070 using vtkTypedArray<T>::SetValue;
00071
00072 static vtkSparseArray<T>* New();
00073 void PrintSelf(ostream &os, vtkIndent indent);
00074
00075
00076 vtkArrayExtents GetExtents();
00077 vtkIdType GetNonNullSize();
00078 void GetCoordinatesN(const vtkIdType n, vtkArrayCoordinates& coordinates);
00079 vtkArray* DeepCopy();
00080
00081
00082 const T& GetValue(const vtkArrayCoordinates& coordinates);
00083 const T& GetValueN(const vtkIdType n);
00084 void SetValue(const vtkArrayCoordinates& coordinates, const T& value);
00085 void SetValueN(const vtkIdType n, const T& value);
00086
00087
00088
00091 void SetNullValue(const T& value);
00092
00095 const T& GetNullValue();
00096
00100 void Clear();
00101
00106 const vtkIdType* GetCoordinateStorage() const;
00107
00112 vtkIdType* GetCoordinateStorage();
00113
00118 const T* GetValueStorage() const;
00119
00124 T* GetValueStorage();
00125
00134 void ReserveStorage(const vtkIdType value_count);
00135
00139 void ResizeToContents();
00140
00142
00146 inline void AddValue(vtkIdType i, const T& value);
00147 inline void AddValue(vtkIdType i, vtkIdType j, const T& value);
00148 inline void AddValue(vtkIdType i, vtkIdType j, vtkIdType k, const T& value);
00149 void AddValue(const vtkArrayCoordinates& coordinates, const T& value);
00151
00152 protected:
00153 vtkSparseArray();
00154 ~vtkSparseArray();
00155
00156 private:
00157 vtkSparseArray(const vtkSparseArray&);
00158 void operator=(const vtkSparseArray&);
00159
00160 void InternalResize(const vtkArrayExtents& extents);
00161 void InternalSetDimensionLabel(vtkIdType i, const vtkStdString& label);
00162 vtkStdString InternalGetDimensionLabel(vtkIdType i);
00163
00164 typedef vtkSparseArray<T> ThisT;
00165
00167 vtkArrayExtents Extents;
00168
00170 vtkstd::vector<vtkStdString> DimensionLabels;
00171
00174 vtkstd::vector<vtkIdType> Coordinates;
00175
00177 vtkstd::vector<T> Values;
00178
00181 T NullValue;
00182 };
00183
00184 #include "vtkSparseArray.txx"
00185
00186 #endif
00187