Method code for $trie._add()

[Turn off line numbering]
  1: arg trie, key, @values;
  2: var n, word;
  3: 
  4: // This still ain't working. Current problem: values get mingled
  5: if (trie[1]) {
  6:     if (key == trie[1][1])
  7:         return trie.replace(1, [key, @values]);
  8:     word = trie[1][1];
  9:     if (word) {
 10:         if (!(n = word[1] in trie[2]))
 11:             trie = [@trie.replace(2, trie[2] + word[1]), ._add([0, ""], word.subrange(2), @trie[1].subrange(2))];
 12:         else
 13:             trie = trie.replace(n + 2, ._add(trie[n + 2], word.subrange(2), @trie[1].subrange(2), @values));
 14:         trie = trie.replace(1, 0);
 15:     }
 16: }
 17: if (!trie[1] && trie.length() == 2 || !key)
 18:     return trie.replace(1, [key, @values]);
 19: if (!(n = key[1] in trie[2]))
 20:     return [@trie.replace(2, trie[2] + key[1]), ._add([0, ""], key.subrange(2), @values)];
 21: return trie.replace(n + 2, ._add(trie[n + 2], key.subrange(2), @values));

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

Tlon