// ========================================================= // // // // File : LabelTranslator.cxx // // Purpose : Translate tree labels // // // // Coded by Ralf Westram (coder@reallysoft.de) in Sep 21 // // http://www.arb-home.de/ // // // // ========================================================= // #include "LabelTranslator.h" #include using namespace std; void LabelTranslator::translate_unlinked_labels_in_tree(TreeNode *tree) const { if (tree->is_leaf()) { if (!tree->gb_node) { // only translate unlinked leafs (i.e. not-yet-linked nodes or real zombies) const char *translated = translate(tree->name); if (strcmp(tree->name, translated) != 0) { freedup(tree->name, translated); } } } else { translate_unlinked_labels_in_tree(tree->get_leftson()); translate_unlinked_labels_in_tree(tree->get_rightson()); } } GB_ERROR TREE_translate_labels(GBDATA *gb_main, TreeNode *tree, const LabelTranslator& translator) { GB_ERROR error = NULp; // @@@ check translator generates unique ids for each species in database (not needed for translators using species ID). // @@@ check translator generates unique ids for each tree label. // translate all unlinked labels in tree: translator.translate_unlinked_labels_in_tree(tree); return error; }