/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: IProtocolStack.hpp Date: 2022-9-29 Author: Reece ***/ #pragma once namespace Aurora::IO::Protocol { struct ProtocolStack; struct IProtocolPiece { /** * @brief * @return */ virtual AuSPtr GetParent() = 0; /** * @brief * @return */ virtual AuSPtr GetNextPiece() = 0; /** * @brief * @param uOutputLength * @return */ virtual bool ReallocateDrainBuffer(AuUInt32 uOutputLength) = 0; /** * @brief Removes this piece from the stack */ virtual void Remove() = 0; /** * @brief * @return */ virtual AuSPtr ToInputWriter() = 0; /** * @brief Fetches an IStreamWriter representation of the next piece in the stack * @return */ virtual AuSPtr ToNextWriter() = 0; /** * @brief * @warning returns self shared reference * @return */ virtual AuSPtr GetNextPieceBuffer() = 0; /** * @brief * @return */ virtual AuSPtr GetExtendedInterceptor() = 0; /** * @brief * @return */ virtual AuSPtr GetShortPipeInterceptor() = 0; AURT_ADD_USR_DATA; }; }