00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00052 #ifndef __vtkBitArray_h
00053 #define __vtkBitArray_h
00054
00055 #include "vtkDataArray.h"
00056
00057 class VTK_COMMON_EXPORT vtkBitArray : public vtkDataArray
00058 {
00059 public:
00060 static vtkBitArray *New();
00061 vtkTypeMacro(vtkBitArray,vtkDataArray);
00062 void PrintSelf(ostream& os, vtkIndent indent);
00063
00066 int Allocate(const vtkIdType sz, const vtkIdType ext=1000);
00067
00069 void Initialize();
00070
00071
00072 vtkDataArray *MakeObject();
00073 int GetDataType() {return VTK_BIT;};
00074
00076 void SetNumberOfTuples(const vtkIdType number);
00077
00080 float *GetTuple(const vtkIdType i);
00081
00083
00084 void GetTuple(const vtkIdType i, float * tuple);
00085 void GetTuple(const vtkIdType i, double * tuple);
00087
00089
00090 void SetTuple(const vtkIdType i, const float * tuple);
00091 void SetTuple(const vtkIdType i, const double * tuple);
00093
00095
00097 void InsertTuple(const vtkIdType i, const float * tuple);
00098 void InsertTuple(const vtkIdType i, const double * tuple);
00100
00102
00104 vtkIdType InsertNextTuple(const float * tuple);
00105 vtkIdType InsertNextTuple(const double * tuple);
00107
00112 void SetComponent(const vtkIdType i, const int j, const float c);
00113
00115 void Squeeze();
00116
00118 virtual void Resize(vtkIdType numTuples);
00119
00121 int GetValue(const vtkIdType id);
00122
00128 void SetNumberOfValues(const vtkIdType number);
00129
00132 void SetValue(const vtkIdType id, const int value);
00133
00135
00136 void InsertValue(const vtkIdType id, const int i);
00137 vtkIdType InsertNextValue(const int i);
00139
00143 virtual void InsertComponent(const vtkIdType i, const int j, const float c);
00144
00146 unsigned char *GetPointer(const vtkIdType id) {return this->Array + id/8;}
00147
00149
00152 unsigned char *WritePointer(const vtkIdType id, const vtkIdType number);
00153 void *GetVoidPointer(const vtkIdType id)
00154 {return (void *)this->GetPointer(id);};
00156
00158 void DeepCopy(vtkDataArray *da);
00159
00161
00167 void SetArray(unsigned char* array, vtkIdType size, int save);
00168 void SetVoidArray(void *array, vtkIdType size, int save)
00169 {this->SetArray((unsigned char *)array, size, save);};
00171
00172
00173 protected:
00174 vtkBitArray(vtkIdType numComp=1);
00175 ~vtkBitArray();
00176
00177 unsigned char *Array;
00178 unsigned char *ResizeAndExtend(const vtkIdType sz);
00179
00180
00181 int TupleSize;
00182 float *Tuple;
00183
00184 int SaveUserArray;
00185
00186 private:
00187
00188 void DeepCopy(vtkDataArray &da) {this->vtkDataArray::DeepCopy(&da);}
00189
00190 private:
00191 vtkBitArray(const vtkBitArray&);
00192 void operator=(const vtkBitArray&);
00193 };
00194
00195 inline unsigned char *vtkBitArray::WritePointer(const vtkIdType id,
00196 const vtkIdType number)
00197 {
00198 vtkIdType newSize=id+number;
00199 if ( newSize > this->Size )
00200 {
00201 this->ResizeAndExtend(newSize);
00202 }
00203 if ( (--newSize) > this->MaxId )
00204 {
00205 this->MaxId = newSize;
00206 }
00207 return this->Array + id/8;
00208 }
00209
00210 inline void vtkBitArray::SetNumberOfValues(const vtkIdType number)
00211 {
00212 this->Allocate(number);
00213 this->MaxId = number - 1;
00214 }
00215
00216 inline void vtkBitArray::SetValue(const vtkIdType id, const int value)
00217 {
00218 if (value)
00219 {
00220 this->Array[id/8] |= (0x80 >> id%8);
00221 }
00222 else
00223 {
00224 this->Array[id/8] &= (~(0x80 >> id%8));
00225 }
00226 }
00227
00228 inline void vtkBitArray::InsertValue(const vtkIdType id, const int i)
00229 {
00230 if ( id >= this->Size )
00231 {
00232 this->ResizeAndExtend(id+1);
00233 }
00234 if (i)
00235 {
00236 this->Array[id/8] |= (0x80 >> id%8);
00237 }
00238 else
00239 {
00240 this->Array[id/8] &= (~(0x80 >> id%8));
00241 }
00242 if ( id > this->MaxId )
00243 {
00244 this->MaxId = id;
00245 }
00246 }
00247
00248 inline vtkIdType vtkBitArray::InsertNextValue(const int i)
00249 {
00250 this->InsertValue (++this->MaxId,i); return this->MaxId;
00251 }
00252
00253 inline void vtkBitArray::Squeeze() {this->ResizeAndExtend (this->MaxId+1);}
00254
00255 #endif
00256