Spec-Zone.ru › Nim
std/ropes Source Edit Этот модуль содержит поддержку типа данных веревка . Веревки могут эффективно представлять очень длинные строки; в частности, конкатенация выполняется за O(1), а не за O(n). По сути, это деревья конкатенации, которые сжимаются только при преобразовании в обычную строку Nim. Пустая строка представлена nil . Веревки являются неизменяемыми, и поддеревья могут быть объединены без копирования. Листья могут быть кэшированы для повышения эффективности памяти за счет производительности выполнения.
Импорты потоки Типы Rope {.acyclic.} = ref object Тип данных веревки. Пустая веревка представлена nil . Source Edit Процедуры proc `$`(r: Rope): string {....gcsafe, extern: "nroToString", raises: [], tags: [],
forbids: [].} Преобразует веревку обратно в строку. Source Edit proc `%`(frmt: string; args: openArray[Rope]): Rope {....gcsafe,
extern: "nroFormat", raises: [ValueError], tags: [], forbids: [].} Оператор подстановки % для веревок. Не поддерживает обозначения $ 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"
let r3 = "${1} ${2} ${3}" % [rope("Nim"), rope("is"), rope("a great language")]
doAssert $r3 == "Nim is a great language" Source Edit proc `&`(a, b: Rope): Rope {....gcsafe, extern: "nroConcRopeRope", raises: [],
tags: [], forbids: [].} Оператор конкатенации для веревок. Пример:
let r = rope("Hello, ") & rope("Nim!")
doAssert $r == "Hello, Nim!" Source Edit proc `&`(a: openArray[Rope]): Rope {....gcsafe, extern: "nroConcOpenArray",
raises: [], tags: [], forbids: [].} Оператор конкатенации для openArray веревок. Пример:
let r = &[rope("Hello, "), rope("Nim"), rope("!")]
doAssert $r == "Hello, Nim!" Source Edit proc `&`(a: Rope; b: string): Rope {....gcsafe, extern: "nroConcRopeStr",
raises: [], tags: [], forbids: [].} Оператор конкатенации для веревок. Пример:
let r = rope("Hello, ") & "Nim!"
doAssert $r == "Hello, Nim!" Source Edit proc `&`(a: string; b: Rope): Rope {....gcsafe, extern: "nroConcStrRope",
raises: [], tags: [], forbids: [].} Оператор конкатенации для веревок. Пример:
let r = "Hello, " & rope("Nim!")
doAssert $r == "Hello, Nim!" Source Edit proc `[]`(r: Rope; i: int): char {....gcsafe, extern: "nroCharAt", raises: [],
tags: [], forbids: [].} Возвращает символ в позиции i в веревке r . Это довольно дорого! В худшем случае: O(n). Если i >= r . len or i < 0 , возвращается \ 0 . Пример:
let r = rope("Hello, Nim!")
doAssert r[0] == 'H'
doAssert r[7] == 'N'
doAssert r[22] == '\0' Source Edit proc add(a: var Rope; b: Rope) {....gcsafe, extern: "nro$1Rope", raises: [],
tags: [], forbids: [].} Добавляет b к веревке a . Пример:
var r = rope("Hello, ")
r.add(rope("Nim!"))
doAssert $r == "Hello, Nim!" Source Edit proc add(a: var Rope; b: string) {....gcsafe, extern: "nro$1Str", raises: [],
tags: [], forbids: [].} Добавляет b к веревке a . Пример:
var r = rope("Hello, ")
r.add("Nim!")
doAssert $r == "Hello, Nim!" Source Edit proc addf(c: var Rope; frmt: string; args: openArray[Rope]) {....gcsafe,
extern: "nro$1", raises: [ValueError], tags: [], forbids: [].} Сокращение для 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" Source Edit proc disableCache() {....gcsafe, extern: "nro$1", raises: [], tags: [], forbids: [].} Кэш отбрасывается и отключается. GC повторно использует используемую память. Source Edit proc enableCache() {....gcsafe, extern: "nro$1", raises: [], tags: [], forbids: [].} Включает кеширование листьев. Это уменьшает объем занимаемой памяти за счет эффективности выполнения. Source Edit proc equalsFile(r: Rope; f: File): bool {....gcsafe, extern: "nro$1File",
raises: [IOError], tags: [ReadIOEffect], forbids: [].} Возвращает true, если содержимое файла f равно r . Source Edit proc equalsFile(r: Rope; filename: string): bool {....gcsafe, extern: "nro$1Str",
raises: [IOError], tags: [ReadIOEffect], forbids: [].} Возвращает true, если содержимое файла f равно r . Если файла f не существует, возвращается false. Source Edit proc len(a: Rope): int {....gcsafe, extern: "nro$1", raises: [], tags: [],
forbids: [].} Длина веревки. Source Edit proc rope(f: BiggestFloat): Rope {....gcsafe, extern: "nro$1BiggestFloat",
raises: [], tags: [], forbids: [].} Преобразует число с плавающей точкой в веревку. Пример:
let r = rope(4.29)
doAssert $r == "4.29" Source Edit proc rope(i: BiggestInt): Rope {....gcsafe, extern: "nro$1BiggestInt", raises: [],
tags: [], forbids: [].} Преобразует целое число в веревку. Пример:
let r = rope(429)
doAssert $r == "429" Source Edit proc rope(s: string = ""): Rope {....gcsafe, extern: "nro$1Str", raises: [],
tags: [], forbids: [].} Преобразует строку в веревку. Пример:
let r = rope("I'm a rope")
doAssert $r == "I'm a rope" Source Edit proc write(f: File; r: Rope) {....gcsafe, extern: "nro$1", raises: [IOError],
tags: [WriteIOEffect], forbids: [].} Записывает веревку в файл. Source Edit proc write(s: Stream; r: Rope) {....gcsafe, extern: "nroWriteStream",
raises: [IOError, OSError],
tags: [WriteIOEffect], forbids: [].} Записывает веревку в поток. Source Edit Итераторы iterator items(r: Rope): char {....raises: [], tags: [], forbids: [].} Итерирует по любому символу в веревке r . Source Edit iterator leaves(r: Rope): string {....raises: [], tags: [], forbids: [].} Итерирует по любой строке-листьям в веревке 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) Source Edit