// Copyright 2024-2026, Amlal El Mahrouss (amlal@nekernel.org) // Licensed under the Apache License, Version 2.0 (see LICENSE file) // Official repository: https://github.com/ne-foss-org/nekernel #ifndef NEKIT_STREAM_H #define NEKIT_STREAM_H #include #include #include namespace Kernel { template class Stream final { public: explicit Stream(Ref ref) : fStream(ref) {} ~Stream() = default; NE_COPY_DEFAULT(Stream) template friend Stream& operator>>(Stream& Ks, Ref& Buf) { Ks.fKind = Ks.fStream->In(Buf); return *Ks; } template friend Stream& operator<<(Stream& Ks, Ref& Buf) { *Ks = Ks.fStream->Out(Buf.Leak()); Ks.fKind = Buf; return *Ks; } Ref& AsStreamTrait() { return fStream; } Ref& AsType() { return fKind; } private: Ref fStream; Ref fKind; }; template using UnbufferedStream = Stream; template using BufferedStream = Stream; } // namespace Kernel #endif