| #pragma once |
| |
| #include "sys_file.hpp" |
| |
| #include <stdint.h> |
| |
| #include <cstring> |
| #include <string> |
| #include <vector> |
| |
| using std::size_t; |
| using std::uint16_t; |
| using std::uint32_t; |
| using std::uint8_t; |
| |
| using namespace std::string_literals; |
| |
| namespace binstore |
| { |
| |
| /* An in-memory file implementation to test read/write operations, which works |
| * around the problem that Docker image cannot create file in tmpdir. */ |
| class FakeSysFile : public SysFile |
| { |
| public: |
| size_t readToBuf(size_t pos, size_t count, char* buf) const override |
| { |
| auto result = readAsStr(pos, count); |
| std::copy(result.begin(), result.end(), buf); |
| return result.size(); |
| } |
| |
| std::string readAsStr(size_t pos, size_t count) const override |
| { |
| if (pos >= data_.size()) |
| { |
| return ""; |
| } |
| |
| return data_.substr(pos, count); |
| } |
| |
| std::string readRemainingAsStr(size_t pos) const override |
| { |
| return readAsStr(pos, data_.size()); |
| } |
| |
| void writeStr(const std::string& data, size_t pos) override |
| { |
| if (pos >= data.size()) |
| { |
| return; |
| } |
| |
| data_.resize(pos); |
| data_.insert(data_.begin() + pos, data.begin(), data.end()); |
| } |
| |
| protected: |
| std::string data_ = ""s; |
| }; |
| |
| } // namespace binstore |