From c2eaddc457b27f181725b9f8dfcd97aa9fdbc82d Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Sat, 7 Mar 2026 11:25:38 +0100 Subject: [FEAT] Buffered and Unbuffered stream types. Signed-off-by: Amlal El Mahrouss --- doc/requirements/BufferedStream.md | 19 +++++++++++++++++++ doc/requirements/UnbufferedStream.md | 19 +++++++++++++++++++ src/kernel/NeKit/Stream.h | 10 +++++++++- 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 doc/requirements/BufferedStream.md create mode 100644 doc/requirements/UnbufferedStream.md diff --git a/doc/requirements/BufferedStream.md b/doc/requirements/BufferedStream.md new file mode 100644 index 00000000..1ac01a0f --- /dev/null +++ b/doc/requirements/BufferedStream.md @@ -0,0 +1,19 @@ +# BufferedStream + +## Abstract: + +One type that has to satisfy a BufferedStream operator and type. + +## Rationale: + +- HPC systems. +- I/O systems. +- HFT systems. + +## Example: + +```cpp +BStream; +``` + +BOperator must not flush at all times, but have the option to. diff --git a/doc/requirements/UnbufferedStream.md b/doc/requirements/UnbufferedStream.md new file mode 100644 index 00000000..80536b44 --- /dev/null +++ b/doc/requirements/UnbufferedStream.md @@ -0,0 +1,19 @@ +# BufferedStream + +## Abstract: + +One type that has to satisfy an unbuffered Stream operator and type. + +## Rationale: + +- Fast and direct-flush operations. +- High-Throughput systems. + +## Example: + +```cpp +UBStream; +``` + +UBOperator must flush at all times! + diff --git a/src/kernel/NeKit/Stream.h b/src/kernel/NeKit/Stream.h index d69df6d0..b24038c1 100644 --- a/src/kernel/NeKit/Stream.h +++ b/src/kernel/NeKit/Stream.h @@ -1,4 +1,4 @@ -// Copyright 2024-2025, Amlal El Mahrouss (amlal@nekernel.org) +// 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 @@ -9,6 +9,7 @@ #include namespace Kernel { + template class Stream final { public: @@ -40,6 +41,13 @@ class Stream final { Ref fStream; Ref fKind; }; + +template +using UnbufferedStream = Stream; + +template +using BufferedStream = Stream; + } // namespace Kernel #endif -- cgit v1.2.3 From 6432b4b5ba5a9f09bf2efa337e91b596236f6a37 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Sat, 7 Mar 2026 11:27:49 +0100 Subject: [CHORE] Fix readme for UnbufferedStream. Signed-off-by: Amlal El Mahrouss --- doc/requirements/UnbufferedStream.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/requirements/UnbufferedStream.md b/doc/requirements/UnbufferedStream.md index 80536b44..d3bfd8eb 100644 --- a/doc/requirements/UnbufferedStream.md +++ b/doc/requirements/UnbufferedStream.md @@ -1,4 +1,4 @@ -# BufferedStream +# UnbufferedStream ## Abstract: -- cgit v1.2.3 From c4a3fb87a459ed5afb3a0234d6d29a6c161348c7 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Sat, 7 Mar 2026 11:31:11 +0100 Subject: [CHORE] Assign Ks when calling Out. Signed-off-by: Amlal El Mahrouss --- src/kernel/NeKit/Stream.h | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/kernel/NeKit/Stream.h b/src/kernel/NeKit/Stream.h index b24038c1..0fac23c1 100644 --- a/src/kernel/NeKit/Stream.h +++ b/src/kernel/NeKit/Stream.h @@ -5,6 +5,7 @@ #ifndef NEKIT_STREAM_H #define NEKIT_STREAM_H +#include #include #include @@ -14,11 +15,9 @@ template class Stream final { public: explicit Stream(Ref ref) : fStream(ref) {} - ~Stream() = default; - Stream& operator=(const Stream&) = default; - Stream(const Stream&) = default; + NE_COPY_DEFAULT(Stream) template friend Stream& operator>>(Stream& Ks, Ref& Buf) { @@ -29,7 +28,7 @@ class Stream final { template friend Stream& operator<<(Stream& Ks, Ref& Buf) { Ks.fKind = Buf; - Ks.fStream->Out(Buf.Leak()); + *Ks = Ks.fStream->Out(Buf.Leak()); return *Ks; } -- cgit v1.2.3 From 3edb3cb672aa5008225a40020bbc707730897cab Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Sat, 7 Mar 2026 11:32:00 +0100 Subject: [FIX] Assign fKind after calling Out. Signed-off-by: Amlal El Mahrouss --- src/kernel/NeKit/Stream.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/kernel/NeKit/Stream.h b/src/kernel/NeKit/Stream.h index 0fac23c1..ad458d5a 100644 --- a/src/kernel/NeKit/Stream.h +++ b/src/kernel/NeKit/Stream.h @@ -27,8 +27,8 @@ class Stream final { template friend Stream& operator<<(Stream& Ks, Ref& Buf) { - Ks.fKind = Buf; *Ks = Ks.fStream->Out(Buf.Leak()); + Ks.fKind = Buf; return *Ks; } -- cgit v1.2.3