35 if (nbits <= 0) nbits = 8;
100 needed > 0 &&
fAllBits[needed]==0; ) { needed--; };
105 fAllBits =
new UChar_t[needed];
107 memcpy(fAllBits,old_location,needed);
108 delete [] old_location;
120 static const Int_t nbits[256] = {
121 0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,
122 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,
123 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,
124 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
125 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,
126 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
127 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
128 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
129 1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,
130 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
131 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
132 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
133 2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,
134 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
135 3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,
136 4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8};
145 if (startBit >=
fNbits)
return count;
146 UInt_t startByte = startBit/8;
149 for (i=ibit;i<8;i++) {
150 if (
fAllBits[startByte] & (1<<ibit)) count++;
154 for(i=startByte; i<
fNbytes; i++) {
168 for(
UInt_t i=0; i<min; ++i) {
184 for(
UInt_t i=0; i<min; ++i) {
197 for(
UInt_t i=0; i<min; ++i) {
219 if (shift==0)
return;
220 const UInt_t wordshift = shift / 8;
221 const UInt_t offset = shift % 8;
228 const UInt_t sub_offset = 8 - offset;
231 (
fAllBits[
n - wordshift - 1] >> sub_offset);
244 if (shift==0)
return;
245 const UInt_t wordshift = shift / 8;
246 const UInt_t offset = shift % 8;
247 if (
fNbytes < (wordshift + 1)) {
257 const UInt_t sub_offset = 8 - offset;
260 (
fAllBits[
n + wordshift + 1] << sub_offset);
277 static const Int_t fbits[256] = {
278 0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,
279 0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,
280 0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,
281 0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,
282 0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,
283 0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,
284 0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,
285 0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,
286 0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,
287 0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,
288 0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,
289 0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,
290 0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,
291 0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,
292 0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,
293 0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,8};
303 UInt_t startByte = startBit/8;
306 for (i=ibit;i<8;i++) {
307 if ((
fAllBits[startByte] & (1<<i)) == 0)
return 8*startByte+i;
311 for(i=startByte; i<
fNbytes; i++) {
322 static const Int_t fbits[256] = {
323 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
324 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
325 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
326 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
327 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
328 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
329 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
330 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
331 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
332 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
333 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
334 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
335 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
336 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
337 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
338 3,3,3,3,3,3,3,3,2,2,2,2,1,1,0,8};
342 UInt_t startByte = startBit/8;
345 for (i=ibit+1;i>0;i--) {
346 if ((
fAllBits[startByte] & (1<<(i-1))) == 0)
return 8*startByte+i-1;
350 for(i=startByte+1; i>0; i--) {
361 static const Int_t fbits[256] = {
362 8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
363 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
364 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
365 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
366 6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
367 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
368 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
369 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
370 7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
371 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
372 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
373 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
374 6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
375 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
376 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,
377 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0};
387 UInt_t startByte = startBit/8;
390 for (i=ibit;i<8;i++) {
391 if ((
fAllBits[startByte] & (1<<i)) != 0)
return 8*startByte+i;
395 for(i=startByte; i<
fNbytes; i++) {
406 static const Int_t fbits[256] = {
407 8,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,
408 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
409 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
410 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
411 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
412 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
413 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
414 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
415 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
416 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
417 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
418 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
419 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
420 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
421 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
422 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7};
426 UInt_t startByte = startBit/8;
429 for (i=ibit+1;i>0;i--) {
430 if ((
fAllBits[startByte] & (1<<(i-1))) != 0)
return 8*startByte+i-1;
434 for(i=startByte+1; i>0; i--) {
447 for (
UInt_t j=0; j<8; ++j) {
470 for (
UInt_t j=0; j<8; ++j) {
471 if (val & 1) printf(
" bit:%4d = 1\n",count);
505 UInt_t nbytes=(nbits+7)>>3;
580 UInt_t nbytes = ((nbits+15)>>3)&~1;
587 for (
UInt_t i=0; i<nbytes; i+=2) {
596 UInt_t nbytes = ((nbits+31)>>3)&~3;
603 for (
UInt_t i=0; i<nbytes; i+=4) {
614 UInt_t nbytes = ((nbits+63)>>3)&~7;
621 for (
UInt_t i=0; i<nbytes; i+=8) {
638 UInt_t nSafeBytes = nBytes&~1;
641 for (
UInt_t i=0; i<nSafeBytes; i+=2) {
646 if (nBytes>nSafeBytes) {
647 cArray[nSafeBytes+1] =
fAllBits[nSafeBytes];
656 UInt_t nSafeBytes = nBytes&~3;
660 for (i=0; i<nSafeBytes; i+=4) {
667 for (i=0; i<nBytes-nSafeBytes; ++i) {
668 cArray[nSafeBytes + (3 - i)] =
fAllBits[nSafeBytes + i];
677 UInt_t nSafeBytes = nBytes&~7;
681 for (i=0; i<nSafeBytes; i+=8) {
692 for (i=0; i<nBytes-nSafeBytes; ++i) {
693 cArray[nSafeBytes + (7 - i)] =
fAllBits[nSafeBytes + i];
void Output(std::ostream &) const
Print the value to the std::ostream.
void Print(Option_t *option="") const
Print the list of active bits.
void Clear(Option_t *option="")
Clear the value.
void Set(UInt_t nbits, const Char_t *array)
Set all the bytes.
void DoAndEqual(const TBits &rhs)
Execute (*this) &= rhs; Extra bits in rhs are ignored Missing bits in rhs are assumed to be zero...
void Resize(UInt_t newlen)
void DoRightShift(UInt_t shift)
Execute the left shift operation.
void ResetAllBits(Bool_t value=kFALSE)
Reset all bits to 0 (false).
TBits & operator=(const TBits &)
TBits assignment operator.
Bool_t operator==(const TBits &other) const
virtual ~TBits()
TBits destructor.
void DoOrEqual(const TBits &rhs)
Execute (*this) &= rhs; Extra bits in rhs are ignored Missing bits in rhs are assumed to be zero...
TObject & operator=(const TObject &rhs)
TObject assignment operator.
void Get(Char_t *array) const
Copy all the byes.
UInt_t LastSetBit(UInt_t startBit=999999999) const
Return position of first non null bit (starting from position 0 and up)
UInt_t LastNullBit(UInt_t startBit=999999999) const
Return position of first null bit (starting from position 0 and up)
UInt_t FirstSetBit(UInt_t startBit=0) const
Return position of first non null bit (starting from position 0 and up)
void Compact()
Reduce the storage used by the object to a minimun.
void DoLeftShift(UInt_t shift)
Execute the left shift operation.
void DoXorEqual(const TBits &rhs)
Execute (*this) ^= rhs; Extra bits in rhs are ignored Missing bits in rhs are assumed to be zero...
TBits(UInt_t nbits=8)
TBits constructor. All bits set to 0.
Mother of all ROOT objects.
void Paint(Option_t *option="")
Once implemented, it will draw the bit field as an histogram.
void DoFlip()
Execute ~(*this)
UInt_t CountBits(UInt_t startBit=0) const
Return number of bits set to 1 starting at bit startBit.
void ReserveBytes(UInt_t nbytes)
Reverse each bytes.
UInt_t FirstNullBit(UInt_t startBit=0) const
Return position of first null bit (starting from position 0 and up)