Core/SerializationContext: Replaced currentBitPos and currentByte by [read|write][BitPos][Byte] to handle properly bit reading/writing
This commit is contained in:
parent
33fb70b65b
commit
550176e198
|
|
@ -107,6 +107,7 @@ Nazara Engine:
|
||||||
- Added AbstractViewer::Project and AbstractViewer::Unproject methods
|
- Added AbstractViewer::Project and AbstractViewer::Unproject methods
|
||||||
- Added AbstractViewer::ProjectDepth method
|
- Added AbstractViewer::ProjectDepth method
|
||||||
- Fixed SocketPoller not be able to recover from some errors (like invalid sockets and such)
|
- Fixed SocketPoller not be able to recover from some errors (like invalid sockets and such)
|
||||||
|
- ⚠️ Replaced currentBitPos and currentByte fields by [read|write][BitPos][Byte] to handle properly bit reading/writing.
|
||||||
|
|
||||||
Nazara Development Kit:
|
Nazara Development Kit:
|
||||||
- Added ImageWidget (#139)
|
- Added ImageWidget (#139)
|
||||||
|
|
|
||||||
|
|
@ -219,17 +219,17 @@ namespace Nz
|
||||||
*/
|
*/
|
||||||
inline bool Serialize(SerializationContext& context, bool value, TypeTag<bool>)
|
inline bool Serialize(SerializationContext& context, bool value, TypeTag<bool>)
|
||||||
{
|
{
|
||||||
if (context.currentBitPos == 8)
|
if (context.writeBitPos == 8)
|
||||||
{
|
{
|
||||||
context.currentBitPos = 0;
|
context.writeBitPos = 0;
|
||||||
context.currentByte = 0;
|
context.writeByte = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value)
|
if (value)
|
||||||
context.currentByte |= 1 << context.currentBitPos;
|
context.writeByte |= 1 << context.writeBitPos;
|
||||||
|
|
||||||
if (++context.currentBitPos >= 8)
|
if (++context.writeBitPos >= 8)
|
||||||
return Serialize(context, context.currentByte, TypeTag<UInt8>());
|
return Serialize(context, context.writeByte, TypeTag<UInt8>());
|
||||||
else
|
else
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -291,18 +291,18 @@ namespace Nz
|
||||||
*/
|
*/
|
||||||
inline bool Unserialize(SerializationContext& context, bool* value, TypeTag<bool>)
|
inline bool Unserialize(SerializationContext& context, bool* value, TypeTag<bool>)
|
||||||
{
|
{
|
||||||
if (context.currentBitPos == 8)
|
if (context.readBitPos == 8)
|
||||||
{
|
{
|
||||||
if (!Unserialize(context, &context.currentByte, TypeTag<UInt8>()))
|
if (!Unserialize(context, &context.readByte, TypeTag<UInt8>()))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
context.currentBitPos = 0;
|
context.readBitPos = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (value)
|
if (value)
|
||||||
*value = (context.currentByte & (1 << context.currentBitPos)) != 0;
|
*value = (context.readByte & (1 << context.readBitPos)) != 0;
|
||||||
|
|
||||||
context.currentBitPos++;
|
context.readBitPos++;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -341,7 +341,7 @@ namespace Nz
|
||||||
{
|
{
|
||||||
NazaraAssert(value, "Invalid data pointer");
|
NazaraAssert(value, "Invalid data pointer");
|
||||||
|
|
||||||
context.ResetBitPosition();
|
context.ResetReadBitPosition();
|
||||||
|
|
||||||
if (context.stream->Read(value, sizeof(T)) == sizeof(T))
|
if (context.stream->Read(value, sizeof(T)) == sizeof(T))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -20,11 +20,14 @@ namespace Nz
|
||||||
{
|
{
|
||||||
Stream* stream;
|
Stream* stream;
|
||||||
Endianness endianness = Endianness_BigEndian; //< Default to Big Endian encoding
|
Endianness endianness = Endianness_BigEndian; //< Default to Big Endian encoding
|
||||||
UInt8 currentBitPos = 8; //< 8 means no bit is currently wrote
|
UInt8 readBitPos = 8; //< 8 means no bit is currently read
|
||||||
UInt8 currentByte; //< Undefined value, will be initialized at the first bit write
|
UInt8 readByte; //< Undefined value, will be initialized at the first bit read
|
||||||
|
UInt8 writeBitPos = 8; //< 8 means no bit is currently wrote
|
||||||
|
UInt8 writeByte; //< Undefined value, will be initialized at the first bit write
|
||||||
|
|
||||||
void FlushBits();
|
void FlushBits();
|
||||||
inline void ResetBitPosition();
|
inline void ResetReadBitPosition();
|
||||||
|
inline void ResetWriteBitPosition();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,16 +7,24 @@
|
||||||
namespace Nz
|
namespace Nz
|
||||||
{
|
{
|
||||||
/*!
|
/*!
|
||||||
* \brief Reset the current bit cursor
|
* \brief Reset the current read bit cursor
|
||||||
|
*/
|
||||||
|
inline void SerializationContext::ResetReadBitPosition()
|
||||||
|
{
|
||||||
|
readBitPos = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Reset the current read bit cursor
|
||||||
|
|
||||||
* \remark This function only reset the cursor position, it doesn't do any writing
|
* \remark This function only reset the cursor position, it doesn't do any writing
|
||||||
if you wish to write all bits and reset bit position, call FlushBits
|
if you wish to write all bits and reset bit position, call FlushBits
|
||||||
|
|
||||||
\see FlushBits
|
\see FlushBits
|
||||||
*/
|
*/
|
||||||
inline void SerializationContext::ResetBitPosition()
|
inline void SerializationContext::ResetWriteBitPosition()
|
||||||
{
|
{
|
||||||
currentBitPos = 8;
|
writeBitPos = 8;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,16 +19,16 @@ namespace Nz
|
||||||
/*!
|
/*!
|
||||||
* Write bits to the stream (if any) and reset the current bit cursor
|
* Write bits to the stream (if any) and reset the current bit cursor
|
||||||
|
|
||||||
* \see ResetBitPosition
|
* \see ResetWriteBitPosition
|
||||||
*/
|
*/
|
||||||
void SerializationContext::FlushBits()
|
void SerializationContext::FlushBits()
|
||||||
{
|
{
|
||||||
if (currentBitPos != 8)
|
if (writeBitPos != 8)
|
||||||
{
|
{
|
||||||
ResetBitPosition();
|
ResetWriteBitPosition();
|
||||||
|
|
||||||
// Serialize will reset the bit position
|
// Serialize will reset the bit position
|
||||||
if (!Serialize(*this, currentByte))
|
if (!Serialize(*this, writeByte))
|
||||||
NazaraWarning("Failed to flush bits");
|
NazaraWarning("Failed to flush bits");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue