CeresEngine 0.2.0
A game development framework
Loading...
Searching...
No Matches
Stream.Limited.hpp
Go to the documentation of this file.
1//
2// CeresEngine - A game development framework
3//
4// Created by Rogiel Sulzbach.
5// Copyright (c) 2018-2022 Rogiel Sulzbach. All rights reserved.
6//
7
8#pragma once
9
10#include "Stream.hpp"
11
12namespace CeresEngine {
13
17 private:
19 std::size_t mLimit = 0;
20 std::size_t mPosition = 0;
21
22 public:
23 LimitedInputStream(InputStream stream, const std::size_t limit) : mStream(std::move(stream)), mLimit(limit) {}
24
25 public: // Seeking & Telling
28 [[nodiscard]] bool isSeekable(Seek mode = Seek::Start) const noexcept override { return false; }
29
36 void seek(std::streamsize position, Seek mode = Seek::Start) override {}
37
40 [[nodiscard]] bool isTellable() const noexcept override { return false; }
41
45 [[nodiscard]] size_t tell() override { return mPosition; }
46
49 [[nodiscard]] bool isSizeKnown() const noexcept override { return mStream->isSizeKnown(); }
50
54 [[nodiscard]] size_t size() override { return std::min(mLimit, mStream->size()); }
55
56 public: // Reading
59 [[nodiscard]] bool isReadable() const noexcept override { return mStream->isReadable(); }
60
72 [[nodiscard]] size_t read(void* data, size_t n) override;
73 };
74
75} // namespace CeresEngine
An interface that all data streams must implement.
Definition Stream.hpp:456
Seek
An enumeration that describes how a data stream should be seeked.
Definition Stream.hpp:72
A stream that provides read-only stream functionality.
Definition Stream.hpp:210
A input stream that filters another input stream and limit reads to up-to limit bytes.
Definition Stream.Limited.hpp:16
std::size_t mPosition
Definition Stream.Limited.hpp:20
std::size_t mLimit
Definition Stream.Limited.hpp:19
size_t tell() override
Gets the absolute stream position, in bytes.
Definition Stream.Limited.hpp:45
bool isSizeKnown() const noexcept override
Checks if the stream knows the size of the data.
Definition Stream.Limited.hpp:49
bool isReadable() const noexcept override
Checks if the stream is readable.
Definition Stream.Limited.hpp:59
bool isSeekable(Seek mode=Seek::Start) const noexcept override
Checks if the stream is seekable.
Definition Stream.Limited.hpp:28
bool isTellable() const noexcept override
Checks if the stream knows it's current absolute position.
Definition Stream.Limited.hpp:40
LimitedInputStream(InputStream stream, const std::size_t limit)
Definition Stream.Limited.hpp:23
size_t size() override
Gets the number of bytes available on the stream.
Definition Stream.Limited.hpp:54
InputStream mStream
Definition Stream.Limited.hpp:18
void seek(std::streamsize position, Seek mode=Seek::Start) override
Changes the position of the data stream.
Definition Stream.Limited.hpp:36
size_t read(void *data, size_t n) override
Reads data from the data stream to a buffer of raw memory data with length n.
Definition Application.hpp:19
auto move(Vector3 position)
Moves a entity to the given position.
Definition Helpers.hpp:22
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25
Definition Span.hpp:668