| 238 | } |
| 239 | |
| 240 | findSubstr(key: K): V | undefined { |
| 241 | const iter = this._iter.reset(key); |
| 242 | let node = this._root; |
| 243 | let candidate: V | undefined = undefined; |
| 244 | while (node) { |
| 245 | const val = iter.cmp(node.segment); |
| 246 | if (val > 0) { |
| 247 | // left |
| 248 | node = node.left; |
| 249 | } else if (val < 0) { |
| 250 | // right |
| 251 | node = node.right; |
| 252 | } else if (iter.hasNext()) { |
| 253 | // mid |
| 254 | iter.next(); |
| 255 | candidate = node.value || candidate; |
| 256 | node = node.mid; |
| 257 | } else { |
| 258 | break; |
| 259 | } |
| 260 | } |
| 261 | return node && node.value || candidate; |
| 262 | } |
| 263 | |
| 264 | findSuperstr(key: K): Iterator<V> | undefined { |
| 265 | const iter = this._iter.reset(key); |