blob: eb813cc3d6ad252da48f61b65b850ccee7c59df4 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
#pragma once
#include <vector>
#include <iostream>
namespace NBitStream {
static inline int MakeSign(int val, unsigned bits) {
unsigned shift = 8 * sizeof(int) - bits;
union { unsigned u; int s; } v = { (unsigned) val << shift };
return v.s >> shift;
}
class TBitStream {
std::vector<char> Buf;
int BitsUsed = 0;
int ReadPos = 0;
public:
TBitStream(const char* buf, int size);
TBitStream();
void Write(unsigned long long val, int n);
unsigned long long Read(int n);
unsigned long long GetSizeInBits() const;
uint32_t GetBufSize() const { return Buf.size(); };
const std::vector<char>& GetBytes() const {
return Buf;
}
};
} //NBitStream
|