mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 22:37:03 +00:00
[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:
parent
93a8a0c22f
commit
0e630a3639
2 changed files with 10 additions and 2 deletions
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue