| 172 | |
| 173 | template <typename Data> |
| 174 | decltype(auto) GetPathToRoot(types::Ptr<Data> node) |
| 175 | { |
| 176 | types::Ptrs<Data> path; |
| 177 | while (node) |
| 178 | { |
| 179 | path.emplace_back(node); |
| 180 | node = node->GetParent(); |
| 181 | } |
| 182 | return path; |
| 183 | } |
| 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) |