Method code for $trie._del()

[Turn off line numbering]
  1: arg trie, key;
  2: var n, t1;
  3: 
  4: if (trie[1] && key == trie[1][1]) {
  5:     trie = trie.replace(1, 0);
  6:     if (trie.length() == 3 && !trie[3][2])
  7:         trie = [trie[3][1].replace(1, trie[2] + trie[3][1][1]), ""];
  8:     return trie;
  9: }
 10: if (!key)
 11:     throw(~ambig, "Trie: Can't delete more than one key.");
 12: if (!(n = key[1] in trie[2]))
 13:     throw(~keynf, "Trie: No such key.");
 14: t1 = (> ._del(trie[n + 2], key.subrange(2)) <);
 15: if (t1 == [0, ""])
 16:     trie = trie.delete(n + 2).replace(2, trie[2].subrange(1, n - 1) + trie[2].subrange(n + 1));
 17: else
 18:     trie = trie.replace(n + 2, t1);
 19: if (trie.length() == 3 && !trie[1] && !trie[3][2])
 20:     trie = [trie[3][1].replace(1, trie[2] + trie[3][1][1]), ""];
 21: return trie;

// Miroslav Silovic
// Created 10-May-1995 as a part of ColdCore, see: @help Credit

Tlon