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