[0005] Implement ResetBitReader() method for ByteBuffer and get rid of random unintended read bugs

Signed-off-by: Yaki Khadafi <elsoldollo@gmail.com>
This commit is contained in:
Yaki Khadafi 2012-08-07 19:48:17 +03:00 committed by Antz
parent 93a8a0c22f
commit 0e630a3639
2 changed files with 10 additions and 2 deletions

View file

@ -166,6 +166,11 @@ class ByteBuffer
_bitpos = 8; _bitpos = 8;
} }
void ResetBitReader()
{
_bitpos = 8;
}
template <typename T> bool WriteBit(T bit) template <typename T> bool WriteBit(T bit)
{ {
--_bitpos; --_bitpos;
@ -187,8 +192,8 @@ class ByteBuffer
++_bitpos; ++_bitpos;
if (_bitpos > 7) if (_bitpos > 7)
{ {
_bitpos = 0;
_curbitval = read<uint8>(); _curbitval = read<uint8>();
_bitpos = 0;
} }
return ((_curbitval >> (7-_bitpos)) & 1) != 0; return ((_curbitval >> (7-_bitpos)) & 1) != 0;
@ -515,6 +520,7 @@ class ByteBuffer
ByteBuffer& read_skip(size_t skip) ByteBuffer& read_skip(size_t skip)
{ {
ResetBitReader();
if(_rpos + skip > size()) if(_rpos + skip > size())
throw ByteBufferException(false, _rpos, skip, size()); throw ByteBufferException(false, _rpos, skip, size());
_rpos += skip; _rpos += skip;
@ -524,6 +530,7 @@ class ByteBuffer
template <typename T> T read() template <typename T> T read()
{ {
ResetBitReader();
T r = read<T>(_rpos); T r = read<T>(_rpos);
_rpos += sizeof(T); _rpos += sizeof(T);
return r; return r;
@ -540,6 +547,7 @@ class ByteBuffer
ByteBuffer& read(uint8* dest, size_t len) ByteBuffer& read(uint8* dest, size_t len)
{ {
ResetBitReader();
if(_rpos + len > size()) if(_rpos + len > size())
throw ByteBufferException(false, _rpos, len, size()); throw ByteBufferException(false, _rpos, len, size());
memcpy(dest, &_storage[_rpos], len); memcpy(dest, &_storage[_rpos], len);

View file

@ -1,4 +1,4 @@
#ifndef __REVISION_NR_H__ #ifndef __REVISION_NR_H__
#define __REVISION_NR_H__ #define __REVISION_NR_H__
#define REVISION_NR "0004" #define REVISION_NR "0005"
#endif // __REVISION_NR_H__ #endif // __REVISION_NR_H__