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