Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Data Fields | Protected Member Functions | Protected Attributes
UBits Class Reference

#include <UBits.hh>

Public Member Functions

 UBits (unsigned int nbits=0)
 
 UBits (const UBits &)
 
UBitsoperator= (const UBits &rhs)
 
virtual ~UBits ()
 
void ResetAllBits (bool value=false)
 
void ResetBitNumber (unsigned int bitnumber)
 
void SetBitNumber (unsigned int bitnumber, bool value=true)
 
bool TestBitNumber (unsigned int bitnumber) const
 
bool operator[] (unsigned int bitnumber) const
 
void Set (unsigned int nbits, const char *array)
 
void Set (unsigned int nbits, const int *array)
 
void Get (char *array) const
 
void Get (int *array) const
 
void Clear ()
 
void Compact ()
 
unsigned int GetNbits () const
 
unsigned int GetNbytes () const
 
void Print () const
 
void Output (std::ostream &) const
 

Data Fields

unsigned char * fAllBits
 

Protected Member Functions

void ReserveBytes (unsigned int nbytes)
 

Protected Attributes

unsigned int fNBits
 
unsigned int fNBytes
 

Detailed Description

Definition at line 38 of file UBits.hh.

Constructor & Destructor Documentation

UBits::UBits ( unsigned int  nbits = 0)

Definition at line 20 of file UBits.cc.

References fAllBits, fNBits, and fNBytes.

20  : fNBits(nBits)
21 {
22  // UBits constructor. All bits set to 0
23 
24  if (fNBits <= 0) fNBits = 0;
25  fNBytes = fNBits ? ((fNBits - 1) / 8) + 1 : 1;
26  fAllBits = new unsigned char[fNBytes];
27  // this is redundant only with libNew
28  std::memset(fAllBits, 0, fNBytes);
29 }
unsigned int fNBits
Definition: UBits.hh:46
unsigned char * fAllBits
Definition: UBits.hh:42
unsigned int fNBytes
Definition: UBits.hh:47
UBits::UBits ( const UBits original)

Definition at line 32 of file UBits.cc.

References fAllBits, and fNBytes.

32  : fNBits(original.fNBits),
33  fNBytes(original.fNBytes)
34 {
35  // UBits copy constructor
36 
37  fAllBits = new unsigned char[fNBytes];
38  std::memcpy(fAllBits, original.fAllBits, fNBytes);
39 
40 }
unsigned int fNBits
Definition: UBits.hh:46
unsigned char * fAllBits
Definition: UBits.hh:42
unsigned int fNBytes
Definition: UBits.hh:47
UBits::~UBits ( )
virtual

Definition at line 64 of file UBits.cc.

References fAllBits.

65 {
66  // UBits destructor
67 
68  delete [] fAllBits;
69 }
unsigned char * fAllBits
Definition: UBits.hh:42

Member Function Documentation

void UBits::Clear ( )

Definition at line 72 of file UBits.cc.

References fAllBits, fNBits, and fNBytes.

Referenced by UVoxelizer::Voxelize().

73 {
74  // Clear the value.
75 
76  delete [] fAllBits;
77  fAllBits = 0;
78  fNBits = 0;
79  fNBytes = 0;
80 }
unsigned int fNBits
Definition: UBits.hh:46
unsigned char * fAllBits
Definition: UBits.hh:42
unsigned int fNBytes
Definition: UBits.hh:47
void UBits::Compact ( )

Definition at line 83 of file UBits.cc.

References fAllBits, fNBits, and fNBytes.

84 {
85  // Reduce the storage used by the object to a minimun
86 
87  if (!fNBits || !fAllBits) return;
88  unsigned int needed;
89  for (needed = fNBytes - 1;
90  needed > 0 && fAllBits[needed] == 0;)
91  {
92  needed--;
93  };
94  needed++;
95 
96  if (needed != fNBytes)
97  {
98  unsigned char* old_location = fAllBits;
99  fAllBits = new unsigned char[needed];
100 
101  std::memcpy(fAllBits, old_location, needed);
102  delete [] old_location;
103 
104  fNBytes = needed;
105  fNBits = 8 * fNBytes;
106  }
107 }
unsigned int fNBits
Definition: UBits.hh:46
unsigned char * fAllBits
Definition: UBits.hh:42
unsigned int fNBytes
Definition: UBits.hh:47
void UBits::Get ( char *  array) const

