Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

dox/Common/vtkDataArrayTemplate.h

Go to the documentation of this file.
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: $RCSfile: vtkDataArrayTemplate.h,v $ 00005 00006 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen 00007 All rights reserved. 00008 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00009 00010 This software is distributed WITHOUT ANY WARRANTY; without even 00011 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00012 PURPOSE. See the above copyright notice for more information. 00013 00014 =========================================================================*/ 00023 #ifndef __vtkDataArrayTemplate_h 00024 #define __vtkDataArrayTemplate_h 00025 00026 #include "vtkDataArray.h" 00027 00028 template <class T> 00029 class vtkDataArrayTemplate: public vtkDataArray 00030 { 00031 public: 00032 typedef vtkDataArray Superclass; 00033 void PrintSelf(ostream& os, vtkIndent indent); 00034 00037 int Allocate(vtkIdType sz, vtkIdType ext=1000); 00038 00040 void Initialize(); 00041 00043 int GetDataTypeSize() { return static_cast<int>(sizeof(T)); } 00044 00046 void SetNumberOfTuples(vtkIdType number); 00047 00050 double* GetTuple(vtkIdType i); 00051 00053 void GetTuple(vtkIdType i, double* tuple); 00054 00056 00057 void SetTuple(vtkIdType i, const float* tuple); 00058 void SetTuple(vtkIdType i, const double* tuple); 00060 00062 00064 void InsertTuple(vtkIdType i, const float* tuple); 00065 void InsertTuple(vtkIdType i, const double* tuple); 00067 00069 00071 vtkIdType InsertNextTuple(const float* tuple); 00072 vtkIdType InsertNextTuple(const double* tuple); 00074 00076 void Squeeze() { this->ResizeAndExtend (this->MaxId+1); } 00077 00079 virtual void Resize(vtkIdType numTuples); 00080 00082 T GetValue(vtkIdType id) { return this->Array[id]; } 00083 00085 00087 void SetValue(vtkIdType id, T value) 00088 { this->Array[id] = value;}; 00090 00094 void SetNumberOfValues(vtkIdType number); 00095 00097 void InsertValue(vtkIdType id, T f); 00098 00101 vtkIdType InsertNextValue(T f); 00102 00106 double GetComponent(vtkIdType i, int j); 00107 00112 void SetComponent(vtkIdType i, int j, double c); 00113 00117 virtual void InsertComponent(vtkIdType i, int j, double c); 00118 00122 T* WritePointer(vtkIdType id, vtkIdType number); 00123 00125 00127 T* GetPointer(vtkIdType id) { return this->Array + id; } 00128 void* GetVoidPointer(vtkIdType id) { return this->GetPointer(id); } 00130 00132 void DeepCopy(vtkDataArray* da); 00133 00135 00141 void SetArray(T* array, vtkIdType size, int save); 00142 void SetVoidArray(void* array, vtkIdType size, int save) 00143 { this->SetArray(static_cast<T*>(array), size, save); } 00145 00146 protected: 00147 vtkDataArrayTemplate(vtkIdType numComp); 00148 ~vtkDataArrayTemplate(); 00149 00150 T* Array; // pointer to data 00151 T* ResizeAndExtend(vtkIdType sz); // function to resize data 00152 00153 int TupleSize; //used for data conversion 00154 double* Tuple; 00155 00156 int SaveUserArray; 00157 00158 private: 00159 vtkDataArrayTemplate(const vtkDataArrayTemplate&); // Not implemented. 00160 void operator=(const vtkDataArrayTemplate&); // Not implemented. 00161 }; 00162 00163 #if !defined(VTK_NO_EXPLICIT_TEMPLATE_INSTANTIATION) 00164 # define VTK_DATA_ARRAY_TEMPLATE_INSTANTIATE(T) \ 00165 template class VTK_COMMON_EXPORT vtkDataArrayTemplate< T > 00166 #else 00167 # include "vtkDataArrayTemplateImplicit.txx" 00168 # define VTK_DATA_ARRAY_TEMPLATE_INSTANTIATE(T) 00169 #endif 00170 00171 #endif // !defined(__vtkDataArrayTemplate_h) 00172 00173 // This portion must be OUTSIDE the include blockers. Each 00174 // vtkDataArray subclass uses this to give its instantiation of this 00175 // template a DLL interface. 00176 #if defined(VTK_DATA_ARRAY_TEMPLATE_TYPE) 00177 # if defined(VTK_BUILD_SHARED_LIBS) && defined(_MSC_VER) 00178 # pragma warning (push) 00179 # pragma warning (disable: 4231) // Compiler-specific extension warning. 00180 // Use an "extern explicit instantiation" to give the class a DLL 00181 // interface. This is a compiler-specific extension. 00182 extern VTK_DATA_ARRAY_TEMPLATE_INSTANTIATE(VTK_DATA_ARRAY_TEMPLATE_TYPE); 00183 # pragma warning (pop) 00184 # endif 00185 # undef VTK_DATA_ARRAY_TEMPLATE_TYPE 00186 #endif