Warning: session_start(): open(/var/lib/php/sessions/sess_vpfhokgsp9djuco5erirkk6f4l, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
// Ukkonen tree must contain an end symbol as last symbol
static IntSuffixTree_managed ukkonenToIntSuffixTree_managed(UkkonenIntSuffixTree uTree) {
new IntSuffixTree_managed tree;
int lText = l(uTree.text)-1;
int endSymbol = uTree.text[lText];
printVars_str(+lText, +endSymbol);
tree.fullText = wrapIntArrayAsImmutableList(uTree.text);
new HashMap nodeMap;
// First round: copy all nodes
for (int uNodeIdx : recursiveIterator(uTree.root, n -> values(uTree.nodes[n].next))) {
UkkonenIntSuffixTree.Node uNode = uTree.nodes[uNodeIdx];
IntSuffixTree_managed.Node node = tree.newNode(uNode.start, min(lText, uNode.end));
nodeMap.put(uNodeIdx, node);
if (tree.root == null) tree.root = node;
}
// Second round: Add edges
for (int idx, IntSuffixTree_managed.Node node : nodeMap) {
//if (idx == endSymbol) continue;
UkkonenIntSuffixTree.Node uNode = uTree.nodes[idx];
//print("Node " + idx + " children: " + uNode.next);
node.setChildren(tree, mapValuesToList(uNode.next, iChild -> nodeMap.get(iChild)));
}
ret tree;
}