27 #define MIN(a, b) (((a) < (b)) ? (a) : (b))
36 Buffer_Size_BeforeLastCall = 0;
39 BufferUnderRun =
true;
42 Buffer_Size_BookMark = 0;
43 LastByte_BookMark = 0;
44 LastByte_Size_BookMark = 0;
45 BufferUnderRun_BookMark =
false; }
46 BitStream (
const int8u* Buffer_,
size_t Size_) { Buffer = Buffer_;
47 Buffer_Size = Size_ * 8;
48 Buffer_Size_Init = Size_ * 8;
49 Buffer_Size_BeforeLastCall = Size_ * 8;
52 BufferUnderRun = (Buffer_Size ? false :
true);
55 Buffer_Size_BookMark = 0;
56 LastByte_BookMark = 0;
57 LastByte_Size_BookMark = 0;
58 BufferUnderRun_BookMark =
false; }
61 virtual void Attach(
const int8u* Buffer_,
size_t Size_)
66 Buffer_Size=Buffer_Size_Init=Buffer_Size_BeforeLastCall=Size_*8;
68 BufferUnderRun=Buffer_Size?
false:
true;
72 virtual int32u
Get (
size_t HowMany)
75 static const int32u Mask[33]={
77 0x00000001, 0x00000003, 0x00000007, 0x0000000f,
78 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff,
79 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff,
80 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff,
81 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff,
82 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff,
83 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff,
84 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff,
87 if (HowMany==0 || HowMany>32)
89 if ((
size_t)HowMany>Buffer_Size+LastByte_Size)
97 Buffer_Size_BeforeLastCall=Buffer_Size+LastByte_Size;
99 if (HowMany<=LastByte_Size)
101 LastByte_Size-=HowMany;
102 ToReturn=LastByte>>LastByte_Size;
106 size_t NewBits=HowMany-LastByte_Size;
110 ToReturn=LastByte<<NewBits;
111 switch ((NewBits-1)/8)
114 ToReturn |= ((size_t)*Buffer) << NewBits;
119 ToReturn |= ((size_t)*Buffer) << NewBits;
124 ToReturn |= ((size_t)*Buffer) << NewBits;
132 LastByte_Size=
MIN(8, Buffer_Size)-NewBits;
133 Buffer_Size -=
MIN(8, Buffer_Size);
134 ToReturn|=(LastByte>>LastByte_Size)&Mask[NewBits];
136 return (int32u)(ToReturn&Mask[HowMany]);
141 return Get(1)?
true:
false;
146 return (int8u )
Get(HowMany);
151 return (int16u)
Get(HowMany);
156 return (int32u)
Get(HowMany);
163 size_t HowMany1, HowMany2;
164 int64u Value1, Value2;
169 HowMany2=HowMany-HowMany1;
170 Value1=
Get(HowMany1);
171 Value2=
Get(HowMany2);
174 return Value1*0x100000000LL+Value2;
177 virtual void Skip (
size_t HowMany)
193 if ((
size_t)HowMany>Buffer_Size+LastByte_Size)
201 Buffer_Size_BeforeLastCall=Buffer_Size+LastByte_Size;
203 if (HowMany<=LastByte_Size)
204 LastByte_Size-=HowMany;
207 size_t NewBits=HowMany-LastByte_Size;
208 switch ((NewBits-1)/8)
226 LastByte_Size=
MIN(8, Buffer_Size)-NewBits;
227 Buffer_Size -=
MIN(8, Buffer_Size);
255 size_t HowMany1, HowMany2;
260 HowMany2=HowMany-HowMany1;
268 int32u ToReturn=
Get(HowMany);
275 return Peek(1)?
true:
false;
280 return (int8u )
Peek(HowMany);
285 return (int16u)
Peek(HowMany);
290 return (int32u)
Peek(HowMany);
295 return (int32u)
Peek(HowMany);
300 return (int64u)
Peek(HowMany);
308 Buffer_BookMark=Buffer;
309 Buffer_Size_BookMark=Buffer_Size;
310 LastByte_BookMark=LastByte;
311 LastByte_Size_BookMark=LastByte_Size;
312 BufferUnderRun_BookMark=BufferUnderRun;
317 Buffer=Buffer_BookMark;
318 Buffer_Size=Buffer_Size_BookMark;
319 LastByte=LastByte_BookMark;
320 LastByte_Size=LastByte_Size_BookMark;
321 BufferUnderRun=BufferUnderRun_BookMark;
327 return (int32u)(Buffer_Size+LastByte_Size);
339 return (Buffer_Size_Init-Buffer_Size)/8;
346 return LastByte_Size;
353 return (Buffer_Size_Init-Buffer_Size_BeforeLastCall)/8;
359 size_t Buffer_Size_Init;
360 size_t Buffer_Size_BeforeLastCall;
362 size_t LastByte_Size;
366 const int8u* Buffer_BookMark;
367 size_t Buffer_Size_BookMark;
368 size_t LastByte_BookMark;
369 size_t LastByte_Size_BookMark;
370 bool BufferUnderRun_BookMark;
#define MIN(a, b)
Definition: BitStream.h:27
#define NULL
Definition: HTTPClientWrapper.h:98
Definition: BitStream.h:31
int32u Peek(size_t HowMany)
Definition: BitStream.h:265
void Skip8(size_t HowMany)
Definition: BitStream.h:251
int64u Peek8(size_t HowMany)
Definition: BitStream.h:298
void Skip1(size_t HowMany)
Definition: BitStream.h:236
int32u Get4(size_t HowMany)
Definition: BitStream.h:154
virtual void Attach(const int8u *Buffer_, size_t Size_)
Definition: BitStream.h:61
virtual size_t BitOffset_Get()
Definition: BitStream.h:342
virtual void Byte_Align()
Definition: BitStream.h:330
virtual int32u Remain()
Definition: BitStream.h:325
int32u Peek3(size_t HowMany)
Definition: BitStream.h:293
int8u Get1(size_t HowMany)
Definition: BitStream.h:144
virtual size_t OffsetBeforeLastCall_Get()
Definition: BitStream.h:349
void SkipB()
Definition: BitStream.h:231
int16u Get2(size_t HowMany)
Definition: BitStream.h:149
int32u Peek4(size_t HowMany)
Definition: BitStream.h:288
bool GetB()
Definition: BitStream.h:139
bool PeekB()
Definition: BitStream.h:273
virtual int32u Get(size_t HowMany)
Definition: BitStream.h:72
void Skip2(size_t HowMany)
Definition: BitStream.h:241
int16u Peek2(size_t HowMany)
Definition: BitStream.h:283
virtual size_t Offset_Get()
Definition: BitStream.h:335
BitStream()
Definition: BitStream.h:33
int8u Peek1(size_t HowMany)
Definition: BitStream.h:278
int64u Get8(size_t HowMany)
Definition: BitStream.h:159
virtual void Skip(size_t HowMany)
Definition: BitStream.h:177
void BookMarkPos(bool ToSet)
Definition: BitStream.h:303
BitStream(const int8u *Buffer_, size_t Size_)
Definition: BitStream.h:46
void Skip4(size_t HowMany)
Definition: BitStream.h:246
virtual ~BitStream()
Definition: BitStream.h:59
Definition: BitStream.h:24