add last backwards-compatible version
This commit is contained in:
@@ -2,11 +2,11 @@
|
||||
|
||||
namespace bitreader_helper {
|
||||
|
||||
inline static size_t extract_bit(const uint8_t * p_stream,size_t p_offset) {
|
||||
inline static size_t extract_bit(const t_uint8 * p_stream,size_t p_offset) {
|
||||
return (p_stream[p_offset>>3] >> (7-(p_offset&7)))&1;
|
||||
}
|
||||
|
||||
inline static size_t extract_int(const uint8_t * p_stream,size_t p_base,size_t p_width) {
|
||||
inline static size_t extract_int(const t_uint8 * p_stream,size_t p_base,size_t p_width) {
|
||||
size_t ret = 0;
|
||||
size_t offset = p_base;
|
||||
for(size_t bit=0;bit<p_width;bit++) {
|
||||
@@ -15,19 +15,6 @@ namespace bitreader_helper {
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
inline static void write_bit( uint8_t * p_stream, size_t p_offset, size_t bit ) {
|
||||
size_t bshift = 7 - (p_offset&7);
|
||||
size_t mask = 1 << bshift;
|
||||
uint8_t & b = p_stream[p_offset>>3];
|
||||
b = (b & ~mask) | ((bit&1) << bshift);
|
||||
}
|
||||
inline static void write_int( uint8_t * p_stream, size_t p_base, size_t p_width, size_t p_value) {
|
||||
size_t offset = p_base;
|
||||
size_t val = p_value;
|
||||
for( size_t bit = 0; bit < p_width; ++ bit ) {
|
||||
write_bit( p_stream, offset++, val >> (p_width - bit - 1));
|
||||
}
|
||||
}
|
||||
|
||||
class bitreader
|
||||
{
|
||||
@@ -42,31 +29,18 @@ public:
|
||||
m_bitptr += p_bits;
|
||||
}
|
||||
|
||||
|
||||
template<typename t_ret>
|
||||
t_ret peek_t(t_size p_bits) const {
|
||||
size_t ptr = m_bitptr;
|
||||
t_ret read_t(t_size p_bits) {
|
||||
t_ret ret = 0;
|
||||
for(t_size bit=0;bit<p_bits;bit++)
|
||||
{
|
||||
ret <<= 1;
|
||||
ret |= (m_ptr[ptr >>3] >> (7-(ptr &7)))&1;
|
||||
ptr++;
|
||||
ret |= (m_ptr[m_bitptr>>3] >> (7-(m_bitptr&7)))&1;
|
||||
m_bitptr++;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
template<typename t_ret>
|
||||
t_ret read_t(t_size p_bits) {
|
||||
t_ret ret = peek_t<t_ret>(p_bits);
|
||||
skip(p_bits);
|
||||
return ret;
|
||||
}
|
||||
|
||||
size_t peek(size_t bits) const {
|
||||
return peek_t<size_t>(bits);
|
||||
}
|
||||
|
||||
t_size read(t_size p_bits) {return read_t<t_size>(p_bits);}
|
||||
|
||||
inline t_size get_bitptr() const {return m_bitptr;}
|
||||
@@ -131,10 +105,6 @@ public:
|
||||
m_reader.skip(p_bits);
|
||||
}
|
||||
|
||||
size_t peek(size_t bits) {
|
||||
if (bits > m_remaining) throw exception_io_data_truncation();
|
||||
return m_reader.peek(bits);
|
||||
}
|
||||
t_size read(t_size p_bits)
|
||||
{
|
||||
if (p_bits > m_remaining) throw exception_io_data_truncation();
|
||||
@@ -151,4 +121,4 @@ inline static t_size extract_bits(const t_uint8 * p_buffer,t_size p_base,t_size
|
||||
return bitreader(p_buffer,p_base).read(p_count);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user