#pragma once #include "tree.h" namespace saw { template class mcts_tree { private: struct value { uint64_t numerater; uint64_t denominater; T state; value() = default; value(T st): numerater{0}, denominater{0}, state{std::move(st)} {} }; tree_container> data_; public: mcts_tree() = default{ data_.add(value{}); } mcts_tree(T state){ data_.add(value{std::move(state)}); } size_t size() const { return data_.size() - 1; } T& get_state(){ return data_.at(0).get_value().state; } const T& get_state() const { return data_.at(0).get_value().state; } mcts_tree& get_tree(size_t i){ return data_.at(i+1).get_tree(); } const mcts_tree& get_tree(size_t i) const { return data_.at(i+1).get_tree(); } }; }