@Override TrieNode add(final TrieBranch o, final int l, final InputInfo ii) throws QueryException { TrieNode[] ch = null; int nu = used, ns = size; final int kl = kids.length; for (int k = 0; k < kl; k++) { final TrieNode n = kids[k], ok = o.kids[k]; if (ok != null) { final TrieNode nw = n == null ? ok : ok.addAll(n, l + 1, ii); if (nw != n) { if (ch == null) ch = copyKids(); ch[k] = nw; nu |= 1 << k; ns += nw.size - (n == null ? 0 : n.size); } } } return ch == null ? this : new TrieBranch(ch, nu, ns); }