27 #define MIN(a, b) (((a) < (b)) ? (a) : (b))
34 Buffer_Size=Buffer_Size_Init=Buffer_Size_BeforeLastCall=0;
38 BitStream (
const int8u* Buffer_,
size_t Size_) {Buffer=Buffer_;
39 Buffer_Size=Buffer_Size_Init=Buffer_Size_BeforeLastCall=Size_*8;
41 BufferUnderRun=Buffer_Size?
false:
true;
45 virtual void Attach(
const int8u* Buffer_,
size_t Size_)
50 Buffer_Size=Buffer_Size_Init=Buffer_Size_BeforeLastCall=Size_*8;
52 BufferUnderRun=Buffer_Size?
false:
true;
56 virtual int32u
Get (
size_t HowMany)
59 static const int32u Mask[33]={
61 0x00000001, 0x00000003, 0x00000007, 0x0000000f,
62 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff,
63 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff,
64 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff,
65 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff,
66 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff,
67 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff,
68 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff,
71 if (HowMany==0 || HowMany>32)
73 if ((
size_t)HowMany>Buffer_Size+LastByte_Size)
81 Buffer_Size_BeforeLastCall=Buffer_Size+LastByte_Size;
83 if (HowMany<=LastByte_Size)
85 LastByte_Size-=HowMany;
86 ToReturn=LastByte>>LastByte_Size;
90 size_t NewBits=HowMany-LastByte_Size;
94 ToReturn=LastByte<<NewBits;
95 switch ((NewBits-1)/8)
98 ToReturn |= ((size_t)*Buffer) << NewBits;
102 ToReturn |= ((size_t)*Buffer) << NewBits;
106 ToReturn |= ((size_t)*Buffer) << NewBits;
113 LastByte_Size=
MIN(8, Buffer_Size)-NewBits;
114 Buffer_Size -=
MIN(8, Buffer_Size);
115 ToReturn|=(LastByte>>LastByte_Size)&Mask[NewBits];
117 return (int32u)(ToReturn&Mask[HowMany]);
122 return Get(1)?
true:
false;
127 return (int8u )
Get(HowMany);
132 return (int16u)
Get(HowMany);
137 return (int32u)
Get(HowMany);
144 size_t HowMany1, HowMany2;
145 int64u Value1, Value2;
150 HowMany2=HowMany-HowMany1;
151 Value1=
Get(HowMany1);
152 Value2=
Get(HowMany2);
155 return Value1*0x100000000LL+Value2;
158 virtual void Skip (
size_t HowMany)
174 if ((
size_t)HowMany>Buffer_Size+LastByte_Size)
182 Buffer_Size_BeforeLastCall=Buffer_Size+LastByte_Size;
184 if (HowMany<=LastByte_Size)
185 LastByte_Size-=HowMany;
188 size_t NewBits=HowMany-LastByte_Size;
189 switch ((NewBits-1)/8)
204 LastByte_Size=
MIN(8, Buffer_Size)-NewBits;
205 Buffer_Size -=
MIN(8, Buffer_Size);
233 size_t HowMany1, HowMany2;
238 HowMany2=HowMany-HowMany1;
246 int32u ToReturn=
Get(HowMany);
253 return Peek(1)?
true:
false;
258 return (int8u )
Peek(HowMany);
263 return (int16u)
Peek(HowMany);
268 return (int32u)
Peek(HowMany);
273 return (int32u)
Peek(HowMany);
278 return (int64u)
Peek(HowMany);
286 Buffer_BookMark=Buffer;
287 Buffer_Size_BookMark=Buffer_Size;
288 LastByte_BookMark=LastByte;
289 LastByte_Size_BookMark=LastByte_Size;
290 BufferUnderRun_BookMark=BufferUnderRun;
295 Buffer=Buffer_BookMark;
296 Buffer_Size=Buffer_Size_BookMark;
297 LastByte=LastByte_BookMark;
298 LastByte_Size=LastByte_Size_BookMark;
299 BufferUnderRun=BufferUnderRun_BookMark;
305 return (int32u)(Buffer_Size+LastByte_Size);
317 return (Buffer_Size_Init-Buffer_Size)/8;
324 return LastByte_Size;
331 return (Buffer_Size_Init-Buffer_Size_BeforeLastCall)/8;
337 size_t Buffer_Size_Init;
338 size_t Buffer_Size_BeforeLastCall;
340 size_t LastByte_Size;
344 const int8u* Buffer_BookMark;
345 size_t Buffer_Size_BookMark;
346 size_t LastByte_BookMark;
347 size_t LastByte_Size_BookMark;
348 bool BufferUnderRun_BookMark;
#define MIN(a, b)
Definition: BitStream.h:27
virtual void Attach(const int8u *Buffer_, size_t Size_)
Definition: BitStream.h:45
int64u Get8(size_t HowMany)
Definition: BitStream.h:140
virtual int32u Remain()
Definition: BitStream.h:303
int32u Peek4(size_t HowMany)
Definition: BitStream.h:266
int16u Peek2(size_t HowMany)
Definition: BitStream.h:261
Definition: BitStream.h:30
void Skip2(size_t HowMany)
Definition: BitStream.h:219
int8u Get1(size_t HowMany)
Definition: BitStream.h:125
#define NULL
Definition: HTTPClientWrapper.h:97
void Skip1(size_t HowMany)
Definition: BitStream.h:214
virtual void Byte_Align()
Definition: BitStream.h:308
void BookMarkPos(bool ToSet)
Definition: BitStream.h:281
virtual ~BitStream()
Definition: BitStream.h:43
virtual int32u Get(size_t HowMany)
Definition: BitStream.h:56
bool PeekB()
Definition: BitStream.h:251
int32u Get4(size_t HowMany)
Definition: BitStream.h:135
BitStream(const int8u *Buffer_, size_t Size_)
Definition: BitStream.h:38
void Skip4(size_t HowMany)
Definition: BitStream.h:224
void Skip8(size_t HowMany)
Definition: BitStream.h:229
bool GetB()
Definition: BitStream.h:120
int32u Peek3(size_t HowMany)
Definition: BitStream.h:271
virtual size_t OffsetBeforeLastCall_Get()
Definition: BitStream.h:327
int32u Peek(size_t HowMany)
Definition: BitStream.h:243
BitStream()
Definition: BitStream.h:33
int16u Get2(size_t HowMany)
Definition: BitStream.h:130
void SkipB()
Definition: BitStream.h:209
int64u Peek8(size_t HowMany)
Definition: BitStream.h:276
virtual size_t BitOffset_Get()
Definition: BitStream.h:320
int8u Peek1(size_t HowMany)
Definition: BitStream.h:256
virtual size_t Offset_Get()
Definition: BitStream.h:313
virtual void Skip(size_t HowMany)
Definition: BitStream.h:158