1 #include "caffe2/serialize/istream_adapter.h"
2 #include <c10/util/Exception.h>
3
4 namespace caffe2 {
5 namespace serialize {
6
IStreamAdapter(std::istream * istream)7 IStreamAdapter::IStreamAdapter(std::istream* istream) : istream_(istream) {}
8
size() const9 size_t IStreamAdapter::size() const {
10 auto prev_pos = istream_->tellg();
11 validate("getting the current position");
12 istream_->seekg(0, istream_->end);
13 validate("seeking to end");
14 auto result = istream_->tellg();
15 validate("getting size");
16 istream_->seekg(prev_pos);
17 validate("seeking to the original position");
18 return result;
19 }
20
read(uint64_t pos,void * buf,size_t n,const char * what) const21 size_t IStreamAdapter::read(uint64_t pos, void* buf, size_t n, const char* what)
22 const {
23 istream_->seekg(pos);
24 validate(what);
25 istream_->read(static_cast<char*>(buf), n);
26 validate(what);
27 return n;
28 }
29
validate(const char * what) const30 void IStreamAdapter::validate(const char* what) const {
31 if (!*istream_) {
32 AT_ERROR("istream reader failed: ", what, ".");
33 }
34 }
35
36 // NOLINTNEXTLINE(modernize-use-equals-default)
~IStreamAdapter()37 IStreamAdapter::~IStreamAdapter() {}
38
39 } // namespace serialize
40 } // namespace caffe2
41