| 184 | |
| 185 | template <typename Data, typename Fn> |
| 186 | types::Ptr<typename std::invoke_result<Fn, Data const &>::type> TransformToTree(types::Ptr<Data> const & node, Fn && fn) |
| 187 | { |
| 188 | auto n = MakeTreeNode(fn(node->GetData())); |
| 189 | for (auto const & ch : node->GetChildren()) |
| 190 | n->AddChild(TransformToTree(ch, fn)); |
| 191 | return n; |
| 192 | } |
| 193 | |
| 194 | template <typename Data> |
| 195 | bool IsEqual(types::Ptr<Data> const & lhs, types::Ptr<Data> const & rhs) |