private int Run() {
if (cur == -1)
return -1;
bool leaf = false;
for (; ; ) {
// first go down on low branch until leaf or compressed branch
while (cur != 0) {
if (parent.sc[cur] == 0xFFFF) {
leaf = true;
break;
}
ns.Push(new Item((char)cur, '\u0000'));
if (parent.sc[cur] == 0) {
leaf = true;
break;
}
cur = parent.lo[cur];
}
if (leaf)
break;
// nothing found, go up one node and try again
cur = Up();
if (cur == -1) {
return -1;
}
}
// The current node should be a data node and
// the key should be in the key stack (at least partially)
StringBuilder buf = new StringBuilder(ks.ToString());
if (parent.sc[cur] == 0xFFFF) {
int p = parent.lo[cur];
while (parent.kv[p] != 0)
buf.Append(parent.kv[p++]);
}
curkey = buf.ToString();
return 0;
}