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