1 //----------------------------------------------------------------------------- 2 /** @file libboardgame_base/TreeReader.h 3 @author Markus Enzenberger 4 @copyright GNU General Public License version 3 or later */ 5 //----------------------------------------------------------------------------- 6 7 #ifndef LIBBOARDGAME_BASE_TREE_READER_H 8 #define LIBBOARDGAME_BASE_TREE_READER_H 9 10 #include <memory> 11 #include <stack> 12 #include "Reader.h" 13 #include "SgfNode.h" 14 15 namespace libboardgame_base { 16 17 //----------------------------------------------------------------------------- 18 19 class TreeReader 20 : public Reader 21 { 22 public: 23 TreeReader(); 24 25 ~TreeReader() override; 26 27 void on_begin_tree(bool is_root) override; 28 29 void on_end_tree(bool is_root) override; 30 31 void on_begin_node(bool is_root) override; 32 33 void on_end_node() override; 34 35 void on_property(const string& identifier, 36 const vector<string>& values) override; 37 get_tree()38 const SgfNode& get_tree() const { return *m_root; } 39 40 /** Get the tree and transfer the ownership to the caller. */ 41 unique_ptr<SgfNode> get_tree_transfer_ownership(); 42 43 private: 44 SgfNode* m_current = nullptr; 45 46 unique_ptr<SgfNode> m_root; 47 48 stack<SgfNode*> m_stack; 49 }; 50 51 //----------------------------------------------------------------------------- 52 53 } // namespace libboardgame_base 54 55 #endif // LIBBOARDGAME_BASE_TREE_READER_H 56