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 
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 
80 
83  double *GetTuple(vtkIdType i);
84 
86  void GetTuple(vtkIdType i, double * tuple);
87 
89 
90  void SetTuple(vtkIdType i, const float * tuple);
91  void SetTuple(vtkIdType i, const double * tuple);
93 
95 
97  void InsertTuple(vtkIdType i, const float * tuple);
98  void InsertTuple(vtkIdType i, const double * tuple);
100 
102 
104  vtkIdType InsertNextTuple(const float * tuple);
105  vtkIdType InsertNextTuple(const double * tuple);
107 
109 
112  virtual void RemoveTuple(vtkIdType id);
113  virtual void RemoveFirstTuple();
114  virtual void RemoveLastTuple();
116 
121  void SetComponent(vtkIdType i, int j, double c);
122 
124  void Squeeze();
125 
127  virtual int Resize(vtkIdType numTuples);
128 
130  int GetValue(vtkIdType id);
131 
137  void SetNumberOfValues(vtkIdType number);
138 
141  void SetValue(vtkIdType id, int value);
142 
144  void InsertValue(vtkIdType id, int i);
145 
148 
149  vtkIdType InsertNextValue(int i);
150 
154  virtual void InsertComponent(vtkIdType i, int j, double c);
155 
157  unsigned char *GetPointer(vtkIdType id) {return this->Array + id/8;}
158 
160 
163  unsigned char *WritePointer(vtkIdType id, vtkIdType number);
165  { return this->WritePointer(id, number); }
167  {
168  return static_cast<void *>(this->GetPointer(id));
169  }
171 
173 
174  void DeepCopy(vtkDataArray *da);
176  { this->Superclass::DeepCopy(aa); }
178 
180 
187 #ifndef __WRAP__
188  void SetArray(unsigned char* array, vtkIdType size, int save);
189 #endif
190  void SetVoidArray(void *array, vtkIdType size, int save)
191  {
192  this->SetArray(static_cast<unsigned char *>(array), size, save);
193  }
195 
198 
200 
202  virtual void LookupValue(vtkVariant value, vtkIdList* ids);
204  void LookupValue(int value, vtkIdList* ids);
206 
213  virtual void DataChanged();
214 
218  virtual void ClearLookup();
219 
220 protected:
221  vtkBitArray();
222  ~vtkBitArray();
223 
224  unsigned char *Array; // pointer to data
225  unsigned char *ResizeAndExtend(vtkIdType sz);
226  // function to resize data
227 
228  int TupleSize; //used for data conversion
229  double *Tuple;
230 
232 
233 private:
234  // hide superclass' DeepCopy() from the user and the compiler
235  void DeepCopy(vtkDataArray &da) {this->vtkDataArray::DeepCopy(&da);}
236 
237 private:
238  vtkBitArray(const vtkBitArray&); // Not implemented.
239  void operator=(const vtkBitArray&); // Not implemented.
240 
241  //BTX
242  vtkBitArrayLookup* Lookup;
243  void UpdateLookup();
244  //ETX
245 };
246 
248 {
249  this->Allocate(number);
250  this->MaxId = number - 1;
251  this->DataChanged();
252 }
253 
255 {
256  if (value)
257  {
258  this->Array[id/8] = static_cast<unsigned char>(
259  this->Array[id/8] | (0x80 >> id%8));
260  }
261  else
262  {
263  this->Array[id/8] = static_cast<unsigned char>(
264  this->Array[id/8] & (~(0x80 >> id%8)));
265  }
266  this->DataChanged();
267 }
268 
269 inline void vtkBitArray::InsertValue(vtkIdType id, int i)
270 {
271  if ( id >= this->Size )
272  {
273  this->ResizeAndExtend(id+1);
274  }
275  if (i)
276  {
277  this->Array[id/8] = static_cast<unsigned char>(
278  this->Array[id/8] | (0x80 >> id%8));
279  }
280  else
281  {
282  this->Array[id/8] = static_cast<unsigned char>(
283  this->Array[id/8] & (~(0x80 >> id%8)));
284  }
285  if ( id > this->MaxId )
286  {
287  this->MaxId = id;
288  }
289  this->DataChanged();
290 }
291 
293 {
294  this->SetValue(id, value.ToInt());
295 }
296 
298 {
299  this->InsertValue (++this->MaxId,i);
300  this->DataChanged();
301  return this->MaxId;
302 }
303 
304 inline void vtkBitArray::Squeeze() {this->ResizeAndExtend (this->MaxId+1);}
305 
306 #endif
307 
virtual void DataChanged()
GLsizeiptr size
Definition: vtkgl.h:11843
virtual double * GetTuple(vtkIdType i)=0
void SetVoidArray(void *array, vtkIdType size, int save)
Definition: vtkBitArray.h:190
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
GLsizei const GLfloat * value
Definition: vtkgl.h:12021
virtual void InsertComponent(vtkIdType i, int j, double c)
int vtkIdType
Definition: vtkType.h:268
GLuint * ids
Definition: vtkgl.h:11831
void InsertValue(vtkIdType id, int i)
Definition: vtkBitArray.h:269
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:254
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:157
double * Tuple
Definition: vtkBitArray.h:229
unsigned char * Array
Definition: vtkBitArray.h:224
void SetNumberOfValues(vtkIdType number)
Definition: vtkBitArray.h:247
virtual void ClearLookup()=0
a simple class to control print indentation
Definition: vtkIndent.h:38
virtual void RemoveLastTuple()=0
const GLubyte * c
Definition: vtkgl.h:15720
void SetVariantValue(vtkIdType idx, vtkVariant value)
Definition: vtkBitArray.h:292
void DeepCopy(vtkAbstractArray *aa)
Definition: vtkBitArray.h:175
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
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:166
int Allocate(vtkIdType sz, vtkIdType ext=1000)
int SaveUserArray
Definition: vtkBitArray.h:231
virtual void SetComponent(vtkIdType i, int j, double c)
vtkIdType InsertNextValue(int i)
Definition: vtkBitArray.h:297
#define VTK_BIT
Definition: vtkType.h:25
void PrintSelf(ostream &os, vtkIndent indent)
void Squeeze()
Definition: vtkBitArray.h:304
virtual void RemoveTuple(vtkIdType id)=0
virtual void Squeeze()=0
virtual void SetVariantValue(vtkIdType idx, vtkVariant value)=0
static vtkObject * New()
GLuint id
Definition: vtkgl.h:11834
void * WriteVoidPointer(vtkIdType id, vtkIdType number)
Definition: vtkBitArray.h:164
virtual vtkIdType InsertNextTuple(vtkIdType j, vtkAbstractArray *source)=0
virtual void InsertTuples(vtkIdList *dstIds, vtkIdList *srcIds, vtkAbstractArray *source)=0