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

vtkVoidArray.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkVoidArray.h,v $
00005   Language:  C++
00006 
00007   Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen 
00008   All rights reserved.
00009   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00010 
00011      This software is distributed WITHOUT ANY WARRANTY; without even 
00012      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
00013      PURPOSE.  See the above copyright notice for more information.
00014 
00015 =========================================================================*/
00027 #ifndef __vtkVoidArray_h
00028 #define __vtkVoidArray_h
00029 
00030 #include "vtkDataArray.h"
00031 
00032 class VTK_COMMON_EXPORT vtkVoidArray : public vtkDataArray
00033 {
00034 public:
00035   static vtkVoidArray *New();
00036 
00037   vtkTypeRevisionMacro(vtkVoidArray,vtkDataArray);
00038   void PrintSelf(ostream& os, vtkIndent indent);
00039 
00042   int Allocate(const vtkIdType sz, const vtkIdType ext=1000);
00043 
00045   void Initialize();
00046 
00048   int GetDataType() {return VTK_VOID;};
00049   
00051   int GetDataTypeSize() { return sizeof(void*); }
00052   
00054   void SetNumberOfTuples(const vtkIdType number);
00055 
00057   float *GetTuple(const vtkIdType i);
00058 
00060 
00061   void GetTuple(const vtkIdType i, float * tuple);
00062   void GetTuple(const vtkIdType i, double * tuple);
00064 
00066 
00067   void SetTuple(const vtkIdType i, const float * tuple);
00068   void SetTuple(const vtkIdType i, const double * tuple);
00070 
00072 
00074   void InsertTuple(const vtkIdType i, const float * tuple);
00075   void InsertTuple(const vtkIdType i, const double * tuple);
00077 
00079 
00081   vtkIdType InsertNextTuple(const float * tuple);
00082   vtkIdType InsertNextTuple(const double * tuple);
00084 
00086   void Squeeze() {this->ResizeAndExtend (this->MaxId+1);};
00087 
00089   virtual void Resize(vtkIdType numTuples);
00090 
00092   void* GetValue(const vtkIdType id) {return this->Array[id];};
00093 
00097   void SetNumberOfValues(const vtkIdType number);
00098 
00101   void SetValue(const vtkIdType id, void *value);
00102 
00104   void InsertValue(const vtkIdType id, void* p);
00105 
00108   vtkIdType InsertNextValue(void* v);
00109 
00111 
00113   void** GetPointer(const vtkIdType id) {return this->Array + id;}
00114   void *GetVoidPointer(const vtkIdType id) {return this->GetPointer(id);};
00116 
00120   void** WritePointer(const vtkIdType id, const vtkIdType number);
00121   
00123   void DeepCopy(vtkDataArray *da);
00124   
00125 
00126 protected:
00127   vtkVoidArray();
00128   ~vtkVoidArray();
00129 
00130   void** Array;  // pointer to data
00131   void** ResizeAndExtend(const vtkIdType sz);  // function to resize data
00132 
00133   int TupleSize; //used for data conversion
00134   float *Tuple;
00135 private:
00136   vtkVoidArray(const vtkVoidArray&);  // Not implemented.
00137   void operator=(const vtkVoidArray&);  // Not implemented.
00138 };
00139 
00140 
00141 inline void vtkVoidArray::SetNumberOfValues(const vtkIdType number) 
00142 {
00143   this->Allocate(number);
00144   this->MaxId = number - 1;
00145 }
00146 
00147 inline void vtkVoidArray::SetValue(const vtkIdType id, void *value) 
00148 {
00149   this->Array[id] = value;
00150 }
00151 
00152 inline void** vtkVoidArray::WritePointer(const vtkIdType id,
00153                                          const vtkIdType number) 
00154 {
00155   vtkIdType newSize=id+number;
00156   if ( newSize > this->Size )
00157     {
00158     this->ResizeAndExtend(newSize);
00159     }
00160   if ( (--newSize) > this->MaxId )
00161     {
00162     this->MaxId = newSize;
00163     }
00164   return this->Array + id;
00165 }
00166 
00167 inline void vtkVoidArray::InsertValue(const vtkIdType id, void* p)
00168 {
00169   if ( id >= this->Size )
00170     {
00171     this->ResizeAndExtend(id+1);
00172     }
00173   this->Array[id] = p;
00174   if ( id > this->MaxId )
00175     {
00176     this->MaxId = id;
00177     }
00178 }
00179 
00180 inline vtkIdType vtkVoidArray::InsertNextValue(void* p)
00181 {
00182   this->InsertValue (++this->MaxId,p);
00183   return this->MaxId;
00184 }
00185 
00186 
00187 #endif