Definition at line 419 of file UBits.cc.

References fAllBits, and fNBits.

Referenced by Get().

420 {
421  // Copy all the byes.
422  std::memcpy(array, fAllBits, (fNBits + 7) >> 3);
423 }
unsigned int fNBits
Definition: UBits.hh:46
unsigned char * fAllBits
Definition: UBits.hh:42
void UBits::Get ( int array) const

Definition at line 436 of file UBits.cc.

References Get().

437 {
438  // Get all the bytes.
439 
440  Get((char*)array);
441 }
void Get(char *array) const
Definition: UBits.cc:419
unsigned int UBits::GetNbits ( ) const
inline

Definition at line 120 of file UBits.hh.

References fNBits.

121  {
122  return fNBits;
123  }
unsigned int fNBits
Definition: UBits.hh:46
unsigned int UBits::GetNbytes ( ) const
inline

Definition at line 124 of file UBits.hh.

References fNBytes.

Referenced by UVoxelizer::AllocatedMemory().

125  {
126  return fNBytes;
127  }
unsigned int fNBytes
Definition: UBits.hh:47
UBits & UBits::operator= ( const UBits rhs)

Definition at line 44 of file UBits.cc.

References fAllBits, fNBits, and fNBytes.

45 {
46  // UBits assignment operator
47  // Check assignment to self
48  if (this == &rhs) { return *this; }
49 
50  // TObject::operator=(rhs);
51  fNBits = rhs.fNBits;
52  fNBytes = rhs.fNBytes;
53  delete [] fAllBits;
54  if (fNBytes != 0) {
55  fAllBits = new unsigned char[fNBytes];
56  std::memcpy(fAllBits,rhs.fAllBits,fNBytes);
57  } else {
58  fAllBits = 0;
59  }
60  return *this;
61 }
unsigned int fNBits
Definition: UBits.hh:46
unsigned char * fAllBits
Definition: UBits.hh:42
unsigned int fNBytes
Definition: UBits.hh:47
bool UBits::operator[] ( unsigned int  bitnumber) const
inline

Definition at line 217 of file UBits.hh.

References TestBitNumber().

218 {
219  return TestBitNumber(bitnumber);
220 }
bool TestBitNumber(unsigned int bitnumber) const
Definition: UBits.hh:199
void UBits::Output ( std::ostream &  os) const

Definition at line 354 of file UBits.cc.

References fAllBits, and fNBytes.

355 {
356  // Print the value to the std::ostream
357  for (unsigned int i = 0; i < fNBytes; ++i)
358  {
359  unsigned char val = fAllBits[fNBytes - 1 - i];
360  for (unsigned int j = 0; j < 8; ++j)
361  {
362  os << (bool)(val & 0x80);
363  val <<= 1;
364  }
365  }
366 }
unsigned char * fAllBits
Definition: UBits.hh:42
unsigned int fNBytes
Definition: UBits.hh:47
void UBits::Print ( void  ) const

Definition at line 369 of file UBits.cc.

References fAllBits, and fNBytes.

370 {
371  // Print the list of active bits
372  int count = 0;
373  for (unsigned int i = 0; i < fNBytes; ++i)
374  {
375  unsigned char val = fAllBits[i];
376  for (unsigned int j = 0; j < 8; ++j)
377  {
378  if (val & 1) printf(" bit:%4d = 1\n", count);
379  count++;
380  val = val >> 1;
381  }
382  }
383 }
unsigned char * fAllBits
Definition: UBits.hh:42
unsigned int fNBytes
Definition: UBits.hh:47
void UBits::ReserveBytes ( unsigned int  nbytes)
protected

Definition at line 392 of file UBits.cc.

References fAllBits, and fNBytes.

Referenced by Set().

393 {
394  // Reverse each bytes.
395 
396  if (nbytes > fNBytes)
397  {
398  // do it in this order to remain exception-safe.
399  unsigned char* newBits = new unsigned char[nbytes];
400  delete[] fAllBits;
401  fNBytes = nbytes;
402  fAllBits = newBits;
403  }
404 }
unsigned char * fAllBits
Definition: UBits.hh:42
unsigned int fNBytes
Definition: UBits.hh:47
void UBits::ResetAllBits ( bool  value = false)

Definition at line 386 of file UBits.cc.

References fAllBits, and fNBytes.

