00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00023 #ifndef __vtkDataArrayTemplate_h
00024 #define __vtkDataArrayTemplate_h
00025
00026 #include "vtkDataArray.h"
00027
00028 template <class T>
00029 class vtkDataArrayTemplateLookup;
00030
00031 template <class T>
00032 class vtkDataArrayTemplate: public vtkDataArray
00033 {
00034 public:
00035 typedef vtkDataArray Superclass;
00036 void PrintSelf(ostream& os, vtkIndent indent);
00037
00040 int Allocate(vtkIdType sz, vtkIdType ext=1000);
00041
00043 void Initialize();
00044
00046 int GetDataTypeSize() { return static_cast<int>(sizeof(T)); }
00047
00049 void SetNumberOfTuples(vtkIdType number);
00050
00056 virtual void SetTuple(vtkIdType i, vtkIdType j, vtkAbstractArray* source);
00057
00061 virtual void InsertTuple(vtkIdType i, vtkIdType j, vtkAbstractArray* source);
00062
00066 virtual vtkIdType InsertNextTuple(vtkIdType j, vtkAbstractArray* source);
00067
00070 double* GetTuple(vtkIdType i);
00071
00073
00074 void GetTuple(vtkIdType i, double* tuple);
00075 void GetTupleValue(vtkIdType i, T* tuple);
00077
00079
00080 void SetTuple(vtkIdType i, const float* tuple);
00081 void SetTuple(vtkIdType i, const double* tuple);
00082 void SetTupleValue(vtkIdType i, const T* tuple);
00084
00086
00088 void InsertTuple(vtkIdType i, const float* tuple);
00089 void InsertTuple(vtkIdType i, const double* tuple);
00090 void InsertTupleValue(vtkIdType i, const T* tuple);
00092
00094
00096 vtkIdType InsertNextTuple(const float* tuple);
00097 vtkIdType InsertNextTuple(const double* tuple);
00098 vtkIdType InsertNextTupleValue(const T* tuple);
00100
00102 void Squeeze() { this->ResizeAndExtend (this->MaxId+1); }
00103
00105 vtkIdType Capacity() { return this->Size; }
00106
00108 virtual int Resize(vtkIdType numTuples);
00109
00111 T GetValue(vtkIdType id) { return this->Array[id]; }
00112
00114
00116 void SetValue(vtkIdType id, T value)
00117 { this->Array[id] = value;};
00119
00123 void SetNumberOfValues(vtkIdType number);
00124
00126 void InsertValue(vtkIdType id, T f);
00127
00129 void InsertVariantValue(vtkIdType id, vtkVariant value);
00130
00133 vtkIdType InsertNextValue(T f);
00134
00136
00139 virtual void RemoveTuple(vtkIdType id);
00140 virtual void RemoveFirstTuple();
00141 virtual void RemoveLastTuple();
00143
00147 double GetComponent(vtkIdType i, int j);
00148
00153 void SetComponent(vtkIdType i, int j, double c);
00154
00158 virtual void InsertComponent(vtkIdType i, int j, double c);
00159
00161
00164 T* WritePointer(vtkIdType id, vtkIdType number);
00165 virtual void* WriteVoidPointer(vtkIdType id, vtkIdType number)
00166 { return this->WritePointer(id, number); }
00168
00170
00172 T* GetPointer(vtkIdType id) { return this->Array + id; }
00173 virtual void* GetVoidPointer(vtkIdType id) { return this->GetPointer(id); }
00175
00177
00178 void DeepCopy(vtkDataArray* da);
00179 void DeepCopy(vtkAbstractArray* aa)
00180 { this->Superclass::DeepCopy(aa); }
00182
00183
00184 enum DeleteMethod
00185 {
00186 VTK_DATA_ARRAY_FREE,
00187 VTK_DATA_ARRAY_DELETE
00188 };
00189
00190
00192
00201 void SetArray(T* array, vtkIdType size, int save, int deleteMethod);
00202 void SetArray(T* array, vtkIdType size, int save)
00203 { this->SetArray(array, size, save, VTK_DATA_ARRAY_FREE); }
00204 virtual void SetVoidArray(void* array, vtkIdType size, int save)
00205 { this->SetArray(static_cast<T*>(array), size, save); }
00206 virtual void SetVoidArray(void* array,
00207 vtkIdType size,
00208 int save,
00209 int deleteMethod)
00210 {
00211 this->SetArray(static_cast<T*>(array), size, save, deleteMethod);
00212 }
00214
00218 virtual void ExportToVoidPointer(void *out_ptr);
00219
00221 virtual vtkArrayIterator* NewIterator();
00222
00223
00225
00226 virtual vtkIdType LookupValue(vtkVariant value);
00227 virtual void LookupValue(vtkVariant value, vtkIdList* ids);
00228
00229 vtkIdType LookupValue(T value);
00230 void LookupValue(T value, vtkIdList* ids);
00232
00239 virtual void DataChanged();
00240
00244 virtual void DataElementChanged(vtkIdType id);
00245
00249 virtual void ClearLookup();
00250
00251 protected:
00252 vtkDataArrayTemplate(vtkIdType numComp);
00253 ~vtkDataArrayTemplate();
00254
00255 T* Array;
00256 T* ResizeAndExtend(vtkIdType sz);
00257 T* Realloc(vtkIdType sz);
00258
00259 int TupleSize;
00260 double* Tuple;
00261
00262 int SaveUserArray;
00263 int DeleteMethod;
00264
00265 virtual void ComputeScalarRange(int comp);
00266 virtual void ComputeVectorRange();
00267 private:
00268 vtkDataArrayTemplate(const vtkDataArrayTemplate&);
00269 void operator=(const vtkDataArrayTemplate&);
00270
00271 vtkDataArrayTemplateLookup<T>* Lookup;
00272 void UpdateLookup();
00273
00274 void DeleteArray();
00275 };
00276
00277 #if !defined(VTK_NO_EXPLICIT_TEMPLATE_INSTANTIATION)
00278 # define VTK_DATA_ARRAY_TEMPLATE_INSTANTIATE(T) \
00279 template class VTK_COMMON_EXPORT vtkDataArrayTemplate< T >
00280 #else
00281 # include "vtkDataArrayTemplateImplicit.txx"
00282 # define VTK_DATA_ARRAY_TEMPLATE_INSTANTIATE(T)
00283 #endif
00284
00285 #endif // !defined(__vtkDataArrayTemplate_h)
00286
00287
00288
00289
00290 #if defined(VTK_DATA_ARRAY_TEMPLATE_TYPE)
00291 # if defined(VTK_BUILD_SHARED_LIBS) && defined(_MSC_VER)
00292 # pragma warning (push)
00293 # pragma warning (disable: 4091) // warning C4091: 'extern ' :
00294
00295 # pragma warning (disable: 4231) // Compiler-specific extension warning.
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305
00306
00307
00308 # pragma warning (disable: 4910) // extern and dllexport incompatible
00309
00310
00311
00312 extern VTK_DATA_ARRAY_TEMPLATE_INSTANTIATE(VTK_DATA_ARRAY_TEMPLATE_TYPE);
00313 # pragma warning (pop)
00314 # endif
00315 # undef VTK_DATA_ARRAY_TEMPLATE_TYPE
00316 #endif