[*] Update AuMemory::SharableByteBuffer to be useful with the transition to AuSPtr<AuMemoryViewXXX>'less APIs
This commit is contained in:
parent
3d652ed605
commit
e665720f24
@ -510,15 +510,16 @@ namespace Aurora::Memory
|
||||
|
||||
}
|
||||
|
||||
/// @deprecated (partially) (wont remove. AuSPtr<AuMemoryViewXXX>s are now an anti-pattern)
|
||||
inline AuSPtr<MemoryViewWrite> ToSharedWriteView()
|
||||
{
|
||||
MemoryViewWrite view = *this;
|
||||
MemoryViewWrite view = ByteBuffer::operator MemoryViewWrite();
|
||||
if (!view)
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
if (auto pView = AuMakeShared<MemoryViewWrite>(view.ptr, view.length, &this->uInUseCounter, AuSharedFromThis()))
|
||||
if (auto pView = AuMakeShared<MemoryViewWrite>(view.ptr, view.length, &this->uInUseCounter, this->GetSharedBlock()))
|
||||
{
|
||||
return pView;
|
||||
}
|
||||
@ -528,15 +529,16 @@ namespace Aurora::Memory
|
||||
}
|
||||
}
|
||||
|
||||
inline AuSPtr<MemoryViewRead> ToSharedReadView()
|
||||
/// @deprecated (partially) (wont remove. AuSPtr<AuMemoryViewXXX>s are now an anti-pattern)
|
||||
inline AuSPtr<MemoryViewRead> ToSharedReadView() const
|
||||
{
|
||||
MemoryViewRead view = *this;
|
||||
MemoryViewRead view = ByteBuffer::operator MemoryViewRead();
|
||||
if (!view)
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
if (auto pView = AuMakeShared<MemoryViewRead>(view.ptr, view.length, &this->uInUseCounter, AuSharedFromThis()))
|
||||
if (auto pView = AuMakeShared<MemoryViewRead>(view.ptr, view.length, (AuAUInt32 *)&this->uInUseCounter, this->GetSharedBlock()))
|
||||
{
|
||||
return pView;
|
||||
}
|
||||
@ -546,6 +548,28 @@ namespace Aurora::Memory
|
||||
}
|
||||
}
|
||||
|
||||
inline MemoryViewWrite ToSafeWriteView()
|
||||
{
|
||||
MemoryViewWrite view = ByteBuffer::operator MemoryViewWrite();
|
||||
if (!view)
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
return MemoryViewWrite(view.ptr, view.length, &this->uInUseCounter, this->GetSharedBlock());
|
||||
}
|
||||
|
||||
inline MemoryViewRead ToSafeReadView() const
|
||||
{
|
||||
MemoryViewRead view = ByteBuffer::operator MemoryViewRead();
|
||||
if (!view)
|
||||
{
|
||||
return {};
|
||||
}
|
||||
|
||||
return MemoryViewRead(view.ptr, view.length, (AuAUInt32 *)&this->uInUseCounter, this->GetSharedBlock());
|
||||
}
|
||||
|
||||
inline operator AuSPtr<MemoryViewWrite>()
|
||||
{
|
||||
return this->ToSharedWriteView();
|
||||
@ -555,6 +579,28 @@ namespace Aurora::Memory
|
||||
{
|
||||
return this->ToSharedReadView();
|
||||
}
|
||||
|
||||
inline operator MemoryViewWrite()
|
||||
{
|
||||
return this->ToSafeWriteView();
|
||||
}
|
||||
|
||||
inline operator MemoryViewRead() const
|
||||
{
|
||||
return this->ToSafeReadView();
|
||||
}
|
||||
|
||||
private:
|
||||
// TODO: under const methods, AuSharedFromThis, the static pointer cast, and the AuMemoryView constructor is hopelessly broken
|
||||
// I've always considered c++s constness fundamentally flawed and designed by idiots. I'm not sinking time into fixes these yet.
|
||||
// This should be just an AuSharedFromThis()
|
||||
// But, no, Java, C++, and everybody else gets constness wrong to solve a series of bugs * that can be solved with simple encapsulation *
|
||||
// (DOP + encapsulated API boundaries ftw)
|
||||
// I dont care to fix this, or use the stupid mutable keyword on the usage counter, for now. It's a waste of my time.
|
||||
AuSPtr<void> GetSharedBlock() const
|
||||
{
|
||||
return AuSPtr<void>(this->shared_from_this(), (void *)this);
|
||||
}
|
||||
};
|
||||
|
||||
static ByteBuffer NewResizableBuffer(AuUInt32 length = 0)
|
||||
|
Loading…
Reference in New Issue
Block a user