15 #ifndef ZenBitStream_FastH 16 #define ZenBitStream_FastH 27 #define MIN(a, b) (((a) < (b)) ? (a) : (b)) 34 Buffer_Size=Buffer_Size_Init=0;
37 Buffer_Size=Buffer_Size_Init=Size_*8;
41 void Attach(
const int8u* Buffer_,
size_t Size_)
44 Buffer_Size=Buffer_Size_Init=Size_*8;
53 return ((LastByte>>(Buffer_Size%8))&0x1)?
true:
false;
66 return (LastByte&0x80)?
true:
false;
72 static const int8u Mask[9]=
75 0x01, 0x03, 0x07, 0x0f,
76 0x1f, 0x3f, 0x7f, 0xff,
79 if (HowMany<=(Buffer_Size%8))
82 return (LastByte>>(Buffer_Size%8))&Mask[HowMany];
85 if (HowMany>Buffer_Size)
92 int8u NewBits=HowMany-(Buffer_Size%8);
96 ToReturn=LastByte<<NewBits;
100 ToReturn|=(LastByte>>(Buffer_Size%8))&Mask[NewBits];
101 return ToReturn&Mask[HowMany];
107 static const int16u Mask[17]=
110 0x0001, 0x0003, 0x0007, 0x000f,
111 0x001f, 0x003f, 0x007f, 0x00ff,
112 0x01ff, 0x03ff, 0x07ff, 0x0fff,
113 0x1fff, 0x3fff, 0x7fff, 0xffff,
116 if (HowMany<=(Buffer_Size%8))
118 Buffer_Size-=HowMany;
119 return (LastByte>>(Buffer_Size%8))&Mask[HowMany];
122 if (HowMany>Buffer_Size)
129 int8u NewBits=HowMany-(Buffer_Size%8);
133 ToReturn=LastByte<<NewBits;
137 ToReturn|=*Buffer<<NewBits;
142 Buffer_Size-=HowMany;
143 ToReturn|=(LastByte>>(Buffer_Size%8))&Mask[NewBits];
144 return ToReturn&Mask[HowMany];
150 static const int32u Mask[33]=
153 0x00000001, 0x00000003, 0x00000007, 0x0000000f,
154 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff,
155 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff,
156 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff,
157 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff,
158 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff,
159 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff,
160 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff,
163 if (HowMany<=(Buffer_Size%8))
165 Buffer_Size-=HowMany;
166 return (LastByte>>(Buffer_Size%8))&Mask[HowMany];
169 if (HowMany>Buffer_Size)
176 int8u NewBits=HowMany-(Buffer_Size%8);
180 ToReturn=LastByte<<NewBits;
181 switch ((NewBits-1)>>3)
184 ToReturn|=*(Buffer++)<<NewBits;
186 ToReturn|=*(Buffer++)<<NewBits;
188 ToReturn|=*(Buffer++)<<NewBits;
191 LastByte=*(Buffer++);
192 Buffer_Size-=HowMany;
193 ToReturn|=(LastByte>>(Buffer_Size%8))&Mask[NewBits];
194 return ToReturn&Mask[HowMany];
201 int8u HowMany1, HowMany2;
202 int64u Value1, Value2;
207 HowMany2=HowMany-HowMany1;
208 Value1=
Get4(HowMany1);
209 Value2=
Get4(HowMany2);
212 return Value1*0x100000000LL+Value2;
217 if (HowMany<=(Buffer_Size%8))
219 Buffer_Size-=HowMany;
223 if (HowMany>Buffer_Size)
230 Buffer+=(HowMany-(Buffer_Size%8)-1)>>3;
233 Buffer_Size-=HowMany;
239 return ((LastByte>>((Buffer_Size-1)%8))&0x1)?
true:
false;
248 return ((*Buffer)&0x80)?
true:
false;
254 static const int8u Mask[9]=
257 0x01, 0x03, 0x07, 0x0f,
258 0x1f, 0x3f, 0x7f, 0xff,
261 if (HowMany<=(Buffer_Size%8))
262 return (LastByte>>((Buffer_Size-HowMany)%8))&Mask[HowMany];
264 if (HowMany>Buffer_Size)
271 int8u NewBits=HowMany-(Buffer_Size%8);
275 ToReturn=LastByte<<NewBits;
276 ToReturn|=((*Buffer)>>((Buffer_Size-HowMany)%8))&Mask[NewBits];
278 return ToReturn&Mask[HowMany];
284 static const int16u Mask[17]=
287 0x0001, 0x0003, 0x0007, 0x000f,
288 0x001f, 0x003f, 0x007f, 0x00ff,
289 0x01ff, 0x03ff, 0x07ff, 0x0fff,
290 0x1fff, 0x3fff, 0x7fff, 0xffff,
293 if (HowMany<=(Buffer_Size%8))
294 return (LastByte>>((Buffer_Size-HowMany)%8))&Mask[HowMany];
296 if (HowMany>Buffer_Size)
303 const int8u* Buffer_Save=Buffer;
305 int8u NewBits=HowMany-(Buffer_Size%8);
309 ToReturn=LastByte<<NewBits;
313 ToReturn|=*Buffer<<NewBits;
316 ToReturn|=((*Buffer)>>((Buffer_Size-HowMany)%8))&Mask[NewBits];
320 return ToReturn&Mask[HowMany];
326 static const int32u Mask[33]=
329 0x00000001, 0x00000003, 0x00000007, 0x0000000f,
330 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff,
331 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff,
332 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff,
333 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff,
334 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff,
335 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff,
336 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff,
339 if (HowMany<=(Buffer_Size%8))
340 return (LastByte>>((Buffer_Size-HowMany)%8))&Mask[HowMany];
342 if (HowMany>Buffer_Size)
349 const int8u* Buffer_Save=Buffer;
351 int8u NewBits=HowMany-(Buffer_Size%8);
355 ToReturn=LastByte<<NewBits;
356 switch ((NewBits-1)>>3)
359 ToReturn|=*Buffer<<NewBits;
362 ToReturn|=*Buffer<<NewBits;
365 ToReturn|=*Buffer<<NewBits;
369 ToReturn|=((*Buffer)>>((Buffer_Size-HowMany)%8))&Mask[NewBits];
373 return ToReturn&Mask[HowMany];
378 return (int64u)
Peek4(HowMany);
388 Skip (Buffer_Size%8);
393 return (Buffer_Size_Init-Buffer_Size)/8;
398 return Buffer_Size%8;
403 return Buffer_Size%8;
409 size_t Buffer_Size_Init;
size_t Remain() const
Definition: BitStream_Fast.h:381
~BitStream_Fast()
Definition: BitStream_Fast.h:39
BitStream_Fast(const int8u *Buffer_, size_t Size_)
Definition: BitStream_Fast.h:36
bool GetB()
Definition: BitStream_Fast.h:48
void Byte_Align()
Definition: BitStream_Fast.h:386
#define NULL
Definition: HTTPClientWrapper.h:97
int32u Get4(int8u HowMany)
Definition: BitStream_Fast.h:147
int16u Get2(int8u HowMany)
Definition: BitStream_Fast.h:104
Definition: BitStream.h:23
int8u Peek1(int8u HowMany)
Definition: BitStream_Fast.h:251
int32u Peek4(int8u HowMany)
Definition: BitStream_Fast.h:323
BitStream_Fast()
Definition: BitStream_Fast.h:33
size_t OffsetBeforeLastCall_Get() const
Definition: BitStream_Fast.h:401
Definition: BitStream_Fast.h:30
size_t Offset_Get() const
Definition: BitStream_Fast.h:391
bool PeekB()
Definition: BitStream_Fast.h:236
size_t BitOffset_Get() const
Definition: BitStream_Fast.h:396
void Attach(const int8u *Buffer_, size_t Size_)
Definition: BitStream_Fast.h:41
int8u Get1(int8u HowMany)
Definition: BitStream_Fast.h:69
bool BufferUnderRun
Definition: BitStream_Fast.h:412
int16u Peek2(int8u HowMany)
Definition: BitStream_Fast.h:281
int64u Get8(int8u HowMany)
Definition: BitStream_Fast.h:197
int64u Peek8(int8u HowMany)
Definition: BitStream_Fast.h:376
void Skip(size_t HowMany)
Definition: BitStream_Fast.h:215