xref: /aosp_15_r20/external/pytorch/caffe2/serialize/file_adapter.h (revision da0073e96a02ea20f0ac840b70461e3646d07c45)
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 
10 namespace caffe2 {
11 namespace serialize {
12 
13 class 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