roo_io
API Documentation for roo_io
Loading...
Searching...
No Matches
file_iterable.h
Go to the documentation of this file.
1#pragma once
2
3#ifdef ARDUINO
4
5#include <FS.h>
6
7#include <memory>
8
14
15namespace roo_io {
16
18 public:
19 ArduinoFileIterable(fs::FS& fs, String path)
20 : fs_(fs), path_(std::move(path)) {}
21
22 ArduinoFileInputIterator iterator() const {
23 return ArduinoFileInputIterator(fs_.open(path_));
24 }
25
26 private:
27 FS& fs_;
28 String path_;
29};
30
31// Can be used with both Arduino FS and the roo_io::Filesystem.
33 public:
34 class FileIterator {
35 public:
36 FileIterator(std::unique_ptr<MultipassInputStream> input)
37 : input_(std::move(input)), itr_(*input_) {}
38
39 byte read() { return itr_.read(); }
40
41 size_t read(byte* buf, size_t count) { return itr_.read(buf, count); }
42
43 void skip(size_t count) { itr_.skip(count); }
44
45 Status status() const { return itr_.status(); }
46
47 uint64_t size() { return itr_.size(); }
48
49 uint64_t position() { return itr_.position(); }
50
51 void rewind() { itr_.rewind(); }
52
53 void seek(uint64_t position) { itr_.seek(position); }
54
55 private:
56 std::unique_ptr<MultipassInputStream> input_;
57 BufferedMultipassInputStreamIterator itr_;
58 };
59
61 : resource_(fs, std::move(path)) {}
62
63 ExtendedArduinoFileIterable(Filesystem& fs, std::string path)
64 : resource_(fs, std::move(path)) {}
65
66 FileIterator iterator() const {
67 std::unique_ptr<MultipassInputStream> input = resource_.open();
68 return FileIterator(std::move(input));
69 }
70
71 private:
73};
74
75} // namespace roo_io
76
77#endif // ARDUINO
Definition byte.h:6
roo::basic_string_view< CharT, Traits > basic_string_view
Definition string_view.h:8
Status
Definition status.h:7