/** * TODO Godin: in fact computations here are the same as in {@link #report(Node)}, * so maybe would be better to remove this duplication, * however it should be noted that this check can't be done in {@link Collector#endOfGroup()}, * because it might lead to creation of unnecessary new objects */ private boolean containsOrigin(Node node) { for (int i = node.startSize; i < node.endSize; i++) { int start = tree.text.length() - list.get(i); int end = start + node.depth; if (text.isInsideOrigin(end)) { return true; } } return false; }
public Object symbolAt(int index) { return text.symbolAt(index); }
public static int indexOf(SuffixTree tree, Text str) { if (str.length() == 0) { return -1; while (i < str.length()) { if (node == null) { return -1; if (i == tree.text.length()) { return -1; Edge edge = node.findEdge(str.symbolAt(i)); if (edge == null) { return -1; if (i == str.length()) { break; if (!Objects.equals(tree.symbolAt(j), str.symbolAt(i))) { return -1;
private void report(Node node) { reporter.startOfGroup(node.endSize - node.startSize, node.depth); for (int i = node.startSize; i < node.endSize; i++) { int start = tree.text.length() - list.get(i); int end = start + node.depth; reporter.part(start, end); } reporter.endOfGroup(); }
public Object symbolAt(int index) { return text.symbolAt(index); }
public static SuffixTree create(Text text) { SuffixTree tree = new SuffixTree(text); Suffix active = new Suffix(tree.root, 0, -1); for (int i = 0; i < text.length(); i++) { tree.addPrefix(active, i); } return tree; }
Edge newEdge = new Edge(endIndex, text.length() - 1, parentNode); newEdge.insert(); updateSuffixNode(lastParentNode, parentNode);
/** * TODO Godin: in fact computations here are the same as in {@link #report(Node)}, * so maybe would be better to remove this duplication, * however it should be noted that this check can't be done in {@link Collector#endOfGroup()}, * because it might lead to creation of unnecessary new objects */ private boolean containsOrigin(Node node) { for (int i = node.startSize; i < node.endSize; i++) { int start = tree.text.length() - list.get(i); int end = start + node.depth; if (text.isInsideOrigin(end)) { return true; } } return false; }
private void report(Node node) { reporter.startOfGroup(node.endSize - node.startSize, node.depth); for (int i = node.startSize; i < node.endSize; i++) { int start = tree.text.length() - list.get(i); int end = start + node.depth; reporter.part(start, end); } reporter.endOfGroup(); }
public static SuffixTree create(Text text) { SuffixTree tree = new SuffixTree(text); Suffix active = new Suffix(tree.root, 0, -1); for (int i = 0; i < text.length(); i++) { tree.addPrefix(active, i); } return tree; }
Edge newEdge = new Edge(endIndex, text.length() - 1, parentNode); newEdge.insert(); updateSuffixNode(lastParentNode, parentNode);