Common/vtkBitArray.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00024 #ifndef __vtkBitArray_h
00025 #define __vtkBitArray_h
00026
00027 #include "vtkDataArray.h"
00028
00029 class VTK_COMMON_EXPORT vtkBitArray : public vtkDataArray
00030 {
00031 public:
00032 static vtkBitArray *New();
00033 vtkTypeRevisionMacro(vtkBitArray,vtkDataArray);
00034 void PrintSelf(ostream& os, vtkIndent indent);
00035
00038 int Allocate(vtkIdType sz, vtkIdType ext=1000);
00039
00041 void Initialize();
00042
00043
00044 int GetDataType() {return VTK_BIT;};
00045 int GetDataTypeSize() { return 0; }
00046
00048 void SetNumberOfTuples(vtkIdType number);
00049
00052 double *GetTuple(vtkIdType i);
00053
00055 void GetTuple(vtkIdType i, double * tuple);
00056
00058
00059 void SetTuple(vtkIdType i, const float * tuple);
00060 void SetTuple(vtkIdType i, const double * tuple);
00062
00064
00066 void InsertTuple(vtkIdType i, const float * tuple);
00067 void InsertTuple(vtkIdType i, const double * tuple);
00069
00071
00073 vtkIdType InsertNextTuple(const float * tuple);
00074 vtkIdType InsertNextTuple(const double * tuple);
00076
00081 void SetComponent(vtkIdType i, int j, double c);
00082
00084 void Squeeze();
00085
00087 virtual void Resize(vtkIdType numTuples);
00088
00090 int GetValue(vtkIdType id);
00091
00097 void SetNumberOfValues(vtkIdType number);
00098
00101 void SetValue(vtkIdType id, int value);
00102
00104
00105 void InsertValue(vtkIdType id, int i);
00106 vtkIdType InsertNextValue(int i);
00108
00112 virtual void InsertComponent(vtkIdType i, int j, double c);
00113
00115 unsigned char *GetPointer(vtkIdType id) {return this->Array + id/8;}
00116
00118
00121 unsigned char *WritePointer(vtkIdType id, vtkIdType number);
00122 void *GetVoidPointer(vtkIdType id)
00123 {return (void *)this->GetPointer(id);};
00125
00127 void DeepCopy(vtkDataArray *da);
00128
00130
00136 void SetArray(unsigned char* array, vtkIdType size, int save);
00137 void SetVoidArray(void *array, vtkIdType size, int save)
00138 {this->SetArray((unsigned char *)array, size, save);};
00140
00141
00142 protected:
00143 vtkBitArray(vtkIdType numComp=1);
00144 ~vtkBitArray();
00145
00146 unsigned char *Array;
00147 unsigned char *ResizeAndExtend(vtkIdType sz);
00148
00149
00150 int TupleSize;
00151 double *Tuple;
00152
00153 int SaveUserArray;
00154
00155 private:
00156
00157 void DeepCopy(vtkDataArray &da) {this->vtkDataArray::DeepCopy(&da);}
00158
00159 private:
00160 vtkBitArray(const vtkBitArray&);
00161 void operator=(const vtkBitArray&);
00162 };
00163
00164 inline unsigned char *vtkBitArray::WritePointer(vtkIdType id,
00165 vtkIdType number)
00166 {
00167 vtkIdType newSize=id+number;
00168 if ( newSize > this->Size )
00169 {
00170 this->ResizeAndExtend(newSize);
00171 }
00172 if ( (--newSize) > this->MaxId )
00173 {
00174 this->MaxId = newSize;
00175 }
00176 return this->Array + id/8;
00177 }
00178
00179 inline void vtkBitArray::SetNumberOfValues(vtkIdType number)
00180 {
00181 this->Allocate(number);
00182 this->MaxId = number - 1;
00183 }
00184
00185 inline void vtkBitArray::SetValue(vtkIdType id, int value)
00186 {
00187 if (value)
00188 {
00189 this->Array[id/8] |= (0x80 >> id%8);
00190 }
00191 else
00192 {
00193 this->Array[id/8] &= (~(0x80 >> id%8));
00194 }
00195 }
00196
00197 inline void vtkBitArray::InsertValue(vtkIdType id, int i)
00198 {
00199 if ( id >= this->Size )
00200 {
00201 this->ResizeAndExtend(id+1);
00202 }
00203 if (i)
00204 {
00205 this->Array[id/8] |= (0x80 >> id%8);
00206 }
00207 else
00208 {
00209 this->Array[id/8] &= (~(0x80 >> id%8));
00210 }
00211 if ( id > this->MaxId )
00212 {
00213 this->MaxId = id;
00214 }
00215 }
00216
00217 inline vtkIdType vtkBitArray::InsertNextValue(int i)
00218 {
00219 this->InsertValue (++this->MaxId,i); return this->MaxId;
00220 }
00221
00222 inline void vtkBitArray::Squeeze() {this->ResizeAndExtend (this->MaxId+1);}
00223
00224 #endif
00225