table of contents
BitStream.h(3) | Library Functions Manual | BitStream.h(3) |
NAME¶
BitStream.h
SYNOPSIS¶
#include 'PGFtypes.h'
Macros¶
#define MAKEU64(a, b) ((UINT64) (((UINT32) (a)) | ((UINT64)
((UINT32) (b))) << 32))
Make 64 bit unsigned integer from two 32 bit unsigned integers.
Functions¶
void SetBit (UINT32 *stream, UINT32 pos)
void ClearBit (UINT32 *stream, UINT32 pos)
bool GetBit (UINT32 *stream, UINT32 pos)
bool CompareBitBlock (UINT32 *stream, UINT32 pos, UINT32 k, UINT32 val)
void SetValueBlock (UINT32 *stream, UINT32 pos, UINT32 val, UINT32 k)
UINT32 GetValueBlock (UINT32 *stream, UINT32 pos, UINT32 k)
void ClearBitBlock (UINT32 *stream, UINT32 pos, UINT32 len)
void SetBitBlock (UINT32 *stream, UINT32 pos, UINT32 len)
UINT32 SeekBitRange (UINT32 *stream, UINT32 pos, UINT32 len)
UINT32 SeekBit1Range (UINT32 *stream, UINT32 pos, UINT32 len)
UINT32 AlignWordPos (UINT32 pos)
UINT32 NumberOfWords (UINT32 pos)
Variables¶
static const UINT32 Filled = 0xFFFFFFFF
Macro Definition Documentation¶
#define MAKEU64(a, b) ((UINT64) (((UINT32) (a)) | ((UINT64) ((UINT32) (b))) << 32))¶
Make 64 bit unsigned integer from two 32 bit unsigned integers.
Definition at line 41 of file BitStream.h.
Function Documentation¶
UINT32 AlignWordPos (UINT32 pos) [inline]¶
Compute bit position of the next 32-bit word
Parameters
Returns
Definition at line 328 of file BitStream.h..PP
328 { 329 // return ((pos + WordWidth - 1) >> WordWidthLog) << WordWidthLog; 330 return DWWIDTHBITS(pos); 331 }
void ClearBit (UINT32 * stream, UINT32 pos) [inline]¶
Set one bit of a bit stream to 0
Parameters
pos A valid zero-based position in the bit stream
Definition at line 70 of file BitStream.h..PP
70 { 71 stream[pos >> WordWidthLog] &= ~(1 << (pos%WordWidth)); 72 }
void ClearBitBlock (UINT32 * stream, UINT32 pos, UINT32 len) [inline]¶
Clear block of size at least len at position pos in stream
Parameters
pos A valid zero-based position in the bit stream
len Number of bits set to 0
Definition at line 169 of file BitStream.h..PP
169 { 170 ASSERT(len > 0); 171 const UINT32 iFirstInt = pos >> WordWidthLog; 172 const UINT32 iLastInt = (pos + len - 1) >> WordWidthLog; 173 174 const UINT32 startMask = Filled << (pos%WordWidth); 175 // const UINT32 endMask=Filled>>(WordWidth-1-((pos+len-1)%WordWidth)); 176 177 if (iFirstInt == iLastInt) { 178 stream[iFirstInt] &= ~(startMask /*& endMask*/); 179 } else { 180 stream[iFirstInt] &= ~startMask; 181 for (UINT32 i = iFirstInt + 1; i <= iLastInt; i++) { // changed <= 182 stream[i] = 0; 183 } 184 //stream[iLastInt] &= ~endMask; 185 } 186 }
bool CompareBitBlock (UINT32 * stream, UINT32 pos, UINT32 k, UINT32 val) [inline]¶
Compare k-bit binary representation of stream at position pos with val
Parameters
pos A valid zero-based position in the bit stream
k Number of bits to compare
val Value to compare with
Returns
Definition at line 91 of file BitStream.h..PP
91 { 92 const UINT32 iLoInt = pos >> WordWidthLog; 93 const UINT32 iHiInt = (pos + k - 1) >> WordWidthLog; 94 ASSERT(iLoInt <= iHiInt); 95 const UINT32 mask = (Filled >> (WordWidth - k)); 96 97 if (iLoInt == iHiInt) { 98 // fits into one integer 99 val &= mask; 100 val <<= (pos%WordWidth); 101 return (stream[iLoInt] & val) == val; 102 } else { 103 // must be splitted over integer boundary 104 UINT64 v1 = MAKEU64(stream[iLoInt], stream[iHiInt]); 105 UINT64 v2 = UINT64(val & mask) << (pos%WordWidth); 106 return (v1 & v2) == v2; 107 } 108 }
bool GetBit (UINT32 * stream, UINT32 pos) [inline]¶
Return one bit of a bit stream
Parameters
pos A valid zero-based position in the bit stream
Returns
Definition at line 79 of file BitStream.h..PP
79 { 80 return (stream[pos >> WordWidthLog] & (1 << (pos%WordWidth))) > 0; 81 82 }
UINT32 GetValueBlock (UINT32 * stream, UINT32 pos, UINT32 k) [inline]¶
Read k-bit number from stream at position pos
Parameters
pos A valid zero-based position in the bit stream
k Number of bits to read: 1 <= k <= 32
Definition at line 142 of file BitStream.h..PP
142 { 143 UINT32 count, hiCount; 144 const UINT32 iLoInt = pos >> WordWidthLog; // integer of first bit 145 const UINT32 iHiInt = (pos + k - 1) >> WordWidthLog; // integer of last bit 146 const UINT32 loMask = Filled << (pos%WordWidth); 147 const UINT32 hiMask = Filled >> (WordWidth - 1 - ((pos + k - 1)%WordWidth)); 148 149 if (iLoInt == iHiInt) { 150 // inside integer boundary 151 count = stream[iLoInt] & (loMask & hiMask); 152 count >>= pos%WordWidth; 153 } else { 154 // overlapping integer boundary 155 count = stream[iLoInt] & loMask; 156 count >>= pos%WordWidth; 157 hiCount = stream[iHiInt] & hiMask; 158 hiCount <<= WordWidth - (pos%WordWidth); 159 count |= hiCount; 160 } 161 return count; 162 }
UINT32 NumberOfWords (UINT32 pos) [inline]¶
Compute number of the 32-bit words
Parameters
Returns
Definition at line 337 of file BitStream.h..PP
337 { 338 return (pos + WordWidth - 1) >> WordWidthLog; 339 }
UINT32 SeekBit1Range (UINT32 * stream, UINT32 pos, UINT32 len) [inline]¶
Returns the distance to the next 0 in stream at position pos. If no 0 is found within len bits, then len is returned.
Parameters
pos A valid zero-based position in the bit stream
len size of search area (in bits) return The distance to the next 0 in stream at position pos
Definition at line 249 of file BitStream.h..PP
249 { 250 UINT32 count = 0; 251 UINT32 testMask = 1 << (pos%WordWidth); 252 UINT32* word = stream + (pos >> WordWidthLog); 253 254 while (((*word & testMask) != 0) && (count < len)) { 255 count++; 256 testMask <<= 1; 257 if (!testMask) { 258 word++; testMask = 1; 259 260 // fast steps if all bits in a word are one 261 while ((count + WordWidth <= len) && (*word == Filled)) { 262 word++; 263 count += WordWidth; 264 } 265 } 266 } 267 return count; 268 }
UINT32 SeekBitRange (UINT32 * stream, UINT32 pos, UINT32 len) [inline]¶
Returns the distance to the next 1 in stream at position pos. If no 1 is found within len bits, then len is returned.
Parameters
pos A valid zero-based position in the bit stream
len size of search area (in bits) return The distance to the next 1 in stream at position pos
Definition at line 220 of file BitStream.h..PP
220 { 221 UINT32 count = 0; 222 UINT32 testMask = 1 << (pos%WordWidth); 223 UINT32* word = stream + (pos >> WordWidthLog); 224 225 while (((*word & testMask) == 0) && (count < len)) { 226 count++; 227 testMask <<= 1; 228 if (!testMask) { 229 word++; testMask = 1; 230 231 // fast steps if all bits in a word are zero 232 while ((count + WordWidth <= len) && (*word == 0)) { 233 word++; 234 count += WordWidth; 235 } 236 } 237 } 238 239 return count; 240 }
void SetBit (UINT32 * stream, UINT32 pos) [inline]¶
Set one bit of a bit stream to 1
Parameters
pos A valid zero-based position in the bit stream
Definition at line 62 of file BitStream.h..PP
62 { 63 stream[pos >> WordWidthLog] |= (1 << (pos%WordWidth)); 64 }
void SetBitBlock (UINT32 * stream, UINT32 pos, UINT32 len) [inline]¶
Set block of size at least len at position pos in stream
Parameters
pos A valid zero-based position in the bit stream
len Number of bits set to 1
Definition at line 193 of file BitStream.h..PP
193 { 194 ASSERT(len > 0); 195 196 const UINT32 iFirstInt = pos >> WordWidthLog; 197 const UINT32 iLastInt = (pos + len - 1) >> WordWidthLog; 198 199 const UINT32 startMask = Filled << (pos%WordWidth); 200 // const UINT32 endMask=Filled>>(WordWidth-1-((pos+len-1)%WordWidth)); 201 202 if (iFirstInt == iLastInt) { 203 stream[iFirstInt] |= (startMask /*& endMask*/); 204 } else { 205 stream[iFirstInt] |= startMask; 206 for (UINT32 i = iFirstInt + 1; i <= iLastInt; i++) { // changed <= 207 stream[i] = Filled; 208 } 209 //stream[iLastInt] &= ~endMask; 210 } 211 }
void SetValueBlock (UINT32 * stream, UINT32 pos, UINT32 val, UINT32 k) [inline]¶
Store k-bit binary representation of val in stream at position pos
Parameters
pos A valid zero-based position in the bit stream
val Value to store in stream at position pos
k Number of bits of integer representation of val
Definition at line 116 of file BitStream.h..PP
116 { 117 const UINT32 offset = pos%WordWidth; 118 const UINT32 iLoInt = pos >> WordWidthLog; 119 const UINT32 iHiInt = (pos + k - 1) >> WordWidthLog; 120 ASSERT(iLoInt <= iHiInt); 121 const UINT32 loMask = Filled << offset; 122 const UINT32 hiMask = Filled >> (WordWidth - 1 - ((pos + k - 1)%WordWidth)); 123 124 if (iLoInt == iHiInt) { 125 // fits into one integer 126 stream[iLoInt] &= ~(loMask & hiMask); // clear bits 127 stream[iLoInt] |= val << offset; // write value 128 } else { 129 // must be splitted over integer boundary 130 stream[iLoInt] &= ~loMask; // clear bits 131 stream[iLoInt] |= val << offset; // write lower part of value 132 stream[iHiInt] &= ~hiMask; // clear bits 133 stream[iHiInt] |= val >> (WordWidth - offset); // write higher part of value 134 } 135 }
Variable Documentation¶
const UINT32 Filled = 0xFFFFFFFF [static]¶
Definition at line 38 of file BitStream.h.
Author¶
Generated automatically by Doxygen for libpgf from the source code.
Version 7.21.2 | libpgf |