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 "vtkCommonCoreModule.h" // For export macro
31 #include "vtkDataArray.h"
32 
33 class vtkBitArrayLookup;
34 
36 {
37 public:
38  static vtkBitArray *New();
39  vtkTypeMacro(vtkBitArray,vtkDataArray);
40  void PrintSelf(ostream& os, vtkIndent indent);
41 
44  int Allocate(vtkIdType sz, vtkIdType ext=1000);
45 
47  void Initialize();
48 
49  // satisfy vtkDataArray API
50  int GetDataType() {return VTK_BIT;};
51  int GetDataTypeSize() { return 0; }
52 
54  void SetNumberOfTuples(vtkIdType number);
55 
61  virtual void SetTuple(vtkIdType i, vtkIdType j, vtkAbstractArray* source);
62 
67 
69 
72  virtual void InsertTuples(vtkIdList *dstIds, vtkIdList *srcIds,
75 
77 
80  virtual void InsertTuples(vtkIdType dstStart, vtkIdType n, vtkIdType srcStart,
83 
88 
91  double *GetTuple(vtkIdType i);
92 
94  void GetTuple(vtkIdType i, double * tuple);
95 
97 
98  void SetTuple(vtkIdType i, const float * tuple);
99  void SetTuple(vtkIdType i, const double * tuple);
101 
103 
105  void InsertTuple(vtkIdType i, const float * tuple);
106  void InsertTuple(vtkIdType i, const double * tuple);
108 
110 
112  vtkIdType InsertNextTuple(const float * tuple);
113  vtkIdType InsertNextTuple(const double * tuple);
115 
117 
120  virtual void RemoveTuple(vtkIdType id);
121  virtual void RemoveFirstTuple();
122  virtual void RemoveLastTuple();
124 
129  void SetComponent(vtkIdType i, int j, double c);
130 
132  void Squeeze();
133 
135  virtual int Resize(vtkIdType numTuples);
136 
138  int GetValue(vtkIdType id);
139 
145  void SetNumberOfValues(vtkIdType number);
146 
149  void SetValue(vtkIdType id, int value);
150 
152  void InsertValue(vtkIdType id, int i);
153 
156 
157  vtkIdType InsertNextValue(int i);
158 
162  virtual void InsertComponent(vtkIdType i, int j, double c);
163 
165  unsigned char *GetPointer(vtkIdType id) {return this->Array + id/8;}
166 
168 
171  unsigned char *WritePointer(vtkIdType id, vtkIdType number);
173  { return this->WritePointer(id, number); }
175  {
176  return static_cast<void *>(this->GetPointer(id));
177  }
179 
181 
182  void DeepCopy(vtkDataArray *da);
184  { this->Superclass::DeepCopy(aa); }
186 
188 
195 #ifndef __WRAP__
196  void SetArray(unsigned char* array, vtkIdType size, int save);
197 #endif
198  void SetVoidArray(void *array, vtkIdType size, int save)
199  {
200  this->SetArray(static_cast<unsigned char *>(array), size, save);
201  }
203 
206 
208 
210  virtual void LookupValue(vtkVariant value, vtkIdList* ids);
212  void LookupValue(int value, vtkIdList* ids);
214 
221  virtual void DataChanged();
222 
226  virtual void ClearLookup();
227 
228 protected:
229  vtkBitArray();
230  ~vtkBitArray();
231 
232  unsigned char *Array; // pointer to data
233  unsigned char *ResizeAndExtend(vtkIdType sz);
234  // function to resize data
235 
236  int TupleSize; //used for data conversion
237  double *Tuple;
238 
240 
241 private:
242  // hide superclass' DeepCopy() from the user and the compiler
243  void DeepCopy(vtkDataArray &da) {this->vtkDataArray::DeepCopy(&da);}
244 
245 private:
246  vtkBitArray(const vtkBitArray&); // Not implemented.
247  void operator=(const vtkBitArray&); // Not implemented.
248 
249  //BTX
250  vtkBitArrayLookup* Lookup;
251  void UpdateLookup();
252  //ETX
253 };
254 
256 {
257  this->Allocate(number);
258  this->MaxId = number - 1;
259  this->DataChanged();
260 }
261 
263 {
264  if (value)
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  this->DataChanged();
275 }
276 
277 inline void vtkBitArray::InsertValue(vtkIdType id, int i)
278 {
279  if ( id >= this->Size )
280  {
281  if (!this->ResizeAndExtend(id+1))
282  {
283  return;
284  }
285  }
286  if (i)
287  {
288  this->Array[id/8] = static_cast<unsigned char>(
289  this->Array[id/8] | (0x80 >> id%8));
290  }
291  else
292  {
293  this->Array[id/8] = static_cast<unsigned char>(
294  this->Array[id/8] & (~(0x80 >> id%8)));
295  }
296  if ( id > this->MaxId )
297  {
298  this->MaxId = id;
299  }
300  this->DataChanged();
301 }
302 
304 {
305  this->SetValue(id, value.ToInt());
306 }
307 
309 {
310  this->InsertValue (++this->MaxId,i);
311  this->DataChanged();
312  return this->MaxId;
313 }
314 
315 inline void vtkBitArray::Squeeze() {this->ResizeAndExtend (this->MaxId+1);}
316 
317 #endif
318 
virtual void DataChanged()
virtual double * GetTuple(vtkIdType i)=0
void SetVoidArray(void *array, vtkIdType size, int save)
Definition: vtkBitArray.h:198
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
#define VTKCOMMONCORE_EXPORT
virtual void RemoveFirstTuple()=0
virtual void SetNumberOfTuples(vtkIdType number)=0
virtual void InsertComponent(vtkIdType i, int j, double c)
int vtkIdType
Definition: vtkType.h:275
void InsertValue(vtkIdType id, int i)
Definition: vtkBitArray.h:277
virtual void Initialize()=0
A atomic type representing the union of many types.
Definition: vtkVariant.h:78
void SetValue(vtkIdType id, int value)
Definition: vtkBitArray.h:262
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:165
double * Tuple
Definition: vtkBitArray.h:237
unsigned char * Array
Definition: vtkBitArray.h:232
void SetNumberOfValues(vtkIdType number)
Definition: vtkBitArray.h:255
virtual void ClearLookup()=0
a simple class to control print indentation
Definition: vtkIndent.h:38
virtual void RemoveLastTuple()=0
void SetVariantValue(vtkIdType idx, vtkVariant value)
Definition: vtkBitArray.h:303
void DeepCopy(vtkAbstractArray *aa)
Definition: vtkBitArray.h:183
list of point or cell ids
Definition: vtkIdList.h:35
virtual int Resize(vtkIdType numTuples)=0
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:54
virtual vtkArrayIterator * NewIterator()=0
int GetDataTypeSize()
Definition: vtkBitArray.h:51
Abstract superclass to iterate over elements in an vtkAbstractArray.
virtual void SetTuple(vtkIdType i, vtkIdType j, vtkAbstractArray *source)=0
int GetDataType()
Definition: vtkBitArray.h:50
void save(Archiver &ar, const vtkUnicodeString &str, const unsigned int vtkNotUsed(version))
unsigned char * ResizeAndExtend(vtkIdType sz)
boost::graph_traits< vtkGraph * >::vertex_descriptor source(boost::graph_traits< vtkGraph * >::edge_descriptor e, vtkGraph *)
dynamic, self-adjusting array of bits
Definition: vtkBitArray.h:35
void * GetVoidPointer(vtkIdType id)
Definition: vtkBitArray.h:174
int Allocate(vtkIdType sz, vtkIdType ext=1000)
int SaveUserArray
Definition: vtkBitArray.h:239
virtual void SetComponent(vtkIdType i, int j, double c)
vtkIdType InsertNextValue(int i)
Definition: vtkBitArray.h:308
#define VTK_BIT
Definition: vtkType.h:25
void PrintSelf(ostream &os, vtkIndent indent)
void Squeeze()
Definition: vtkBitArray.h:315
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:172
virtual vtkIdType InsertNextTuple(vtkIdType j, vtkAbstractArray *source)=0
virtual void InsertTuples(vtkIdList *dstIds, vtkIdList *srcIds, vtkAbstractArray *source)=0