#include #include #include #include #include #include #include "tree.hpp" #include "vxheaven_parse.hpp" int main() { std::ifstream ifs("./samples.sort"); vxorg::VxHeavenTree tree; vxorg::parse_into_tree(tree, ifs); // walk the resulting tree tree.walk([](auto* node) { auto tab_count = node->parent_count(); auto& data = node->data(); for(auto i = 0; i < tab_count; ++i) std::printf("\t"); if(data.name.empty()) { std::printf("(root)\n"); } else { if(data.is_sample) { std::string sample_name {}; std::vector parent_list {}; vxorg::VxHeavenTree::Node* parent = node->parent_node(); while(parent) { if(parent->data().name.empty()) break; parent_list.push_back(&parent->data()); parent = parent->parent_node(); } for(auto& item : std::views::reverse(parent_list)) { sample_name += std::format("{}.", item->name); } sample_name += data.name; std::printf("%s (sample %s)\n", data.name.c_str(), sample_name.c_str()); } else { std::printf("%s\n", data.name.c_str()); } } }); return 0; }