VTK
vtkBitArray.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkBitArray.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
27 #ifndef __vtkBitArray_h
28 #define __vtkBitArray_h
29 
30 #include "vtkDataArray.h"
31 
32 class vtkBitArrayLookup;
33 
35 {
36 public:
37  static vtkBitArray *New();
38  vtkTypeMacro(vtkBitArray,vtkDataArray);
39  void PrintSelf(ostream& os, vtkIndent indent);
40 
43  int Allocate(vtkIdType sz, vtkIdType ext=1000);
44 
46  void Initialize();
47 
48  // satisfy vtkDataArray API
49  int GetDataType() {return VTK_BIT;};
50  int GetDataTypeSize() { return 0; }
51 
53  void SetNumberOfTuples(vtkIdType number);
54 
60  virtual void SetTuple(vtkIdType i, vtkIdType j, vtkAbstractArray* source);
61 
65  virtual void InsertTuple(vtkIdType i, vtkIdType j, vtkAbstractArray* source);
66 
71 
74  double *GetTuple(vtkIdType i);
75 
77  void GetTuple(vtkIdType i, double * tuple);
78 
80 
81  void SetTuple(vtkIdType i, const float * tuple);
82  void SetTuple(vtkIdType i, const double * tuple);
84 
86 
88  void InsertTuple(vtkIdType i, const float * tuple);
89  void InsertTuple(vtkIdType i, const double * tuple);
91 
93 
95  vtkIdType InsertNextTuple(const float * tuple);
96  vtkIdType InsertNextTuple(const double * tuple);
98 
100 
103  virtual void RemoveTuple(vtkIdType id);
104  virtual void RemoveFirstTuple();
105  virtual void RemoveLastTuple();
107 
112  void SetComponent(vtkIdType i, int j, double c);
113 
115  void Squeeze();
116 
118  virtual int Resize(vtkIdType numTuples);
119 
121  int GetValue(vtkIdType id);
122 
128  void SetNumberOfValues(vtkIdType number);
129 
132  void SetValue(vtkIdType id, int value);
133 
135  void InsertValue(vtkIdType id, int i);
136 
138  void SetVariantValue(vtkIdType idx, vtkVariant value);
139 
140  vtkIdType InsertNextValue(int i);
141 
145  virtual void InsertComponent(vtkIdType i, int j, double c);
146 
148  unsigned char *GetPointer(vtkIdType id) {return this->Array + id/8;}
149 
151 
154  unsigned char *WritePointer(vtkIdType id, vtkIdType number);
156  { return this->WritePointer(id, number); }
158  {
159  return static_cast<void *>(this->GetPointer(id));
160  }
162 
164 
165  void DeepCopy(vtkDataArray *da);
167  { this->Superclass::DeepCopy(aa); }
169 
171 
178  void SetArray(unsigned char* array, vtkIdType size, int save);
179  void SetVoidArray(void *array, vtkIdType size, int save)
180  {
181  this->SetArray(static_cast<unsigned char *>(array), size, save);
182  }
184 
187 
189 
190  virtual vtkIdType LookupValue(vtkVariant value);
191  virtual void LookupValue(vtkVariant value, vtkIdList* ids);
192  vtkIdType LookupValue(int value);
193  void LookupValue(int value, vtkIdList* ids);
195 
202  virtual void DataChanged();
203 
207  virtual void ClearLookup();
208 
209 protected:
210  vtkBitArray(vtkIdType numComp=1);
211  ~vtkBitArray();
212 
213  unsigned char *Array; // pointer to data
214  unsigned char *ResizeAndExtend(vtkIdType sz);
215  // function to resize data
216 
217  int TupleSize; //used for data conversion
218  double *Tuple;
219 
221 
222 private:
223  // hide superclass' DeepCopy() from the user and the compiler
224  void DeepCopy(vtkDataArray &da) {this->vtkDataArray::DeepCopy(&da);}
225 
226 private:
227  vtkBitArray(const vtkBitArray&); // Not implemented.
228  void operator=(const vtkBitArray&); // Not implemented.
229 
230  //BTX
231  vtkBitArrayLookup* Lookup;
232  void UpdateLookup();
233  //ETX
234 };
235 
237 {
238  this->Allocate(number);
239  this->MaxId = number - 1;
240  this->DataChanged();
241 }
242 
243 inline void vtkBitArray::SetValue(vtkIdType id, int value)
244 {
245  if (value)
246  {
247  this->Array[id/8] = static_cast<unsigned char>(
248  this->Array[id/8] | (0x80 >> id%8));
249  }
250  else
251  {
252  this->Array[id/8] = static_cast<unsigned char>(
253  this->Array[id/8] & (~(0x80 >> id%8)));
254  }
255  this->DataChanged();
256 }
257 
258 inline void vtkBitArray::InsertValue(vtkIdType id, int i)
259 {
260  if ( id >= this->Size )
261  {
262  this->ResizeAndExtend(id+1);
263  }
264  if (i)
265  {
266  this->Array[id/8] = static_cast<unsigned char>(
267  this->Array[id/8] | (0x80 >> id%8));
268  }
269  else
270  {
271  this->Array[id/8] = static_cast<unsigned char>(
272  this->Array[id/8] & (~(0x80 >> id%8)));
273  }
274  if ( id > this->MaxId )
275  {
276  this->MaxId = id;
277  }
278  this->DataChanged();
279 }
280 
282 {
283  this->SetValue(id, value.ToInt());
284 }
285 
287 {
288  this->InsertValue (++this->MaxId,i);
289  this->DataChanged();
290  return this->MaxId;
291 }
292 
293 inline void vtkBitArray::Squeeze() {this->ResizeAndExtend (this->MaxId+1);}
294 
295 #endif
296 
virtual void DataChanged()
virtual double * GetTuple(vtkIdType i)=0
void SetVoidArray(void *array, vtkIdType size, int save)
Definition: vtkBitArray.h:179
virtual void DeepCopy(vtkAbstractArray *aa)
virtual void DataChanged()=0
virtual void DeepCopy(vtkAbstractArray *da)
Abstract superclass for all arrays.
virtual vtkIdType LookupValue(vtkVariant value)=0
virtual void RemoveFirstTuple()=0
virtual void SetNumberOfTuples(vtkIdType number)=0
virtual void InsertComponent(vtkIdType i, int j, double c)
int vtkIdType
Definition: vtkType.h:255
void InsertValue(vtkIdType id, int i)
Definition: vtkBitArray.h:258
virtual void Initialize()=0
A atomic type representing the union of many types.
Definition: vtkVariant.h:72
void SetValue(vtkIdType id, int value)
Definition: vtkBitArray.h:243
int ToInt(bool *valid) const
virtual int Allocate(vtkIdType sz, vtkIdType ext=1000)=0
virtual void InsertTuple(vtkIdType i, vtkIdType j, vtkAbstractArray *source)=0
unsigned char * GetPointer(vtkIdType id)
Definition: vtkBitArray.h:148
double * Tuple
Definition: vtkBitArray.h:218
unsigned char * Array
Definition: vtkBitArray.h:213
void SetNumberOfValues(vtkIdType number)
Definition: vtkBitArray.h:236
virtual void ClearLookup()=0
a simple class to control print indentation
Definition: vtkIndent.h:37
virtual void RemoveLastTuple()=0
void SetVariantValue(vtkIdType idx, vtkVariant value)
Definition: vtkBitArray.h:281
void DeepCopy(vtkAbstractArray *aa)
Definition: vtkBitArray.h:166
list of point or cell ids
Definition: vtkIdList.h:34
virtual int Resize(vtkIdType numTuples)=0
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:53
virtual vtkArrayIterator * NewIterator()=0
int GetDataTypeSize()
Definition: vtkBitArray.h:50
#define VTK_COMMON_EXPORT
Abstract superclass to iterate over elements in an vtkAbstractArray.
virtual void SetTuple(vtkIdType i, vtkIdType j, vtkAbstractArray *source)=0
int GetDataType()
Definition: vtkBitArray.h:49
unsigned char * ResizeAndExtend(vtkIdType sz)
dynamic, self-adjusting array of bits
Definition: vtkBitArray.h:34
void * GetVoidPointer(vtkIdType id)
Definition: vtkBitArray.h:157
void save(Archiver &ar, const vtkVariant &variant, const unsigned int vtkNotUsed(version))
int Allocate(vtkIdType sz, vtkIdType ext=1000)
int SaveUserArray
Definition: vtkBitArray.h:220
virtual void SetComponent(vtkIdType i, int j, double c)
vtkIdType InsertNextValue(int i)
Definition: vtkBitArray.h:286
#define VTK_BIT
Definition: vtkType.h:25
void PrintSelf(ostream &os, vtkIndent indent)
void Squeeze()
Definition: vtkBitArray.h:293
virtual void RemoveTuple(vtkIdType id)=0
virtual void Squeeze()=0
virtual void SetVariantValue(vtkIdType idx, vtkVariant value)=0
static vtkObject * New()
void * WriteVoidPointer(vtkIdType id, vtkIdType number)
Definition: vtkBitArray.h:155
virtual vtkIdType InsertNextTuple(vtkIdType j, vtkAbstractArray *source)=0