15#ifndef ZenBitStream_LEH
16#define ZenBitStream_LEH
34 ptr_BeforeLastCall(
NULL),
39 ptr_BeforeLastCall(
NULL) {
43 void Attach(
const int8u* Buffer_,
size_t Size_)
52 int32u
Get (
size_t HowMany)
55 static const int32u Mask[33]={
57 0x00000001, 0x00000003, 0x00000007, 0x0000000f,
58 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff,
59 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff,
60 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff,
61 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff,
62 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff,
63 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff,
64 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff,
67 if (HowMany==0 || HowMany>32)
70 ptr_BeforeLastCall=ptr;
72 unsigned long m=Mask[HowMany];
76 if(endbyte+4>=storage){
78 if(endbyte*8+(
long)HowMany>storage*8){
86 ret|=ptr[1]<<(8-endbit);
88 ret|=ptr[2]<<(16-endbit);
90 ret|=ptr[3]<<(24-endbit);
91 if(HowMany>32 && endbit){
92 ret|=ptr[4]<<(32-endbit);
100 endbyte+=(long)HowMany/8;
101 endbit=(long)HowMany&7;
129 return storage*8-(endbyte*8+endbit);
150 return ptr_BeforeLastCall-buffer;
157 const unsigned char *buffer;
158 const unsigned char *ptr;
159 const unsigned char *ptr_BeforeLastCall;
#define NULL
Definition: HTTPClientWrapper.h:98
Definition: BitStream_LE.h:27
int32u Remain()
Definition: BitStream_LE.h:127
void Skip(size_t bits)
Definition: BitStream_LE.h:108
void Byte_Align()
Definition: BitStream_LE.h:132
BitStream_LE()
Definition: BitStream_LE.h:29
BitStream_LE(const int8u *Buffer_, size_t Size_)
Definition: BitStream_LE.h:38
size_t BitOffset_Get()
Definition: BitStream_LE.h:143
void Attach(const int8u *Buffer_, size_t Size_)
Definition: BitStream_LE.h:43
int32u Get(size_t HowMany)
Definition: BitStream_LE.h:52
size_t OffsetBeforeLastCall_Get()
Definition: BitStream_LE.h:148
size_t Offset_Get()
Definition: BitStream_LE.h:138
Definition: BitStream.h:31
Definition: BitStream.h:24