|  | #pragma once | 
|  |  | 
|  | #include <fstream> | 
|  | #include <memory> | 
|  | #include <c10/macros/Macros.h> | 
|  |  | 
|  | #include "caffe2/serialize/istream_adapter.h" | 
|  | #include "caffe2/serialize/read_adapter_interface.h" | 
|  |  | 
|  | namespace caffe2 { | 
|  | namespace serialize { | 
|  |  | 
|  | class TORCH_API FileAdapter final : public ReadAdapterInterface { | 
|  | public: | 
|  | C10_DISABLE_COPY_AND_ASSIGN(FileAdapter); | 
|  | explicit FileAdapter(const std::string& file_name); | 
|  | size_t size() const override; | 
|  | size_t read(uint64_t pos, void* buf, size_t n, const char* what = "") | 
|  | const override; | 
|  | ~FileAdapter() override; | 
|  |  | 
|  | private: | 
|  | // An RAII Wrapper for a FILE pointer. Closes on destruction. | 
|  | struct RAIIFile { | 
|  | FILE* fp_; | 
|  | explicit RAIIFile(const std::string& file_name); | 
|  | ~RAIIFile(); | 
|  | }; | 
|  |  | 
|  | RAIIFile file_; | 
|  | // The size of the opened file in bytes | 
|  | uint64_t size_; | 
|  | }; | 
|  |  | 
|  | } // namespace serialize | 
|  | } // namespace caffe2 |