You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
2.0 KiB
64 lines
2.0 KiB
3 years ago
|
# rope-sequence
|
||
|
|
||
|
This module implements a single data type, `RopeSequence`, which is a
|
||
|
persistent sequence type implemented as a loosely-balanced
|
||
|
[rope](https://www.cs.rit.edu/usr/local/pub/jeh/courses/QUARTERS/FP/Labs/CedarRope/rope-paper.pdf).
|
||
|
It supports appending, prepending, and slicing without doing a full
|
||
|
copy. Random access is somewhat more expensive than in an array
|
||
|
(logarithmic, with some overhead), but should still be relatively
|
||
|
fast.
|
||
|
|
||
|
Licensed under the MIT license.
|
||
|
|
||
|
## class `RopeSequence<T>`
|
||
|
|
||
|
`static `**`from`**`(?union<[T], RopeSequence<T>>) → RopeSequence<T>`
|
||
|
|
||
|
Create a rope representing the given array, or return the rope itself
|
||
|
if a rope was given.
|
||
|
|
||
|
`static `**`empty`**`: RopeSequence<T>`
|
||
|
|
||
|
The empty rope.
|
||
|
|
||
|
**`length`**`: number`
|
||
|
|
||
|
The length of the rope.
|
||
|
|
||
|
**`append`**`(union<[T], RopeSequence<T>>) → RopeSequence<T>`
|
||
|
|
||
|
Append an array or other rope to this one, returning a new rope.
|
||
|
|
||
|
**`prepend`**`(union<[T], RopeSequence<T>>) → RopeSequence<T>`
|
||
|
|
||
|
Prepend an array or other rope to this one, returning a new rope.
|
||
|
|
||
|
**`slice`**`(from: ?number = 0, to: ?number = this.length) → RopeSequence<T>`
|
||
|
|
||
|
Create a rope repesenting a sub-sequence of this rope.
|
||
|
|
||
|
**`get`**`(index: number) → T`
|
||
|
|
||
|
Retrieve the element at the given position from this rope.
|
||
|
|
||
|
**`forEach`**`(f: fn(element: T, index: number) → ?bool, from: ?number, to: ?number)`
|
||
|
|
||
|
Call the given function for each element between the given indices.
|
||
|
This tends to be more efficient than looping over the indices and
|
||
|
calling `get`, because it doesn't have to descend the tree for every
|
||
|
element.
|
||
|
|
||
|
`to` may be less then `from`, in which case the iteration will happen
|
||
|
in reverse (starting at index `from - 1`, down to index `to`.
|
||
|
|
||
|
The iteration function may return `false` to abort iteration early.
|
||
|
|
||
|
**`map`**`(f: fn(element: T, index: number) → U, from: ?number, to: ?number) → [U]`
|
||
|
|
||
|
Map the given functions over the elements of the rope, producing a
|
||
|
flat array.
|
||
|
|
||
|
**`flatten`**`() → [T]`
|
||
|
|
||
|
Return the content of this rope as an array.
|