package rope
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=335e1f88ff410e2cf7584a0ca8026a65a5e4e0fa19f19d588ce93e17def3d396
sha512=01b089920716dc0e8182fb746bc604f4315f79f5e8c448924000e7eb8c278f71d99e1736a422b0a3f293b01ee312b8b3176493583883c781d446f433c1557ea5
doc/rope/Rope/index.html
Module Rope
Source
Ropes ("heavyweight strings") are a scalable string implementation.
Ropes are designed for efficient operation that involve the string as a whole. Operations such as concatenation, and substring take time that is nearly independent of the length of the string. Unlike strings, ropes are a reasonable representation for very long strings such as edit buffers or mail messages.
Features:
- No length limitation (contrarily to strings);
- Immutability (use
Rope.Buffer
to incrementally build ropes); - Efficient concatenation (
Rope.concat2
) and splice (Rope.sub
); - Share memory whenever possible.
Disadvantages:
get
is not O(1) — but it is amortized O(1) if you use an iterator (see theRope.Iterator
module).Rope.get
is 2 to 3 times slower than for a string so it should not be your main operation. However, as soon as in addition you have a few concatenations (especially with sharing) or splice operations, ropes will usually outperform strings.
You can say module String = Rope
to use ropes instead of strings and, in particular, so that r.[i]
gets the i
th char of the rope r
. This module has all non-deprecated operations of String
. It additionally features Rope.Buffer
and Rope.Iterator
modules.
To use this library in the toploop (REPL), issue #require "rope.top";;
.
Immutable rope.
Raised by various functions to indicate out-of-bounds access. The string argument is the name of the function that raised it.
Basics (creation, access,...)
of_substring s start len
create a rope from the substring s.[start .. start+len-1]
.
of_char c
returns a rope consisting of the unique character c
. It may be useful to append a char to a given rope.
init len f
returns a rope of length len
with entry of index i
filled with f i
.
sub r i start len
returns the sub-rope consisting of characters from position start
to start+len-1
(included) of the rope r
. O(log(length r)) time.
blit src srcoff dst dstoff len
copies len
bytes from the rope src
starting at index srcoff
, to sequence dst
, starting at index dstoff
.
concat sep rl
concatenates the list of ropes rl
, inserting the separator string sep
between each.
iter f r
execute f c
for c
going through every character of rope r
from left to right.
iter f r
execute f i c
for c
going through every character of rope r
from left to right and i
the index of c
.
map f r
applies function f
in turn to all the characters of r
(in increasing index order) and stores the results in a new string that is returned.
Same as map
but the function f
is passed the index i
of the char.
Return a copy of the argument, without leading and trailing whitespace. The characters regarded as whitespace are: ' '
, '\012'
, '\n'
, '\r'
, and '\t'
.
Return a copy of the argument, with special characters represented by escape sequences, following the lexical conventions of Objective Caml.
Search char
index r c
returns the position of the leftmost occurrence of character c
in rope r
.
index r c
returns Some i
where i
is the position of the leftmost occurrence of character c
in rope r
and None
if c
does not occur in r
.
rindex r c
returns the position of the rightmost occurrence of character c
in rope r
.
rindex_opt r c
returns Some i
where i
is the position of the rightmost occurrence of character c
in rope r
or None
if c
does not occur in r
.
Same as Rope.index
, but start searching at the character position given as second argument. Rope.index r c
is equivalent to Rope.index_from r 0 c
.
Same as Rope.index_opt
, but start searching at the character position given as second argument. Rope.index_opt r c
is equivalent to Rope.index_from_opt r 0 c
.
Same as Rope.rindex
, but start searching at the character position given as second argument. Rope.rindex r c
is equivalent to Rope.rindex_from s (Rope.length r - 1) c
.
Same as Rope.rindex_opt
, but start searching at the character position given as second argument. Rope.rindex_opt r c
is equivalent to Rope.rindex_from_opt s (Rope.length r - 1) c
.
contains_from r start c
tests if character c
appears in the subrope of r
starting from start
to the end of s
.
rcontains_from r stop c
tests if character c
appears in the subrope of r
starting from the beginning of r
to index stop
.
Search substring
search_forward_string p
is a search function that, given a rope r
and a start index i0
, will return the position of p
in r
or raise Not_found
if no occurrence of p
in r
exists. let search = search_forward_string p
takes O(length p) and search r i0
takes O(length r - i0).
ASCII letter case
Return the argument with all lowercase letters translated to uppercase, including accented letters of the ISO Latin-1 (8859-1) character set.
Return the argument with all uppercase letters translated to lowercase, including accented letters of the ISO Latin-1 (8859-1) character set.
Ordering
The comparison function for ropes, with the same specification as Pervasives.compare
. Along with the type t
, this function compare
allows the module Rope
to be passed as argument to the functors Set.Make
and Map.Make
.
equal r1 r2
tells whether the two ropes r1
and r2
are equal. (It is equivalent to compare r1 r2 = 0
, just slightly faster.)
Input/output
Input and output functions for ropes modelled on the standard library Pervasives
.
Read characters from the given input channel, until a newline character is encountered. Return the rope of all characters read, without the newline character at the end.
Flush standard output, then read characters from standard input until a newline character is encountered. Return the rope of all characters read, without the newline character at the end.
Print a rope, followed by a newline character, on standard output and flush standard output.
Print a rope, followed by a newline character on standard error and flush standard error.
output_rope oc r
outputs the rope r
to the output channel oc
. May also be used with a %a
directive of printf.
Alias for Rope.output_rope
to be a drop in replacement for strings.
Balancing
balance r
return a balanced copy of the rope r
. Implicit rebalancing is done by some of the above functions to avoid gross inefficiencies but you may want to call this function explicitely to try to improve your running times.
depth r
returns the depth of the rope r
. This information may be useful to decide whether you want to re-balance.
The rope will be rebalanced by some functions it its height is greater or equal to rebalancing_height
.
Iterator
Iterators for ropes. It is more efficient to use an iterator to perform small steps and get the characters than to use Rope.get
repeatedly.
Buffer
This is similar to the Buffer
module in the standard library except that it constructs ropes. It is recommended to use this module instead of repeatedly concatenating chars.
REPL
Toploop printer and its configuration.