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_EXPORT vtkBitArray : public vtkDataArray
00058 {
00059 public:
00060 static vtkBitArray *New();
00061 vtkTypeMacro(vtkBitArray,vtkDataArray);
00062 void PrintSelf(ostream& os, vtkIndent indent);
00063
00065 int Allocate(const int sz, const int ext=1000);
00066
00068 void Initialize();
00069
00070
00071 vtkDataArray *MakeObject();
00072 int GetDataType() {return VTK_BIT;};
00073
00075 void SetNumberOfTuples(const int number);
00076
00079 float *GetTuple(const int i);
00080
00082 void GetTuple(const int i, float * tuple);
00083 void GetTuple(const int i, double * tuple);
00084
00086 void SetTuple(const int i, const float * tuple);
00087 void SetTuple(const int i, const double * tuple);
00088
00091 void InsertTuple(const int i, const float * tuple);
00092 void InsertTuple(const int i, const double * tuple);
00093
00096 int InsertNextTuple(const float * tuple);
00097 int InsertNextTuple(const double * tuple);
00098
00100 void Squeeze();
00101
00103 int GetValue(const int id);
00104
00110 void SetNumberOfValues(const int number);
00111
00114 void SetValue(const int id, const int value);
00115
00117 void InsertValue(const int id, const int i);
00118 int InsertNextValue(const int i);
00119
00121 unsigned char *GetPointer(const int id) {return this->Array + id/8;}
00122
00126 unsigned char *WritePointer(const int id, const int number);
00127 void *GetVoidPointer(const int id) {return (void *)this->GetPointer(id);};
00128
00130 void DeepCopy(vtkDataArray *da);
00131
00138 void SetArray(unsigned char* array, int size, int save);
00139 void SetVoidArray(void *array,int size, int save)
00140 {this->SetArray((unsigned char *)array, size, save);};
00141
00142 #ifndef VTK_REMOVE_LEGACY_CODE
00143
00144 void DeepCopy(vtkBitArray &da)
00145 {VTK_LEGACY_METHOD(DeepCopy,"3.2"); this->DeepCopy(&da);}
00146 #endif
00147
00148 protected:
00149 vtkBitArray(int numComp=1);
00150 ~vtkBitArray();
00151 vtkBitArray(const vtkBitArray&) {};
00152 void operator=(const vtkBitArray&) {};
00153
00154 unsigned char *Array;
00155 unsigned char *Resize(const int sz);
00156
00157 int TupleSize;
00158 float *Tuple;
00159
00160 int SaveUserArray;
00161
00162 private:
00163
00164 void DeepCopy(vtkDataArray &da) {this->vtkDataArray::DeepCopy(&da);}
00165
00166 };
00167
00168 inline unsigned char *vtkBitArray::WritePointer(const int id, const int number)
00169 {
00170 int newSize=id+number;
00171 if ( newSize > this->Size )
00172 {
00173 this->Resize(newSize);
00174 }
00175 if ( (--newSize) > this->MaxId )
00176 {
00177 this->MaxId = newSize;
00178 }
00179 return this->Array + id/8;
00180 }
00181
00182 inline void vtkBitArray::SetNumberOfValues(const int number)
00183 {
00184 this->Allocate(number);
00185 this->MaxId = number - 1;
00186 }
00187
00188 inline void vtkBitArray::SetValue(const int id, const int value)
00189 {
00190 if (value)
00191 {
00192 this->Array[id/8] |= (0x80 >> id%8);
00193 }
00194 else
00195 {
00196 this->Array[id/8] &= (~(0x80 >> id%8));
00197 }
00198 }
00199
00200 inline void vtkBitArray::InsertValue(const int id, const int i)
00201 {
00202 if ( id >= this->Size )
00203 {
00204 this->Resize(id+1);
00205 }
00206 if (i)
00207 {
00208 this->Array[id/8] |= (0x80 >> id%8);
00209 }
00210 else
00211 {
00212 this->Array[id/8] &= (~(0x80 >> id%8));
00213 }
00214 if ( id > this->MaxId )
00215 {
00216 this->MaxId = id;
00217 }
00218 }
00219
00220 inline int vtkBitArray::InsertNextValue(const int i)
00221 {
00222 this->InsertValue (++this->MaxId,i); return this->MaxId;
00223 }
00224
00225 inline void vtkBitArray::Squeeze() {this->Resize (this->MaxId+1);}
00226
00227 #endif
00228