This module contains support for a rope data type. Ropes can represent very long strings efficiently; especially concatenation is done in O(1) instead of O(n). They are essentially concatenation trees that are only flattened when converting to a native Nim string. The empty string is represented by nil
. Ropes are immutable and subtrees can be shared without copying. Leaves can be cached for better memory efficiency at the cost of runtime efficiency.
Rope = ref RopeObj
proc len(a: Rope): int {...}{.gcsafe, extern: "nro$1", raises: [], tags: [].}
proc rope(s: string = ""): Rope {...}{.gcsafe, extern: "nro$1Str", raises: [], tags: [].}
proc rope(i: BiggestInt): Rope {...}{.gcsafe, extern: "nro$1BiggestInt", raises: [], tags: [].}
proc rope(f: BiggestFloat): Rope {...}{.gcsafe, extern: "nro$1BiggestFloat", raises: [], tags: [].}
proc enableCache() {...}{.gcsafe, extern: "nro$1", raises: [], tags: [].}
proc disableCache() {...}{.gcsafe, extern: "nro$1", raises: [], tags: [].}
proc `&`(a, b: Rope): Rope {...}{.gcsafe, extern: "nroConcRopeRope", raises: [], tags: [].}
proc `&`(a: Rope; b: string): Rope {...}{.gcsafe, extern: "nroConcRopeStr", raises: [], tags: [].}
proc `&`(a: string; b: Rope): Rope {...}{.gcsafe, extern: "nroConcStrRope", raises: [], tags: [].}
proc `&`(a: openArray[Rope]): Rope {...}{.gcsafe, extern: "nroConcOpenArray", raises: [], tags: [].}
proc add(a: var Rope; b: Rope) {...}{.gcsafe, extern: "nro$1Rope", raises: [], tags: [].}
proc add(a: var Rope; b: string) {...}{.gcsafe, extern: "nro$1Str", raises: [], tags: [].}
proc `[]`(r: Rope; i: int): char {...}{.gcsafe, extern: "nroCharAt", raises: [], tags: [].}
i >= r.len
, \0
is returned. proc write(f: File; r: Rope) {...}{.gcsafe, extern: "nro$1", raises: [IOError], tags: [WriteIOEffect].}
proc write(s: Stream; r: Rope) {...}{.gcsafe, extern: "nroWriteStream", raises: [Exception], tags: [WriteIOEffect].}
proc `$`(r: Rope): string {...}{.gcsafe, extern: "nroToString", raises: [], tags: [].}
proc `%`(frmt: string; args: openArray[Rope]): Rope {...}{.gcsafe, extern: "nroFormat", raises: [ValueError], tags: [].}
$identifier
nor ${identifier}
notations. proc addf(c: var Rope; frmt: string; args: openArray[Rope]) {...}{.gcsafe, extern: "nro$1", raises: [ValueError], tags: [].}
add(c, frmt % args)
. proc equalsFile(r: Rope; f: File): bool {...}{.gcsafe, extern: "nro$1File", raises: [IOError], tags: [ReadIOEffect].}
proc equalsFile(r: Rope; filename: string): bool {...}{.gcsafe, extern: "nro$1Str", raises: [IOError], tags: [ReadIOEffect].}
iterator leaves(r: Rope): string {...}{.raises: [], tags: [].}
iterator items(r: Rope): char {...}{.raises: [], tags: [].}
© 2006–2018 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/ropes.html