1#include "caffe2/serialize/istream_adapter.h"
2#include <c10/util/Exception.h>
3
4namespace caffe2 {
5namespace serialize {
6
7IStreamAdapter::IStreamAdapter(std::istream* istream) : istream_(istream) {}
8
9size_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
21size_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
30void 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)
37IStreamAdapter::~IStreamAdapter() {}
38
39} // namespace serialize
40} // namespace caffe2
41