diff options
author | Aki <please@ignore.pl> | 2024-03-18 00:39:44 +0100 |
---|---|---|
committer | Aki <please@ignore.pl> | 2024-03-18 00:40:11 +0100 |
commit | 2aa26759e12da36d68641ea3abda9b53292a2cbd (patch) | |
tree | 99174f52d82082b5d6307c819748ec53ac2b50d2 /FoundationEx/include | |
parent | 7117768feb2b2acb8d2498229cbaa4afbad377f1 (diff) | |
download | starshatter-2aa26759e12da36d68641ea3abda9b53292a2cbd.zip starshatter-2aa26759e12da36d68641ea3abda9b53292a2cbd.tar.gz starshatter-2aa26759e12da36d68641ea3abda9b53292a2cbd.tar.bz2 |
Bulk busy work towards Reader replacement to inject into DataLoader
Diffstat (limited to 'FoundationEx/include')
-rw-r--r-- | FoundationEx/include/starshatter/foundation/reader.h | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/FoundationEx/include/starshatter/foundation/reader.h b/FoundationEx/include/starshatter/foundation/reader.h new file mode 100644 index 0000000..7ec81b4 --- /dev/null +++ b/FoundationEx/include/starshatter/foundation/reader.h @@ -0,0 +1,83 @@ +/* Starshatter: The Open Source Project + Copyright (c) 2021-2024, Starshatter: The Open Source Project Contributors + Copyright (c) 2011-2012, Starshatter OpenSource Distribution Contributors + Copyright (c) 1997-2006, Destroyer Studios LLC. +*/ + +#pragma once + +#include <cstddef> +#include <memory> + + +namespace starshatter +{ +namespace foundation +{ + + +using Count = std::size_t; +using Offset = std::ptrdiff_t; + + +enum class Direction +{ + Start, + End, + Current, +}; + + +template <typename Char> +struct BaseReader +{ + virtual ~BaseReader() = default; + virtual bool valid() const = 0; + virtual Count available() const = 0; + virtual Count seek(Count pos) = 0; + virtual Count seek(Offset offset, Direction dir) = 0; + virtual Count read(Char* dest) = 0; + virtual Count read(Char* dest, Count bytes) = 0; + virtual Count peek(Char* dest) const = 0; + virtual Count peek(Char* dest, Count bytes) const = 0; + virtual const Char* data() const = 0; +}; + + +struct Reader : public BaseReader<char> +{ + using Base = std::unique_ptr<BaseReader>; + using Chars = std::unique_ptr<const char[]>; + + Reader(); + + Reader(const Reader&) = delete; + Reader& operator=(const Reader&) = delete; + + Reader(Reader&& other); + Reader& operator=(Reader&& other); + + Reader(Base src); + Reader(Chars src); + Reader(Chars src, Count bytes); + Reader(const char* src); + Reader(const char* src, Count bytes); + + ~Reader() override = default; + + bool valid() const override; + Count available() const override; + Count seek(Count pos) override; + Count seek(Offset offset, Direction dir) override; + Count read(char* dest) override; + Count read(char* dest, Count bytes) override; + Count peek(char* dest) const override; + Count peek(char* dest, Count bytes) const override; + const char* data() const override; +private: + Base actual; +}; + + +} // namespace foundation +} // namespace starshatter |