source: branches/tree/SL/TREE_READ/LabelTranslator.cxx

Last change on this file was 18738, checked in by westram, 4 years ago
  • moved code for label translation to separate unit.
File size: 1.6 KB
Line 
1// ========================================================= //
2//                                                           //
3//   File      : LabelTranslator.cxx                         //
4//   Purpose   : Translate tree labels                       //
5//                                                           //
6//   Coded by Ralf Westram (coder@reallysoft.de) in Sep 21   //
7//   http://www.arb-home.de/                                 //
8//                                                           //
9// ========================================================= //
10
11#include "LabelTranslator.h"
12#include <TreeNode.h>
13
14using namespace std;
15
16void LabelTranslator::translate_unlinked_labels_in_tree(TreeNode *tree) const {
17    if (tree->is_leaf()) {
18        if (!tree->gb_node) { // only translate unlinked leafs (i.e. not-yet-linked nodes or real zombies)
19            const char *translated = translate(tree->name);
20            if (strcmp(tree->name, translated) != 0) {
21                freedup(tree->name, translated);
22            }
23        }
24    }
25    else {
26        translate_unlinked_labels_in_tree(tree->get_leftson());
27        translate_unlinked_labels_in_tree(tree->get_rightson());
28    }
29}
30
31GB_ERROR TREE_translate_labels(GBDATA *gb_main, TreeNode *tree, const LabelTranslator& translator) {
32    GB_ERROR error = NULp;
33
34    // @@@ check translator generates unique ids for each species in database (not needed for translators using species ID).
35    // @@@ check translator generates unique ids for each tree label.
36
37    // translate all unlinked labels in tree:
38    translator.translate_unlinked_labels_in_tree(tree);
39
40    return error;
41}
42
43
44
Note: See TracBrowser for help on using the repository browser.