387 {
388  if (fAllBits) std::memset(fAllBits, value ? 0xFF : 0, fNBytes);
389 }
unsigned char * fAllBits
Definition: UBits.hh:42
unsigned int fNBytes
Definition: UBits.hh:47
const XML_Char int const XML_Char * value
void UBits::ResetBitNumber ( unsigned int  bitnumber)
inline

Definition at line 212 of file UBits.hh.

References SetBitNumber().

213 {
214  SetBitNumber(bitnumber, false);
215 }
void SetBitNumber(unsigned int bitnumber, bool value=true)
Definition: UBits.hh:172
void UBits::Set ( unsigned int  nbits,
const char *  array 
)

Definition at line 407 of file UBits.cc.

References fAllBits, fNBits, and ReserveBytes().

Referenced by UVoxelizer::DisplayListNodes(), and Set().

408 {
409  // Set all the bytes
410  unsigned int nbytes = (nBits + 7) >> 3;
411 
412  ReserveBytes(nbytes);
413 
414  fNBits = nBits;
415  std::memcpy(fAllBits, array, nbytes);
416 }
unsigned int fNBits
Definition: UBits.hh:46
unsigned char * fAllBits
Definition: UBits.hh:42
void ReserveBytes(unsigned int nbytes)
Definition: UBits.cc:392
void UBits::Set ( unsigned int  nbits,
const int array 
)

Definition at line 429 of file UBits.cc.

References Set().

430 {
431  // Set all the bytes.
432 
433  Set(nBits, (const char*)array);
434 }
void Set(unsigned int nbits, const char *array)
Definition: UBits.cc:407
void UBits::SetBitNumber ( unsigned int  bitnumber,
bool  value = true 
)
inline

Definition at line 172 of file UBits.hh.

References fAllBits, fNBits, and fNBytes.

Referenced by UVCSGfaceted::DistanceToIn(), UVCSGfaceted::DistanceToOut(), UVCSGfaceted::Inside(), UVCSGfaceted::Normal(), ResetBitNumber(), and UVCSGfaceted::SafetyFromInsideSection().

173 {
174  // Set bit number 'bitnumber' to be value
175  if (bitnumber >= fNBits)
176  {
177  unsigned int new_size = (bitnumber / 8) + 1;
178  if (new_size > fNBytes)
179  {
180  if (new_size < 100 * 1024 * 1024)
181  new_size *= 2;
182  unsigned char* old_location = fAllBits;
183  fAllBits = new unsigned char[new_size];
184  std::memcpy(fAllBits, old_location, fNBytes);
185  std::memset(fAllBits + fNBytes , 0, new_size - fNBytes);
186  fNBytes = new_size;
187  delete [] old_location;
188  }
189  fNBits = bitnumber + 1;
190  }
191  unsigned int loc = bitnumber / 8;
192  unsigned char bit = bitnumber % 8;
193  if (value)
194  fAllBits[loc] |= (1 << bit);
195  else
196  fAllBits[loc] &= (0xFF ^ (1 << bit));
197 }
unsigned int fNBits
Definition: UBits.hh:46
unsigned char * fAllBits
Definition: UBits.hh:42
unsigned int fNBytes
Definition: UBits.hh:47
const XML_Char int const XML_Char * value
bool UBits::TestBitNumber ( unsigned int  bitnumber) const
inline

Definition at line 199 of file UBits.hh.

References fAllBits, and fNBits.

Referenced by operator[]().

200 {
201  // Return the current value of the bit
202 
203  if (bitnumber >= fNBits) return false;
204  unsigned int loc = bitnumber / 8;
205  unsigned char value = fAllBits[loc];
206  unsigned char bit = bitnumber % 8;
207  bool result = (value & (1 << bit)) != 0;
208  return result;
209  // short: return 0 != (fAllBits[bitnumber/8] & (1<< (bitnumber%8)));
210 }
unsigned int fNBits
Definition: UBits.hh:46
unsigned char * fAllBits
Definition: UBits.hh:42
const XML_Char int const XML_Char * value

Field Documentation

unsigned char* UBits::fAllBits
unsigned int UBits::fNBits
protected

Definition at line 46 of file UBits.hh.

Referenced by Clear(), Compact(), Get(), GetNbits(), operator=(), Set(), SetBitNumber(), TestBitNumber(), and UBits().

unsigned int UBits::fNBytes
protected

The documentation for this class was generated from the following files: