#pragma once #include #include #include class VectorAdaptor { public: VectorAdaptor(std::vector * v) : v_(v) {} void write(const char *data, uint32_t size) { v_->insert(v_->end(), data, data + size ); } private: std::vector * v_; }; class FilePtrAdaptor { public: FilePtrAdaptor(const String &fileName) { static const String baseDirectory("."); auto fullFileName = baseDirectory + fileName; fptr = fopen(fullFileName.c_str(), "wb"); } ~FilePtrAdaptor() { fclose(fptr); } FilePtrAdaptor(const FilePtrAdaptor &) = delete; void operator=(const FilePtrAdaptor &) = delete; void write(const char *data, uint32_t size) { fwrite(data, size, 1, fptr); } private: FILE * fptr; }; class MockStorageWriter { public: MockStorageWriter(const String &fileName) { adaptor_ = new FilePtrAdaptor(fileName); encoder_ = new StreamingMsgPackEncoder (adaptor_); } ~MockStorageWriter(){ delete adaptor_; delete encoder_; } MockStorageWriter(const MockStorageWriter &) = delete; StreamingMsgPackEncoder &encoder() { return *encoder_; } private: FilePtrAdaptor * adaptor_; StreamingMsgPackEncoder * encoder_; }; class MockStorageReader { public: MockStorageReader(const String &fileName) { static const String baseDirectory("."); auto fullFileName = baseDirectory + fileName; fptr = fopen(fullFileName.c_str(), "rb"); } uint32_t readBytes(char *buffer, size_t length) { return fread(buffer, length, 1, fptr); } bool seek(uint32_t pos) { auto ret = fseek(fptr, pos, SEEK_SET); return ret == 0; } private: FILE * fptr; };