15#ifndef ZenBitStream_FastH
16#define ZenBitStream_FastH
27 #define MIN(a, b) (((a) < (b)) ? (a) : (b))
39 Buffer_Size = Size_ * 8;
40 Buffer_Size_Init = Size_ * 8;
45 void Attach(
const int8u* Buffer_,
size_t Size_)
48 Buffer_Size=Buffer_Size_Init=Size_*8;
57 return ((LastByte>>(Buffer_Size%8))&0x1)?
true:
false;
70 return (LastByte&0x80)?
true:
false;
76 static const int8u Mask[9]=
79 0x01, 0x03, 0x07, 0x0f,
80 0x1f, 0x3f, 0x7f, 0xff,
83 if (HowMany<=(Buffer_Size%8))
86 return (LastByte>>(Buffer_Size%8))&Mask[HowMany];
89 if (HowMany>Buffer_Size)
96 int8u NewBits=HowMany-(Buffer_Size%8);
100 ToReturn=LastByte<<NewBits;
103 Buffer_Size-=HowMany;
104 ToReturn|=(LastByte>>(Buffer_Size%8))&Mask[NewBits];
105 return ToReturn&Mask[HowMany];
111 static const int16u Mask[17]=
114 0x0001, 0x0003, 0x0007, 0x000f,
115 0x001f, 0x003f, 0x007f, 0x00ff,
116 0x01ff, 0x03ff, 0x07ff, 0x0fff,
117 0x1fff, 0x3fff, 0x7fff, 0xffff,
120 if (HowMany<=(Buffer_Size%8))
122 Buffer_Size-=HowMany;
123 return (LastByte>>(Buffer_Size%8))&Mask[HowMany];
126 if (HowMany>Buffer_Size)
133 int8u NewBits=HowMany-(Buffer_Size%8);
137 ToReturn=LastByte<<NewBits;
141 ToReturn|=*Buffer<<NewBits;
146 Buffer_Size-=HowMany;
147 ToReturn|=(LastByte>>(Buffer_Size%8))&Mask[NewBits];
148 return ToReturn&Mask[HowMany];
154 static const int32u Mask[33]=
157 0x00000001, 0x00000003, 0x00000007, 0x0000000f,
158 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff,
159 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff,
160 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff,
161 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff,
162 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff,
163 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff,
164 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff,
167 if (HowMany<=(Buffer_Size%8))
169 Buffer_Size-=HowMany;
170 return (LastByte>>(Buffer_Size%8))&Mask[HowMany];
173 if (HowMany>Buffer_Size)
180 int8u NewBits=HowMany-(Buffer_Size%8);
184 ToReturn=LastByte<<NewBits;
185 switch ((NewBits-1)>>3)
188 ToReturn|=*(Buffer++)<<NewBits;
191 ToReturn|=*(Buffer++)<<NewBits;
194 ToReturn|=*(Buffer++)<<NewBits;
196 LastByte=*(Buffer++);
197 Buffer_Size-=HowMany;
198 ToReturn|=(LastByte>>(Buffer_Size%8))&Mask[NewBits];
199 return ToReturn&Mask[HowMany];
206 int8u HowMany1, HowMany2;
207 int64u Value1, Value2;
212 HowMany2=HowMany-HowMany1;
213 Value1=
Get4(HowMany1);
214 Value2=
Get4(HowMany2);
217 return Value1*0x100000000LL+Value2;
222 if (HowMany<=(Buffer_Size%8))
224 Buffer_Size-=HowMany;
228 if (HowMany>Buffer_Size)
235 Buffer+=(HowMany-(Buffer_Size%8)-1)>>3;
238 Buffer_Size-=HowMany;
244 return ((LastByte>>((Buffer_Size-1)%8))&0x1)?
true:
false;
253 return ((*Buffer)&0x80)?
true:
false;
259 static const int8u Mask[9]=
262 0x01, 0x03, 0x07, 0x0f,
263 0x1f, 0x3f, 0x7f, 0xff,
266 if (HowMany<=(Buffer_Size%8))
267 return (LastByte>>((Buffer_Size-HowMany)%8))&Mask[HowMany];
269 if (HowMany>Buffer_Size)
276 int8u NewBits=HowMany-(Buffer_Size%8);
280 ToReturn=LastByte<<NewBits;
281 ToReturn|=((*Buffer)>>((Buffer_Size-HowMany)%8))&Mask[NewBits];
283 return ToReturn&Mask[HowMany];
289 static const int16u Mask[17]=
292 0x0001, 0x0003, 0x0007, 0x000f,
293 0x001f, 0x003f, 0x007f, 0x00ff,
294 0x01ff, 0x03ff, 0x07ff, 0x0fff,
295 0x1fff, 0x3fff, 0x7fff, 0xffff,
298 if (HowMany<=(Buffer_Size%8))
299 return (LastByte>>((Buffer_Size-HowMany)%8))&Mask[HowMany];
301 if (HowMany>Buffer_Size)
308 const int8u* Buffer_Save=Buffer;
310 int8u NewBits=HowMany-(Buffer_Size%8);
314 ToReturn=LastByte<<NewBits;
318 ToReturn|=*Buffer<<NewBits;
321 ToReturn|=((*Buffer)>>((Buffer_Size-HowMany)%8))&Mask[NewBits];
325 return ToReturn&Mask[HowMany];
331 static const int32u Mask[33]=
334 0x00000001, 0x00000003, 0x00000007, 0x0000000f,
335 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff,
336 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff,
337 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff,
338 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff,
339 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff,
340 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff,
341 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff,
344 if (HowMany<=(Buffer_Size%8))
345 return (LastByte>>((Buffer_Size-HowMany)%8))&Mask[HowMany];
347 if (HowMany>Buffer_Size)
354 const int8u* Buffer_Save=Buffer;
356 int8u NewBits=HowMany-(Buffer_Size%8);
360 ToReturn=LastByte<<NewBits;
361 switch ((NewBits-1)>>3)
364 ToReturn|=*Buffer<<NewBits;
368 ToReturn|=*Buffer<<NewBits;
372 ToReturn|=*Buffer<<NewBits;
375 ToReturn|=((*Buffer)>>((Buffer_Size-HowMany)%8))&Mask[NewBits];
379 return ToReturn&Mask[HowMany];
384 return (int64u)
Peek4(HowMany);
394 Skip (Buffer_Size%8);
399 return (Buffer_Size_Init-Buffer_Size)/8;
404 return Buffer_Size%8;
409 return Buffer_Size%8;
422 size_t Buffer_Size_Init;
#define NULL
Definition: HTTPClientWrapper.h:98
Definition: BitStream_Fast.h:31
BitStream_Fast(const int8u *Buffer_, size_t Size_)
Definition: BitStream_Fast.h:38
int64u Get8(int8u HowMany)
Definition: BitStream_Fast.h:202
void Skip(size_t HowMany)
Definition: BitStream_Fast.h:220
int32u Get4(int8u HowMany)
Definition: BitStream_Fast.h:151
bool GetB()
Definition: BitStream_Fast.h:52
size_t OffsetBeforeLastCall_Get() const
Definition: BitStream_Fast.h:407
int16u Peek2(int8u HowMany)
Definition: BitStream_Fast.h:286
bool BufferUnderRun
Definition: BitStream_Fast.h:425
size_t BitOffset_Get() const
Definition: BitStream_Fast.h:402
void Resize(size_t Size_)
Definition: BitStream_Fast.h:412
int8u Peek1(int8u HowMany)
Definition: BitStream_Fast.h:256
bool PeekB()
Definition: BitStream_Fast.h:241
~BitStream_Fast()
Definition: BitStream_Fast.h:43
size_t Offset_Get() const
Definition: BitStream_Fast.h:397
int64u Peek8(int8u HowMany)
Definition: BitStream_Fast.h:382
void Byte_Align()
Definition: BitStream_Fast.h:392
void Attach(const int8u *Buffer_, size_t Size_)
Definition: BitStream_Fast.h:45
int32u Peek4(int8u HowMany)
Definition: BitStream_Fast.h:328
int16u Get2(int8u HowMany)
Definition: BitStream_Fast.h:108
BitStream_Fast()
Definition: BitStream_Fast.h:33
size_t Remain() const
Definition: BitStream_Fast.h:387
int8u Get1(int8u HowMany)
Definition: BitStream_Fast.h:73
Definition: BitStream.h:24