Source Edit

This module provides some high performance string operations.

Experimental API, subject to change.

Procs

  1. proc add(x: var string; y: openArray[char]) {....raises: [], tags: [], forbids: [].}

Concatenates x and y in place. y must not overlap with x to allow future memcpy optimizations. Source Edit

  1. func setSlice(s: var string; slice: Slice[int]) {....raises: [], tags: [],
  2. forbids: [].}

Inplace version of substr.

Example:

  1. import std/sugar
  2. var a = "Hello, Nim!"
  3. doAssert a.dup(setSlice(7 .. 9)) == "Nim"
  4. doAssert a.dup(setSlice(0 .. 0)) == "H"
  5. doAssert a.dup(setSlice(0 .. 1)) == "He"
  6. doAssert a.dup(setSlice(0 .. 10)) == a
  7. doAssert a.dup(setSlice(1 .. 0)).len == 0
  8. doAssert a.dup(setSlice(20 .. -1)).len == 0
  9. doAssertRaises(AssertionDefect):
  10. discard a.dup(setSlice(-1 .. 1))
  11. doAssertRaises(AssertionDefect):
  12. discard a.dup(setSlice(1 .. 11))

Source Edit

  1. func strip(a: var string; leading = true; trailing = true;
  2. chars: set[char] = whitespaces) {.inline, ...raises: [], tags: [],
  3. forbids: [].}

Inplace version of strip. Strips leading or trailing chars (default: whitespace characters).

If leading is true (default), leading chars are stripped. If trailing is true (default), trailing chars are stripped. If both are false, the string is unchanged.

Example:

  1. var a = " vhellov "
  2. strip(a)
  3. assert a == "vhellov"
  4. a = " vhellov "
  5. a.strip(leading = false)
  6. assert a == " vhellov"
  7. a = " vhellov "
  8. a.strip(trailing = false)
  9. assert a == "vhellov "
  10. var c = "blaXbla"
  11. c.strip(chars = {'b', 'a'})
  12. assert c == "laXbl"
  13. c = "blaXbla"
  14. c.strip(chars = {'b', 'a', 'l'})
  15. assert c == "X"

Source Edit