diff --git a/libraries/libfc/include/fc/io/datastream.hpp b/libraries/libfc/include/fc/io/datastream.hpp index 47a9fbf70a..b6c427a913 100644 --- a/libraries/libfc/include/fc/io/datastream.hpp +++ b/libraries/libfc/include/fc/io/datastream.hpp @@ -176,6 +176,38 @@ class datastream +class datastream_mirror { +public: + explicit datastream_mirror( DataStream& ds, size_t reserve = 0 ) : ds(ds) { + mirror.reserve(reserve); + } + + void skip( size_t s ) { ds.skip(s); } + bool read( char* d, size_t s ) { + if (ds.read(d, s)) { + auto size = mirror.size(); + mirror.resize(size + s); + memcpy(mirror.data() + size, d, s); + return true; + } + return false; + } + + bool get( unsigned char& c ) { return read(&c, 1); } + bool get( char& c ) { return read(&c, 1); } + + std::vector extract_mirror() { return std::move(mirror); } + +private: + DataStream& ds; + std::vector mirror; +}; template