веревки
Этот модуль содержит поддержку типа данных веревка. Веревки могут эффективно представлять очень длинные строки; особенно конкатенация выполняется за O(1) вместо O(n). По сути, это деревья конкатенации, которые сжимаются только при преобразовании в обычную строку Nim. Пустая строка представлена nil. Веревки неизменяемы, и поддеревья могут быть совмещены без копирования. Листья могут быть кэшированы для повышения эффективности памяти за счёт снижения производительности выполнения.
Импорты
- потоки
Типы
Rope = ref RopeObj
- пустая веревка представлена nil Исходный код Редактировать
Процедуры
proc len(a: Rope): int {...}{.gcsafe, extern: "nro$1", raises: [], tags: [].}- Длина веревки. Исходный код Редактировать
proc rope(s: string = ""): Rope {...}{.gcsafe, extern: "nro$1Str", raises: [], tags: [].}- Преобразует строку в веревку.
Пример:
var r = rope("I'm a rope") doAssert $r == "I'm a rope"Исходный код Редактировать proc rope(i: BiggestInt): Rope {...}{.gcsafe, extern: "nro$1BiggestInt", raises: [], tags: [].}- Преобразует целое число в веревку.
Пример:
var r = rope(429) doAssert $r == "429"
Исходный код Редактировать proc rope(f: BiggestFloat): Rope {...}{.gcsafe, extern: "nro$1BiggestFloat", raises: [], tags: [].}- Преобразует число с плавающей точкой в веревку.
Пример:
var r = rope(4.29) doAssert $r == "4.29"
Исходный код Редактировать proc enableCache() {...}{.gcsafe, extern: "nro$1", raises: [], tags: [].}- Включает кеширование листьев. Это уменьшает занимаемую память за счёт снижения производительности выполнения. Исходный код Редактировать
proc disableCache() {...}{.gcsafe, extern: "nro$1", raises: [], tags: [].}- Кэш удаляется и отключается. GC повторно использует используемую память. Исходный код Редактировать
proc `&`(a, b: Rope): Rope {...}{.gcsafe, extern: "nroConcRopeRope", raises: [], tags: [].}- Оператор конкатенации для веревок.
Пример:
var r1 = rope("Hello, ") r2 = rope("Nim!") let r = r1 & r2 doAssert $r == "Hello, Nim!"Исходный код Редактировать proc `&`(a: Rope; b: string): Rope {...}{.gcsafe, extern: "nroConcRopeStr", raises: [], tags: [].}- Оператор конкатенации для веревок.
Пример:
var r1 = rope("Hello, ") r2 = "Nim!" let r = r1 & r2 doAssert $r == "Hello, Nim!"Исходный код Редактировать proc `&`(a: string; b: Rope): Rope {...}{.gcsafe, extern: "nroConcStrRope", raises: [], tags: [].}- Оператор конкатенации для веревок.
Пример:
var r1 = "Hello, " r2 = rope("Nim!") let r = r1 & r2 doAssert $r == "Hello, Nim!"Исходный код Редактировать proc `&`(a: openArray[Rope]): Rope {...}{.gcsafe, extern: "nroConcOpenArray", raises: [], tags: [].}- Оператор конкатенации для массива веревок.
Пример:
let s = @[rope("Hello, "), rope("Nim"), rope("!")] let r = &s doAssert $r == "Hello, Nim!"Исходный код Редактировать proc add(a: var Rope; b: Rope) {...}{.gcsafe, extern: "nro$1Rope", raises: [], tags: [].}- Добавляет
bк веревкеa.Пример:
var r1 = rope("Hello, ") r2 = rope("Nim!") r1.add(r2) doAssert $r1 == "Hello, Nim!"Исходный код Редактировать proc add(a: var Rope; b: string) {...}{.gcsafe, extern: "nro$1Str", raises: [], tags: [].}- Добавляет
bк веревкеa.Пример:
var r1 = rope("Hello, ") r2 = "Nim!" r1.add(r2) doAssert $r1 == "Hello, Nim!"Исходный код Редактировать proc `[]`(r: Rope; i: int): char {...}{.gcsafe, extern: "nroCharAt", raises: [], tags: [].}- Возвращает символ в позиции
iв веревкеr. Это довольно дорого! В худшем случае: O(n). Еслиi >= r.len, возвращается\0.Пример:
let r1 = rope("Hello, Nim!") doAssert r1[0] == 'H' doAssert r1[7] == 'N' doAssert r1[22] == '\0' let r2 = rope("Hello") & rope(", Nim!") doAssert r2[0] == 'H' doAssert r2[7] == 'N' doAssert r2[22] == '\0'Исходный код Редактировать proc write(f: File; r: Rope) {...}{.gcsafe, extern: "nro$1", raises: [IOError], tags: [WriteIOEffect].}- Записывает веревку в файл. Исходный код Редактировать
proc write(s: Stream; r: Rope) {...}{.gcsafe, extern: "nroWriteStream", raises: [IOError, OSError], 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и${identifier}.Пример:
let r1 = "$1 $2 $3" % [rope("Nim"), rope("is"), rope("a great language")] doAssert $r1 == "Nim is a great language" let r2 = "$# $# $#" % [rope("Nim"), rope("is"), rope("a great language")] doAssert $r2 == "Nim is a great language"Исходный код Редактировать proc addf(c: var Rope; frmt: string; args: openArray[Rope]) {...}{.gcsafe, extern: "nro$1", raises: [ValueError], tags: [].}- Сокращение для
add(c, frmt % args).Пример:
var r = rope("Dash: ") r.addf "$1 $2 $3", [rope("Nim"), rope("is"), rope("a great language")] doAssert $r == "Dash: Nim is a great language"Исходный код Редактировать proc equalsFile(r: Rope; f: File): bool {...}{.gcsafe, extern: "nro$1File", raises: [IOError], tags: [ReadIOEffect].}- Возвращает true, если содержимое файла
fравноr. Исходный код Редактировать proc equalsFile(r: Rope; filename: string): bool {...}{.gcsafe, extern: "nro$1Str", raises: [IOError], tags: [ReadIOEffect].}- Возвращает true, если содержимое файла
fравноr. Еслиfне существует, возвращается false. Исходный код Редактировать
Итераторы
iterator leaves(r: Rope): string {...}{.raises: [], tags: [].}- Итерируется по любой строке листа в веревке
r.Пример:
let r = rope("Hello") & rope(", Nim!") let s = ["Hello", ", Nim!"] var index = 0 for leave in r.leaves: doAssert leave == s[index] inc indexИсходный код Редактировать iterator items(r: Rope): char {...}{.raises: [], tags: [].}- Итерируется по любому символу в веревке
r. Исходный код Редактировать
© 2006–2021 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/ropes.html