VTK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
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 
35 class VTKCOMMONCORE_EXPORT vtkBitArray : public vtkDataArray
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 
66  virtual void InsertTuple(vtkIdType i, vtkIdType j, vtkAbstractArray* source);
67 
72 
75  double *GetTuple(vtkIdType i);
76 
78  void GetTuple(vtkIdType i, double * tuple);
79 
81 
82  void SetTuple(vtkIdType i, const float * tuple);
83  void SetTuple(vtkIdType i, const double * tuple);
85 
87 
89  void InsertTuple(vtkIdType i, const float * tuple);
90  void InsertTuple(vtkIdType i, const double * tuple);
92 
94 
96  vtkIdType InsertNextTuple(const float * tuple);
97  vtkIdType InsertNextTuple(const double * tuple);
99 
101 
104  virtual void RemoveTuple(vtkIdType id);
105  virtual void RemoveFirstTuple();
106  virtual void RemoveLastTuple();
108 
113  void SetComponent(vtkIdType i, int j, double c);
114 
116  void Squeeze();
117 
119  virtual int Resize(vtkIdType numTuples);
120 
122  int GetValue(vtkIdType id);
123 
129  void SetNumberOfValues(vtkIdType number);
130 
133  void SetValue(vtkIdType id, int value);
134 
136  void InsertValue(vtkIdType id, int i);
137 
139  void SetVariantValue(vtkIdType idx, vtkVariant value);
140 
141  vtkIdType InsertNextValue(int i);
142 
146  virtual void InsertComponent(vtkIdType i, int j, double c);
147 
149  unsigned char *GetPointer(vtkIdType id) {return this->Array + id/8;}
150 
152 
155  unsigned char *WritePointer(vtkIdType id, vtkIdType number);
157  { return this->WritePointer(id, number); }
159  {
160  return static_cast<void *>(this->GetPointer(id));
161  }
163 
165 
166  void DeepCopy(vtkDataArray *da);
168  { this->Superclass::DeepCopy(aa); }
170 
172 
179  void SetArray(unsigned char* array, vtkIdType size, int save);
180  void SetVoidArray(void *array, vtkIdType size, int save)
181  {
182  this->SetArray(static_cast<unsigned char *>(array), size, save);
183  }
185 
188 
190 
191  virtual vtkIdType LookupValue(vtkVariant value);
192  virtual void LookupValue(vtkVariant value, vtkIdList* ids);
193  vtkIdType LookupValue(int value);
194  void LookupValue(int value, vtkIdList* ids);
196 
203  virtual void DataChanged();
204 
208  virtual void ClearLookup();
209 
210 protected:
211  vtkBitArray(vtkIdType numComp=1);
212  ~vtkBitArray();
213 
214  unsigned char *Array; // pointer to data
215  unsigned char *ResizeAndExtend(vtkIdType sz);
216  // function to resize data
217 
218  int TupleSize; //used for data conversion
219  double *Tuple;
220 
222 
223 private:
224  // hide superclass' DeepCopy() from the user and the compiler
225  void DeepCopy(vtkDataArray &da) {this->vtkDataArray::DeepCopy(&da);}
226 
227 private:
228  vtkBitArray(const vtkBitArray&); // Not implemented.
229  void operator=(const vtkBitArray&); // Not implemented.
230 
231  //BTX
232  vtkBitArrayLookup* Lookup;
233  void UpdateLookup();
234  //ETX
235 };
236 
238 {
239  this->Allocate(number);
240  this->MaxId = number - 1;
241  this->DataChanged();
242 }
243 
244 inline void vtkBitArray::SetValue(vtkIdType id, int value)
245 {
246  if (value)
247  {
248  this->Array[id/8] = static_cast<unsigned char>(
249  this->Array[id/8] | (0x80 >> id%8));
250  }
251  else
252  {
253  this->Array[id/8] = static_cast<unsigned char>(
254  this->Array[id/8] & (~(0x80 >> id%8)));
255  }
256  this->DataChanged();
257 }
258 
259 inline void vtkBitArray::InsertValue(vtkIdType id, int i)
260 {
261  if ( id >= this->Size )
262  {
263  this->ResizeAndExtend(id+1);
264  }
265  if (i)
266  {
267  this->Array[id/8] = static_cast<unsigned char>(
268  this->Array[id/8] | (0x80 >> id%8));
269  }
270  else
271  {
272  this->Array[id/8] = static_cast<unsigned char>(
273  this->Array[id/8] & (~(0x80 >> id%8)));
274  }
275  if ( id > this->MaxId )
276  {
277  this->MaxId = id;
278  }
279  this->DataChanged();
280 }
281 
283 {
284  this->SetValue(id, value.ToInt());
285 }
286 
288 {
289  this->InsertValue (++this->MaxId,i);
290  this->DataChanged();
291  return this->MaxId;
292 }
293 
294 inline void vtkBitArray::Squeeze() {this->ResizeAndExtend (this->MaxId+1);}
295 
296 #endif
297 
virtual void DataChanged()
virtual double * GetTuple(vtkIdType i)=0
void SetVoidArray(void *array, vtkIdType size, int save)
Definition: vtkBitArray.h:180
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:268
void InsertValue(vtkIdType id, int i)
Definition: vtkBitArray.h:259
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:244
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:149
double * Tuple
Definition: vtkBitArray.h:219
unsigned char * Array
Definition: vtkBitArray.h:214
void SetNumberOfValues(vtkIdType number)
Definition: vtkBitArray.h:237
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:282
void DeepCopy(vtkAbstractArray *aa)
Definition: vtkBitArray.h:167
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:53
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
unsigned char * ResizeAndExtend(vtkIdType sz)
dynamic, self-adjusting array of bits
Definition: vtkBitArray.h:35
void * GetVoidPointer(vtkIdType id)
Definition: vtkBitArray.h:158
int Allocate(vtkIdType sz, vtkIdType ext=1000)
int SaveUserArray
Definition: vtkBitArray.h:221
virtual void SetComponent(vtkIdType i, int j, double c)
vtkIdType InsertNextValue(int i)
Definition: vtkBitArray.h:287
#define VTK_BIT
Definition: vtkType.h:25
void PrintSelf(ostream &os, vtkIndent indent)
void Squeeze()
Definition: vtkBitArray.h:294
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:156
virtual vtkIdType InsertNextTuple(vtkIdType j, vtkAbstractArray *source)=0