roo_io
API Documentation for roo_io
Loading...
Searching...
No Matches
memory_input_stream.h
Go to the documentation of this file.
1#pragma once
2
4
5namespace roo_io {
6
7template <typename PtrType>
9 public:
11 : ptr_(nullptr), position_(0), size_(0), status_(kClosed) {}
12
13 MemoryInputStream(PtrType begin, PtrType end)
14 : ptr_(begin), position_(0), size_(end - begin), status_(kOk) {}
15
16 bool isOpen() const override {
17 return status_ == kOk || status_ == kEndOfStream;
18 }
19
20 size_t read(byte* buf, size_t count) override {
21 if (status_ != kOk) return 0;
22 if (position_ >= size_) {
23 status_ = kEndOfStream;
24 return 0;
25 }
26 if (position_ + count > size_) {
27 count = size_ - position_;
28 }
29 memcpy(buf, ptr_ + position_, count);
30 position_ += count;
31 return count;
32 }
33
34 void skip(uint64_t count) override {
35 if (status_ != kOk) return;
36 if (position_ > size_) {
37 status_ = kEndOfStream;
38 return;
39 }
40 position_ += count;
41 if (position_ > size_) {
42 position_ = size_;
43 status_ = kEndOfStream;
44 }
45 }
46
47 uint64_t position() const override { return position_; }
48
49 void seek(uint64_t position) override {
50 if (!isOpen()) return;
51 position_ = position;
52 status_ = kOk;
53 }
54
55 uint64_t size() override { return size_; }
56
57 void close() override {
58 if (!isOpen()) return;
59 position_ = 0;
60 status_ = kClosed;
61 }
62
63 Status status() const override {
64 return status_;
65 }
66
67 private:
68 PtrType ptr_;
69 size_t position_;
70 size_t size_;
71 Status status_;
72};
73
74} // namespace roo_io
size_t read(byte *buf, size_t count) override
Attempts to read up to count bytes into result.
MemoryInputStream(PtrType begin, PtrType end)
bool isOpen() const override
Returns whether stream is considered open.
Status status() const override
Returns status of the most recent I/O operation.
void skip(uint64_t count) override
Skips over count bytes, updating status().
void seek(uint64_t position) override
Seeks to byte offset from beginning.
void close() override
Closes this stream.
uint64_t position() const override
Returns current byte offset from beginning of stream.
uint64_t size() override
Returns stream size in bytes from beginning.
Virtualizes access to files, memory, and other readable sources.
Definition byte.h:6
roo::basic_string_view< CharT, Traits > basic_string_view
Definition string_view.h:8
size_t count
Definition compare.h:45
Status
Definition status.h:7
@ kOk
Definition status.h:8
@ kClosed
Definition status.h:10
@ kEndOfStream
Definition status.h:9