Spec-Zone.ru › Nim 1

веревки

Этот модуль содержит поддержку типа данных веревка. Веревки могут эффективно представлять очень длинные строки; особенно конкатенация выполняется за 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API