Scroll to navigation

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

pos current bit stream position

Returns

bit position of next 32-bit word

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

stream A bit stream stored in array of unsigned integers
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

stream A bit stream stored in array of unsigned integers
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

stream A bit stream stored in array of unsigned integers
pos A valid zero-based position in the bit stream
k Number of bits to compare
val Value to compare with

Returns

true if equal

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

stream A bit stream stored in array of unsigned integers
pos A valid zero-based position in the bit stream

Returns

bit at position pos of bit stream stream

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

stream A bit stream stored in array of unsigned integers
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

pos Current bit stream position

Returns

Number of 32-bit words

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

stream A bit stream stored in array of unsigned integers
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

stream A bit stream stored in array of unsigned integers
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

stream A bit stream stored in array of unsigned integers
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

stream A bit stream stored in array of unsigned integers
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

stream A bit stream stored in array of unsigned integers
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