Data::LoadFromStream() and Data::StoreToStream()

This commit is contained in:
Sebastian Messmer 2015-10-24 18:39:11 +02:00
parent 60b7f853d9
commit ea30ac641b
2 changed files with 18 additions and 10 deletions

View File

@ -15,14 +15,10 @@ boost::optional<Data> Data::LoadFromFile(const bf::path &filepath) {
if (!file.good()) {
return boost::none;
}
size_t size = _getStreamSize(file);
Data result(size);
result._readFromStream(file);
return std::move(result);
return LoadFromStream(file);
}
size_t Data::_getStreamSize(istream &stream) {
std::streampos Data::_getStreamSize(istream &stream) {
auto current_pos = stream.tellg();
//Retrieve length
@ -35,9 +31,12 @@ size_t Data::_getStreamSize(istream &stream) {
return endpos - current_pos;
}
Data Data::LoadFromStream(istream &stream) {
size_t size = _getStreamSize(stream);
void Data::_readFromStream(istream &stream) {
stream.read((char*)_data, _size);
Data result(size);
stream.read(static_cast<char*>(result.data()), result.size());
return std::move(result);
}
}

View File

@ -35,11 +35,15 @@ public:
void StoreToFile(const boost::filesystem::path &filepath) const;
static boost::optional<Data> LoadFromFile(const boost::filesystem::path &filepath);
//TODO Test LoadFromStream/StoreToStream
static Data LoadFromStream(std::istream &stream);
void StoreToStream(std::ostream &stream) const;
private:
size_t _size;
void *_data;
static size_t _getStreamSize(std::istream &stream);
static std::streampos _getStreamSize(std::istream &stream);
void _readFromStream(std::istream &stream);
DISALLOW_COPY_AND_ASSIGN(Data);
@ -115,7 +119,12 @@ inline Data &Data::FillWithZeroes() {
inline void Data::StoreToFile(const boost::filesystem::path &filepath) const {
std::ofstream file(filepath.c_str(), std::ios::binary | std::ios::trunc);
file.write((const char*)_data, _size);
StoreToStream(file);
}
inline void Data::StoreToStream(std::ostream &stream) const {
stream.write(static_cast<const char*>(_data), _size);
}
inline bool operator==(const Data &lhs, const Data &rhs) {