/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: ByteBufferStreamPair.cpp Date: 2022-6-6 Author: Reece ***/ #include #include #include "ByteBufferStreamPair.hpp" namespace Aurora::IO { ByteBufferStreamPair::ByteBufferStreamPair(const AuSPtr &buffer) : buffer(buffer), reader(buffer), writer(buffer), seeker(buffer) { } AuSPtr ByteBufferStreamPair::ToStreamReader() { return AuSPtr(AuSharedFromThis(), AuStaticCast(&this->reader)); } AuSPtr ByteBufferStreamPair::ToSeekingReader() { if (this->buffer->flagCircular) { SysPushErrorIO("ring buffer must not be seekable"); return {}; } return AuSPtr(AuSharedFromThis(), AuStaticCast(&this->seeker)); } AuSPtr ByteBufferStreamPair::ToStreamWriter() { return AuSPtr(AuSharedFromThis(), AuStaticCast(&this->writer)); } AuSPtr ByteBufferStreamPair::ToByteBuffer() { return this->buffer; } AUKN_SYM AuSPtr NewByteBufferPair() { auto scalable = AuMakeShared(); if (!scalable) { SysPushErrorMem(); return {}; } return AuMakeShared(scalable); } AUKN_SYM AuSPtr NewByteBufferPairEx(AuUInt length, bool permitResize) { auto buffer = AuMakeShared(length, false, permitResize); if (!buffer) { SysPushErrorMem(); return {}; } return AuMakeShared(buffer); } AUKN_SYM AuSPtr NewRingByteBuffer(AuUInt length) { auto buffer = AuMakeShared(length, false, false); if (!buffer) { SysPushErrorMem(); return {}; } return AuMakeShared(buffer); } }