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