1 #pragma once 2 3 #include <cstdio> 4 #include <memory> 5 #include <string> 6 7 #include "Buffer.hpp" 8 #include "MaeBlock.hpp" 9 #include "MaeParser.hpp" 10 #include "MaeParserConfig.hpp" 11 12 namespace schrodinger 13 { 14 namespace mae 15 { 16 17 class EXPORT_MAEPARSER Reader 18 { 19 private: 20 std::shared_ptr<MaeParser> m_mae_parser; 21 22 public: 23 Reader() = delete; 24 Reader(FILE* file, size_t buffer_size = BufferLoader::DEFAULT_SIZE); 25 26 Reader(std::shared_ptr<std::istream> stream, 27 size_t buffer_size = BufferLoader::DEFAULT_SIZE); 28 29 Reader(const std::string& fname, 30 size_t buffer_size = BufferLoader::DEFAULT_SIZE); 31 32 // Should be made private if we conclude there's no need for the 33 // DirectParser. The only current purpose of allowing construction from a 34 // MaeParser is to allow direct/buffered behavior difference. 35 Reader(std::shared_ptr<MaeParser> mae_parser); 36 37 std::shared_ptr<Block> next(const std::string& outer_block_name); 38 }; 39 40 } // namespace mae 41 } // namespace schrodinger 42