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

# Common/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 =========================================================================*/
    00042 #ifndef __vtkVoidArray_h
    00043 #define __vtkVoidArray_h
    00044
    00045 #include "vtkDataArray.h"
    00046
    00047 class VTK_COMMON_EXPORT vtkVoidArray : public vtkDataArray
    00048 {
    00049 public:
    00050   static vtkVoidArray *New();
    00051
    00052   vtkTypeRevisionMacro(vtkVoidArray,vtkDataArray);
    00053   void PrintSelf(ostream& os, vtkIndent indent);
    00054
    00057   int Allocate(const vtkIdType sz, const vtkIdType ext=1000);
    00058
    00060   void Initialize();
    00061
    00063   int GetDataType() {return VTK_VOID;};
    00064
    00066   int GetDataTypeSize() { return sizeof(void*); }
    00067
    00069   void SetNumberOfTuples(const vtkIdType number);
    00070
    00072   float *GetTuple(const vtkIdType i);
    00073
    00075
    00076   void GetTuple(const vtkIdType i, float * tuple);
    00077   void GetTuple(const vtkIdType i, double * tuple);
    00079
    00081
    00082   void SetTuple(const vtkIdType i, const float * tuple);
    00083   void SetTuple(const vtkIdType i, const double * tuple);
    00085
    00087
    00089   void InsertTuple(const vtkIdType i, const float * tuple);
    00090   void InsertTuple(const vtkIdType i, const double * tuple);
    00092
    00094
    00096   vtkIdType InsertNextTuple(const float * tuple);
    00097   vtkIdType InsertNextTuple(const double * tuple);
    00099
    00101   void Squeeze() {this->ResizeAndExtend (this->MaxId+1);};
    00102
    00104   virtual void Resize(vtkIdType numTuples);
    00105
    00107   void* GetValue(const vtkIdType id) {return this->Array[id];};
    00108
    00112   void SetNumberOfValues(const vtkIdType number);
    00113
    00116   void SetValue(const vtkIdType id, void *value);
    00117
    00119   void InsertValue(const vtkIdType id, void* p);
    00120
    00123   vtkIdType InsertNextValue(void* v);
    00124
    00126
    00128   void** GetPointer(const vtkIdType id) {return this->Array + id;}
    00129   void *GetVoidPointer(const vtkIdType id) {return this->GetPointer(id);};
    00131
    00135   void** WritePointer(const vtkIdType id, const vtkIdType number);
    00136
    00138   void DeepCopy(vtkDataArray *da);
    00139
    00140
    00141 protected:
    00142   vtkVoidArray();
    00143   ~vtkVoidArray();
    00144
    00145   void** Array;  // pointer to data
    00146   void** ResizeAndExtend(const vtkIdType sz);  // function to resize data
    00147
    00148   int TupleSize; //used for data conversion
    00149   float *Tuple;
    00150 private:
    00151   vtkVoidArray(const vtkVoidArray&);  // Not implemented.
    00152   void operator=(const vtkVoidArray&);  // Not implemented.
    00153 };
    00154
    00155
    00156 inline void vtkVoidArray::SetNumberOfValues(const vtkIdType number)
    00157 {
    00158   this->Allocate(number);
    00159   this->MaxId = number - 1;
    00160 }
    00161
    00162 inline void vtkVoidArray::SetValue(const vtkIdType id, void *value)
    00163 {
    00164   this->Array[id] = value;
    00165 }
    00166
    00167 inline void** vtkVoidArray::WritePointer(const vtkIdType id,
    00168                                          const vtkIdType number)
    00169 {
    00170   vtkIdType newSize=id+number;
    00171   if ( newSize > this->Size )
    00172     {
    00173     this->ResizeAndExtend(newSize);
    00174     }
    00175   if ( (--newSize) > this->MaxId )
    00176     {
    00177     this->MaxId = newSize;
    00178     }
    00179   return this->Array + id;
    00180 }
    00181
    00182 inline void vtkVoidArray::InsertValue(const vtkIdType id, void* p)
    00183 {
    00184   if ( id >= this->Size )
    00185     {
    00186     this->ResizeAndExtend(id+1);
    00187     }
    00188   this->Array[id] = p;
    00189   if ( id > this->MaxId )
    00190     {
    00191     this->MaxId = id;
    00192     }
    00193 }
    00194
    00195 inline vtkIdType vtkVoidArray::InsertNextValue(void* p)
    00196 {
    00197   this->InsertValue (++this->MaxId,p);
    00198   return this->MaxId;
    00199 }
    00200
    00201
    00202 #endif