61 lines
1.0 KiB
Markdown
61 lines
1.0 KiB
Markdown
|
|
||
|
## How the fast iterator works
|
||
|
|
||
|
Consider the following example, where we have `6` iterators, sorted from
|
||
|
left to right in ascending order.
|
||
|
|
||
|
Our 'primary' `A` iterator is on the left, containing the elements `[0,1,8]`
|
||
|
```
|
||
|
A B C D E F
|
||
|
|
||
|
0 1 2 4 7 9
|
||
|
1 2 9 - 14 13
|
||
|
8 8 - 15 15
|
||
|
- - - 16
|
||
|
-
|
||
|
```
|
||
|
When we call `Next` on the primary iterator, we get (ignoring the future keys)
|
||
|
|
||
|
```
|
||
|
A B C D E F
|
||
|
|
||
|
1 1 2 4 7 9
|
||
|
```
|
||
|
We detect that we now got an equality between our element and the next element.
|
||
|
And we need to continue `Next`ing on the next element
|
||
|
|
||
|
```
|
||
|
1 2 2 4 7 9
|
||
|
```
|
||
|
And move on:
|
||
|
```
|
||
|
A B C D E F
|
||
|
|
||
|
1 2 9 4 7 9
|
||
|
```
|
||
|
Now we broke out of the equality, but we need to re-sort the element `C`
|
||
|
|
||
|
```
|
||
|
A B D E F C
|
||
|
|
||
|
1 2 4 7 9 9
|
||
|
```
|
||
|
|
||
|
And after shifting it rightwards, we check equality again, and find `C == F`, and thus
|
||
|
call `Next` on `C`
|
||
|
|
||
|
```
|
||
|
A B D E F C
|
||
|
|
||
|
1 2 4 7 9 -
|
||
|
```
|
||
|
At this point, `C` was exhausted, and is removed
|
||
|
|
||
|
```
|
||
|
A B D E F
|
||
|
|
||
|
1 2 4 7 9
|
||
|
```
|
||
|
And we're done with this step.
|
||
|
|