1#pragma once
2
3#include <fstream>
4#include <memory>
5#include <c10/macros/Macros.h>
6
7#include "caffe2/serialize/istream_adapter.h"
8#include "caffe2/serialize/read_adapter_interface.h"
9
10namespace caffe2 {
11namespace serialize {
12
13class TORCH_API FileAdapter final : public ReadAdapterInterface {
14 public:
15 C10_DISABLE_COPY_AND_ASSIGN(FileAdapter);
16 explicit FileAdapter(const std::string& file_name);
17 size_t size() const override;
18 size_t read(uint64_t pos, void* buf, size_t n, const char* what = "")
19 const override;
20 ~FileAdapter() override;
21
22 private:
23 // An RAII Wrapper for a FILE pointer. Closes on destruction.
24 struct RAIIFile {
25 FILE* fp_;
26 explicit RAIIFile(const std::string& file_name);
27 ~RAIIFile();
28 };
29
30 RAIIFile file_;
31 // The size of the opened file in bytes
32 uint64_t size_;
33};
34
35} // namespace serialize
36} // namespace caffe2
37