roo_io
API Documentation for roo_io
Loading...
Searching...
No Matches
multipass_input_stream_reader.h
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4
9#include "roo_io/data/read.h"
10
11namespace roo_io {
12
14 public:
16
18
20 default;
21
22 MultipassInputStreamReader(std::unique_ptr<roo_io::MultipassInputStream> is)
23 : is_(std::move(is)), in_(*is_) {}
24
26
27 void reset(std::unique_ptr<roo_io::MultipassInputStream> is) {
28 if (is_ != nullptr) is_->close();
29 is_ = std::move(is);
30 if (is_ == nullptr) {
31 in_.reset();
32 } else {
33 in_.reset(*is_);
34 }
35 }
36
37 void close() {
38 if (is_ == nullptr) return;
39 is_->close();
40 is_ = nullptr;
41 in_.reset();
42 }
43
44 bool isOpen() const { return in_.ok() || in_.eos(); }
45
46 bool ok() const { return in_.ok(); }
47
48 uint64_t size() const { return in_.size(); }
49 uint64_t position() const { return in_.position(); }
50
51 void rewind() { in_.rewind(); }
52
54
55 byte read() { return in_.read(); }
56
57 void skip(size_t count) { in_.skip(count); }
58
59 Status status() const { return in_.status(); }
60
61 uint16_t readU8() { return ReadU8(in_); }
62
63 uint16_t readBeU16() { return ReadBeU16(in_); }
64
65 uint16_t readLeU16() { return ReadLeU16(in_); }
66
67 uint32_t readBeU24() { return ReadBeU24(in_); }
68
69 uint32_t readLeU24() { return ReadLeU24(in_); }
70
71 uint32_t readBeU32() { return ReadBeU32(in_); }
72
73 uint32_t readLeU32() { return ReadLeU32(in_); }
74
75 uint64_t readBeU64() { return ReadBeU64(in_); }
76
77 uint64_t readLeU64() { return ReadLeU64(in_); }
78
79 int16_t readS8() { return ReadS8(in_); }
80
81 int16_t readBeS16() { return ReadBeS16(in_); }
82
83 int16_t readLeS16() { return ReadLeS16(in_); }
84
85 int32_t readBeS24() { return ReadBeS24(in_); }
86
87 int32_t readLeS24() { return ReadLeS24(in_); }
88
89 int32_t readBeS32() { return ReadBeS32(in_); }
90
91 int32_t readLeS32() { return ReadLeS32(in_); }
92
93 int64_t readBeS64() { return ReadBeS64(in_); }
94
95 int64_t readLeS64() { return ReadLeS64(in_); }
96
97#if ROO_IO_IEEE754
98 float readBeFloat() { return ReadBeFloat(in_); }
99
100 float readLeFloat() { return ReadLeFloat(in_); }
101
102 double readBeDouble() { return ReadBeDouble(in_); }
103
104 double readLeDouble() { return ReadLeDouble(in_); }
105#endif // ROO_IO_IEEE754
106
107 size_t readByteArray(byte* result, size_t count) {
108 return ReadByteArray(in_, result, count);
109 }
110
111 size_t readCString(char* buf, size_t capacity = SIZE_MAX) {
112 return ReadCString(in_, buf, capacity);
113 }
114
115 std::string readString(size_t max_size = SIZE_MAX) {
116 return ReadString(in_, max_size);
117 }
118
119 template <typename T>
121 return HostNativeReader<T>().read(in_, std::move(default_value));
122 }
123
124 uint64_t readVarU64() { return ReadVarU64(in_); }
125
126 private:
127 std::unique_ptr<roo_io::MultipassInputStream> is_;
129};
130
131} // namespace roo_io
void reset(roo_io::MultipassInputStream &input)
Rebinds iterator to input and clears buffered state.
void seek(uint64_t position)
Seeks to absolute position.
uint64_t size() const
Returns stream size when iterator status is kOk or kEndOfStream.
uint64_t position() const
Returns current read position when status is kOk or kEndOfStream.
bool eos() const
Returns whether status() == kEndOfStream.
void reset(std::unique_ptr< roo_io::MultipassInputStream > is)
size_t readByteArray(byte *result, size_t count)
MultipassInputStreamReader(MultipassInputStreamReader &&other)=default
size_t readCString(char *buf, size_t capacity=SIZE_MAX)
MultipassInputStreamReader(std::unique_ptr< roo_io::MultipassInputStream > is)
MultipassInputStreamReader & operator=(MultipassInputStreamReader &&other)=default
std::string readString(size_t max_size=SIZE_MAX)
Definition byte.h:6
constexpr uint32_t ReadBeU32(InputIterator &in)
Definition read.h:52
size_t ReadCString(InputIterator &in, char *buf, size_t capacity=SIZE_MAX)
Definition read.h:432
constexpr uint64_t ReadLeU64(InputIterator &in)
Definition read.h:72
constexpr uint16_t ReadBeU16(InputIterator &in)
Definition read.h:26
roo::basic_string_view< CharT, Traits > basic_string_view
Definition string_view.h:8
constexpr uint32_t ReadLeU24(InputIterator &in)
Definition read.h:45
constexpr int16_t ReadBeS16(InputIterator &in)
Definition read.h:86
size_t ReadByteArray(InputIterator &in, byte *result, size_t count)
Definition read.h:201
constexpr uint32_t ReadBeU24(InputIterator &in)
Definition read.h:38
constexpr int64_t ReadBeS64(InputIterator &in)
Definition read.h:131
constexpr int64_t ReadLeS64(InputIterator &in)
Definition read.h:137
constexpr int32_t ReadBeS24(InputIterator &in)
Definition read.h:107
size_t count
Definition compare.h:45
constexpr int8_t ReadS8(InputIterator &in)
Definition read.h:80
constexpr uint64_t ReadBeU64(InputIterator &in)
Definition read.h:66
constexpr uint32_t ReadLeU32(InputIterator &in)
Definition read.h:59
constexpr int32_t ReadBeS32(InputIterator &in)
Definition read.h:119
Status
Definition status.h:7
constexpr int16_t ReadLeS16(InputIterator &in)
Definition read.h:92
constexpr int32_t ReadLeS32(InputIterator &in)
Definition read.h:125
uint64_t ReadVarU64(InputIterator &in)
Definition read.h:217
constexpr int32_t ReadLeS24(InputIterator &in)
Definition read.h:113
constexpr uint8_t ReadU8(InputIterator &in)
Definition read.h:20
constexpr uint16_t ReadLeU16(InputIterator &in)
Definition read.h:32
std::string ReadString(InputIterator &in, size_t max_size=SIZE_MAX)
Definition read.h:457