dox/Common/vtkBitArray.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00024
#ifndef __vtkBitArray_h
00025
#define __vtkBitArray_h
00026
00027
#include "vtkDataArray.h"
00028
00029 class VTK_COMMON_EXPORT vtkBitArray :
public vtkDataArray
00030 {
00031
public:
00032
static vtkBitArray *
New();
00033 vtkTypeRevisionMacro(vtkBitArray,
vtkDataArray);
00034
void PrintSelf(ostream& os,
vtkIndent indent);
00035
00038
int Allocate(
vtkIdType sz,
vtkIdType ext=1000);
00039
00041
void Initialize();
00042
00043
00044 int GetDataType() {
return VTK_BIT;};
00045 int GetDataTypeSize() {
return 0; }
00046
00048
void SetNumberOfTuples(
vtkIdType number);
00049
00052
double *
GetTuple(
vtkIdType i);
00053
00055
void GetTuple(
vtkIdType i,
double * tuple);
00056
00058
00059
void SetTuple(
vtkIdType i,
const float * tuple);
00060
void SetTuple(
vtkIdType i,
const double * tuple);
00062
00064
00066
void InsertTuple(
vtkIdType i,
const float * tuple);
00067
void InsertTuple(
vtkIdType i,
const double * tuple);
00069
00071
00073
vtkIdType InsertNextTuple(
const float * tuple);
00074
vtkIdType InsertNextTuple(
const double * tuple);
00076
00081
void SetComponent(
vtkIdType i,
int j,
double c);
00082
00084
void Squeeze();
00085
00087
virtual void Resize(
vtkIdType numTuples);
00088
00090
int GetValue(
vtkIdType id);
00091
00097
void SetNumberOfValues(
vtkIdType number);
00098
00101
void SetValue(
vtkIdType id,
int value);
00102
00104
00105
void InsertValue(
vtkIdType id,
int i);
00106
vtkIdType InsertNextValue(
int i);
00108
00112
virtual void InsertComponent(
vtkIdType i,
int j,
double c);
00113
00115 unsigned char *GetPointer(
vtkIdType id) {
return this->Array +
id/8;}
00116
00118
00121
unsigned char *WritePointer(
vtkIdType id,
vtkIdType number);
00122 void *
GetVoidPointer(
vtkIdType id)
00123 {
return (
void *)this->GetPointer(
id);};
00125
00127
void DeepCopy(
vtkDataArray *da);
00128
00130
00136
void SetArray(
unsigned char* array,
vtkIdType size,
int save);
00137 void SetVoidArray(
void *array,
vtkIdType size,
int save)
00138 {this->SetArray((
unsigned char *)array, size, save);};
00140
00141
00142
protected:
00143 vtkBitArray(
vtkIdType numComp=1);
00144 ~vtkBitArray();
00145
00146 unsigned char *Array;
00147
unsigned char *ResizeAndExtend(
vtkIdType sz);
00148
00149
00150 int TupleSize;
00151 double *Tuple;
00152
00153 int SaveUserArray;
00154
00155
private:
00156
00157
void DeepCopy(
vtkDataArray &da) {this->
vtkDataArray::DeepCopy(&da);}
00158
00159
private:
00160 vtkBitArray(
const vtkBitArray&);
00161
void operator=(
const vtkBitArray&);
00162 };
00163
00164 inline unsigned char *
vtkBitArray::WritePointer(
vtkIdType id,
00165
vtkIdType number)
00166 {
00167
vtkIdType newSize=
id+number;
00168
if ( newSize > this->Size )
00169 {
00170 this->
ResizeAndExtend(newSize);
00171 }
00172
if ( (--newSize) > this->MaxId )
00173 {
00174 this->MaxId = newSize;
00175 }
00176
return this->
Array +
id/8;
00177 }
00178
00179 inline void vtkBitArray::SetNumberOfValues(
vtkIdType number)
00180 {
00181 this->
Allocate(number);
00182 this->MaxId = number - 1;
00183 }
00184
00185 inline void vtkBitArray::SetValue(
vtkIdType id,
int value)
00186 {
00187
if (value)
00188 {
00189 this->
Array[
id/8] |= (0x80 >>
id%8);
00190 }
00191
else
00192 {
00193 this->
Array[
id/8] &= (~(0x80 >>
id%8));
00194 }
00195 }
00196
00197 inline void vtkBitArray::InsertValue(
vtkIdType id,
int i)
00198 {
00199
if (
id >= this->Size )
00200 {
00201 this->
ResizeAndExtend(
id+1);
00202 }
00203
if (i)
00204 {
00205 this->
Array[
id/8] |= (0x80 >>
id%8);
00206 }
00207
else
00208 {
00209 this->
Array[
id/8] &= (~(0x80 >>
id%8));
00210 }
00211
if (
id > this->MaxId )
00212 {
00213 this->MaxId =
id;
00214 }
00215 }
00216
00217 inline vtkIdType vtkBitArray::InsertNextValue(
int i)
00218 {
00219 this->
InsertValue (++this->MaxId,i);
return this->MaxId;
00220 }
00221
00222 inline void vtkBitArray::Squeeze() {this->
ResizeAndExtend (this->MaxId+1);}
00223
00224
#endif
00225