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)
195 if ((
size_t)HowMany>Buffer_Size+LastByte_Size)
203 Buffer_Size_BeforeLastCall=Buffer_Size+LastByte_Size;
205 if (HowMany<=LastByte_Size)
206 LastByte_Size-=HowMany;
209 size_t NewBits=HowMany-LastByte_Size;
210 switch ((NewBits-1)/8)
228 LastByte_Size=
MIN(8, Buffer_Size)-NewBits;
229 Buffer_Size -=
MIN(8, Buffer_Size);
257 size_t HowMany1, HowMany2;
262 HowMany2=HowMany-HowMany1;
270 int32u ToReturn=
Get(HowMany);
277 return Peek(1)?
true:
false;
282 return (int8u )
Peek(HowMany);
287 return (int16u)
Peek(HowMany);
292 return (int32u)
Peek(HowMany);
297 return (int32u)
Peek(HowMany);
302 return (int64u)
Peek(HowMany);
310 Buffer_BookMark=Buffer;
311 Buffer_Size_BookMark=Buffer_Size;
312 LastByte_BookMark=LastByte;
313 LastByte_Size_BookMark=LastByte_Size;
314 BufferUnderRun_BookMark=BufferUnderRun;
319 Buffer=Buffer_BookMark;
320 Buffer_Size=Buffer_Size_BookMark;
321 LastByte=LastByte_BookMark;
322 LastByte_Size=LastByte_Size_BookMark;
323 BufferUnderRun=BufferUnderRun_BookMark;
329 return (int32u)(Buffer_Size+LastByte_Size);
341 return (Buffer_Size_Init-Buffer_Size)/8;
348 return LastByte_Size;
355 return (Buffer_Size_Init-Buffer_Size_BeforeLastCall)/8;
361 size_t Buffer_Size_Init;
362 size_t Buffer_Size_BeforeLastCall;
364 size_t LastByte_Size;
368 const int8u* Buffer_BookMark;
369 size_t Buffer_Size_BookMark;
370 size_t LastByte_BookMark;
371 size_t LastByte_Size_BookMark;
372 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:267
void Skip8(size_t HowMany)
Definition BitStream.h:253
int64u Peek8(size_t HowMany)
Definition BitStream.h:300
void Skip1(size_t HowMany)
Definition BitStream.h:238
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:344
virtual void Byte_Align()
Definition BitStream.h:332
virtual int32u Remain()
Definition BitStream.h:327
int32u Peek3(size_t HowMany)
Definition BitStream.h:295
int8u Get1(size_t HowMany)
Definition BitStream.h:144
virtual size_t OffsetBeforeLastCall_Get()
Definition BitStream.h:351
void SkipB()
Definition BitStream.h:233
int16u Get2(size_t HowMany)
Definition BitStream.h:149
int32u Peek4(size_t HowMany)
Definition BitStream.h:290
bool GetB()
Definition BitStream.h:139
bool PeekB()
Definition BitStream.h:275
virtual int32u Get(size_t HowMany)
Definition BitStream.h:72
void Skip2(size_t HowMany)
Definition BitStream.h:243
int16u Peek2(size_t HowMany)
Definition BitStream.h:285
virtual size_t Offset_Get()
Definition BitStream.h:337
BitStream()
Definition BitStream.h:33
int8u Peek1(size_t HowMany)
Definition BitStream.h:280
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:305
BitStream(const int8u *Buffer_, size_t Size_)
Definition BitStream.h:46
void Skip4(size_t HowMany)
Definition BitStream.h:248
virtual ~BitStream()
Definition BitStream.h:59
Definition BitStream.h:24