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

dox/Common/vtkBitArray.h

Go to the documentation of this file.
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 Module: $RCSfile: vtkBitArray.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 =========================================================================*/ 00028 #ifndef __vtkBitArray_h 00029 #define __vtkBitArray_h 00030 00031 #include "vtkDataArray.h" 00032 00033 class VTK_COMMON_EXPORT vtkBitArray : public vtkDataArray 00034 { 00035 public: 00036 static vtkBitArray *New(); 00037 vtkTypeRevisionMacro(vtkBitArray,vtkDataArray); 00038 void PrintSelf(ostream& os, vtkIndent indent); 00039 00042 int Allocate(const vtkIdType sz, const vtkIdType ext=1000); 00043 00045 void Initialize(); 00046 00047 // satisfy vtkDataArray API 00048 int GetDataType() {return VTK_BIT;}; 00049 int GetDataTypeSize() { return 0; } 00050 00052 void SetNumberOfTuples(const vtkIdType number); 00053 00056 float *GetTuple(const vtkIdType i); 00057 00059 00060 void GetTuple(const vtkIdType i, float * tuple); 00061 void GetTuple(const vtkIdType i, double * tuple); 00063 00065 00066 void SetTuple(const vtkIdType i, const float * tuple); 00067 void SetTuple(const vtkIdType i, const double * tuple); 00069 00071 00073 void InsertTuple(const vtkIdType i, const float * tuple); 00074 void InsertTuple(const vtkIdType i, const double * tuple); 00076 00078 00080 vtkIdType InsertNextTuple(const float * tuple); 00081 vtkIdType InsertNextTuple(const double * tuple); 00083 00088 void SetComponent(const vtkIdType i, const int j, float c); 00089 00091 void Squeeze(); 00092 00094 virtual void Resize(vtkIdType numTuples); 00095 00097 int GetValue(const vtkIdType id); 00098 00104 void SetNumberOfValues(const vtkIdType number); 00105 00108 void SetValue(const vtkIdType id, const int value); 00109 00111 00112 void InsertValue(const vtkIdType id, const int i); 00113 vtkIdType InsertNextValue(const int i); 00115 00119 virtual void InsertComponent(const vtkIdType i, const int j, float c); 00120 00122 unsigned char *GetPointer(const vtkIdType id) {return this->Array + id/8;} 00123 00125 00128 unsigned char *WritePointer(const vtkIdType id, const vtkIdType number); 00129 void *GetVoidPointer(const vtkIdType id) 00130 {return (void *)this->GetPointer(id);}; 00132 00134 void DeepCopy(vtkDataArray *da); 00135 00137 00143 void SetArray(unsigned char* array, vtkIdType size, int save); 00144 void SetVoidArray(void *array, vtkIdType size, int save) 00145 {this->SetArray((unsigned char *)array, size, save);}; 00147 00148 00149 protected: 00150 vtkBitArray(vtkIdType numComp=1); 00151 ~vtkBitArray(); 00152 00153 unsigned char *Array; // pointer to data 00154 unsigned char *ResizeAndExtend(const vtkIdType sz); 00155 // function to resize data 00156 00157 int TupleSize; //used for data conversion 00158 float *Tuple; 00159 00160 int SaveUserArray; 00161 00162 private: 00163 // hide superclass' DeepCopy() from the user and the compiler 00164 void DeepCopy(vtkDataArray &da) {this->vtkDataArray::DeepCopy(&da);} 00165 00166 private: 00167 vtkBitArray(const vtkBitArray&); // Not implemented. 00168 void operator=(const vtkBitArray&); // Not implemented. 00169 }; 00170 00171 inline unsigned char *vtkBitArray::WritePointer(const vtkIdType id, 00172 const vtkIdType number) 00173 { 00174 vtkIdType newSize=id+number; 00175 if ( newSize > this->Size ) 00176 { 00177 this->ResizeAndExtend(newSize); 00178 } 00179 if ( (--newSize) > this->MaxId ) 00180 { 00181 this->MaxId = newSize; 00182 } 00183 return this->Array + id/8; 00184 } 00185 00186 inline void vtkBitArray::SetNumberOfValues(const vtkIdType number) 00187 { 00188 this->Allocate(number); 00189 this->MaxId = number - 1; 00190 } 00191 00192 inline void vtkBitArray::SetValue(const vtkIdType id, const int value) 00193 { 00194 if (value) 00195 { 00196 this->Array[id/8] |= (0x80 >> id%8); 00197 } 00198 else 00199 { 00200 this->Array[id/8] &= (~(0x80 >> id%8)); 00201 } 00202 } 00203 00204 inline void vtkBitArray::InsertValue(const vtkIdType id, const int i) 00205 { 00206 if ( id >= this->Size ) 00207 { 00208 this->ResizeAndExtend(id+1); 00209 } 00210 if (i) 00211 { 00212 this->Array[id/8] |= (0x80 >> id%8); 00213 } 00214 else 00215 { 00216 this->Array[id/8] &= (~(0x80 >> id%8)); 00217 } 00218 if ( id > this->MaxId ) 00219 { 00220 this->MaxId = id; 00221 } 00222 } 00223 00224 inline vtkIdType vtkBitArray::InsertNextValue(const int i) 00225 { 00226 this->InsertValue (++this->MaxId,i); return this->MaxId; 00227 } 00228 00229 inline void vtkBitArray::Squeeze() {this->ResizeAndExtend (this->MaxId+1);} 00230 00231 #endif 00232