[*] Improved AuByteBuffer structure
This commit is contained in:
parent
a7033c40e2
commit
bcb007ebe8
@ -8,6 +8,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <Aurora/Locale/ECodePage.hpp>
|
#include <Aurora/Locale/ECodePage.hpp>
|
||||||
|
#include <Aurora/Utility/PrivData.hpp>
|
||||||
|
|
||||||
namespace Aurora::Memory
|
namespace Aurora::Memory
|
||||||
{
|
{
|
||||||
@ -44,6 +45,12 @@ namespace Aurora::Memory
|
|||||||
*/
|
*/
|
||||||
struct ByteBuffer
|
struct ByteBuffer
|
||||||
{
|
{
|
||||||
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
// User storage: //
|
||||||
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
AURT_ADD_USR_DATA;
|
||||||
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
// Stable ByteBuffer ABI Header; length and read/write head pointers //
|
// Stable ByteBuffer ABI Header; length and read/write head pointers //
|
||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
@ -56,32 +63,38 @@ namespace Aurora::Memory
|
|||||||
|
|
||||||
/// Buffer pointer
|
/// Buffer pointer
|
||||||
AuUInt8 *base {};
|
AuUInt8 *base {};
|
||||||
/// Stream pointer
|
/// Read stream pointer
|
||||||
AuUInt8 *readPtr {};
|
AuUInt8 *readPtr {};
|
||||||
/// Stream pointer
|
/// Write stream pointer
|
||||||
AuUInt8 *writePtr {};
|
AuUInt8 *writePtr {};
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
// Stable ByteBuffer ABI Header; u32 flags //
|
// Memory protection
|
||||||
|
// (resize/free/etc fails when this value is not zero. free-during-use protection)
|
||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
/// Is ring buffer?
|
|
||||||
AuUInt8 flagCircular : 1 {};
|
|
||||||
|
|
||||||
/// Should resize linear buffer to accommodate additional writes
|
|
||||||
AuUInt8 flagExpandable : 1 {};
|
|
||||||
|
|
||||||
AuUInt8 flagReadError : 1 {};
|
|
||||||
AuUInt8 flagWriteError : 1 {};
|
|
||||||
AuUInt8 flagNoFree : 1 {};
|
|
||||||
AuUInt8 flagNoRealloc: 1 {};
|
|
||||||
AuUInt8 flagAlwaysExpandable : 1 {};
|
|
||||||
// TODO: flag: allow circular overrun to allow for 100% access of the buffer from either read head
|
|
||||||
// - implicit padding
|
|
||||||
AuUInt8 scaleSize {};//
|
|
||||||
AuUInt8 alignment {};
|
|
||||||
AuAUInt32 uInUseCounter { 0 };
|
AuAUInt32 uInUseCounter { 0 };
|
||||||
///////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
// Stable ByteBuffer ABI Header; u8 flags //
|
||||||
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
AuUInt8 flagCircular : 1 {}; /// Is ring buffer?
|
||||||
|
AuUInt8 flagExpandable : 1 {}; /// Should resize linear buffer to accommodate additional writes
|
||||||
|
AuUInt8 flagReadError : 1 {}; /// Has error? Has read error?
|
||||||
|
AuUInt8 flagWriteError : 1 {}; /// Has error? Has write error?
|
||||||
|
AuUInt8 flagNoFree : 1 {}; /// Prevents all free operations
|
||||||
|
AuUInt8 flagNoRealloc : 1 {}; /// Prevents a subset of free options, specifically realloc, operations
|
||||||
|
AuUInt8 flagAlwaysExpandable : 1 {}; /// Internal flag. Do not use.
|
||||||
|
AuUInt8 flagReserveA : 1 {}; /// Placeholder
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
// Special flags/values
|
||||||
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
AuUInt8 alignment {}; // Internal value: keeps track of explicit Allocate of alignment values
|
||||||
|
AuUInt8 scaleSize {}; // TODO:
|
||||||
|
///////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Move constructor
|
* @brief Move constructor
|
||||||
* @param buffer
|
* @param buffer
|
||||||
|
@ -94,7 +94,8 @@ namespace Aurora::Utility
|
|||||||
inline void PrivateUserDataClear()\
|
inline void PrivateUserDataClear()\
|
||||||
{\
|
{\
|
||||||
AuResetMember(this->_auReservedUserData.pData);\
|
AuResetMember(this->_auReservedUserData.pData);\
|
||||||
}
|
}\
|
||||||
|
public:
|
||||||
|
|
||||||
#define AURT_ADD_USR_DATA_EXP(exp) \
|
#define AURT_ADD_USR_DATA_EXP(exp) \
|
||||||
inline virtual AURT_PRIVATE_DATA_PTR PrivateUserDataGet()\
|
inline virtual AURT_PRIVATE_DATA_PTR PrivateUserDataGet()\
|
||||||
|
Loading…
Reference in New Issue
Block a user