aboutsummaryrefslogtreecommitdiffstats
path: root/src/bitstream/bitstream.h
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