/* ------------------------------------------- Copyright Mahrouss Logic ------------------------------------------- */ #pragma once #include #include namespace NewOS { 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 NewOS