36 VFSFile(
const char* fn) { open(fn, VFS_FILE_READ); }
41 open(file.name(), VFS_FILE_READ);
45 void open(
const char* name, FileMode mode = VFS_FILE_READ) {
49 stream.open(name, stream.binary | stream.in);
53 stream.open(name, stream.binary | stream.trunc | stream.out);
57 stream.open(name, stream.binary | stream.out);
63 virtual bool begin() {
68 virtual void end() { stream.close(); }
70 virtual int print(
const char* str) NOARD_OVR {
75 virtual int println(
const char* str =
"") NOARD_OVR {
76 stream << str <<
"\n";
77 return strlen(str) + 1;
80 virtual int print(
int number) NOARD_OVR {
82 int len = snprintf(buffer, 80,
"%d", number);
87 virtual int println(
int number) {
89 int len = snprintf(buffer, 80,
"%d\n", number);
94 virtual void flush()
override { stream.flush(); }
97 virtual size_t write(uint8_t* str,
size_t len) {
98 stream.write((
const char*)str, len);
102 virtual size_t write(
const uint8_t* str,
size_t len)
override {
103 stream.write((
const char*)str, len);
107 virtual size_t write(int32_t value) {
112 virtual size_t write(uint8_t value)
override {
117 virtual int available()
override {
118 int result = size() - position();
122 virtual int read()
override {
return stream.get(); }
124 virtual size_t readBytes(
char* data,
size_t len) {
125 return readBytes((uint8_t*)data, len);
128 virtual size_t readBytes(uint8_t* data,
size_t len)
override {
129 stream.read((
char*)data, len);
130 return stream ? len : stream.gcount();
133 virtual int peek()
override {
return stream.peek(); }
135 bool seek(uint32_t pos, SeekMode mode) {
139 stream.seekg(pos, std::ios_base::beg);
142 stream.seekg(pos, std::ios_base::cur);
145 stream.seekg(pos, std::ios_base::end);
151 stream.seekp(pos, std::ios_base::beg);
154 stream.seekp(pos, std::ios_base::cur);
157 stream.seekp(pos, std::ios_base::end);
161 return stream.fail() ==
false;
164 bool seek(uint32_t pos) {
return seek(pos, SeekSet); }
166 size_t position() {
return stream.tellp(); }
168 size_t size()
const {
169 std::streampos fsize = 0;
170 std::ifstream file(file_path, std::ios::binary);
172 fsize = file.tellg();
173 file.seekg(0, std::ios::end);
174 fsize = file.tellg() - fsize;
180 void close() { stream.close(); }
182 const char* name()
const {
return file_path; }
184 operator bool() {
return stream.is_open(); }
189 const char* file_path =
nullptr;