Method code for $trie._del()

[Turn on line numbering]
arg trie, key;
var n, t1;

if (trie[1] && key == trie[1][1]) {
    trie = trie.replace(1, 0);
    if (trie.length() == 3 && !trie[3][2])
        trie = [trie[3][1].replace(1, trie[2] + trie[3][1][1]), ""];
    return trie;
}
if (!key)
    throw(~ambig, "Trie: Can't delete more than one key.");
if (!(n = key[1] in trie[2]))
    throw(~keynf, "Trie: No such key.");
t1 = (> ._del(trie[n + 2], key.subrange(2)) <);
if (t1 == [0, ""])
    trie = trie.delete(n + 2).replace(2, trie[2].subrange(1, n - 1) + trie[2].subrange(n + 1));
else
    trie = trie.replace(n + 2, t1);
if (trie.length() == 3 && !trie[1] && !trie[3][2])
    trie = [trie[3][1].replace(1, trie[2] + trie[3][1][1]), ""];
return trie;

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

Tlon