nondescript/types/ndstring.nim

19 lines
583 B
Nim
Raw Normal View History

2022-01-28 04:17:11 +01:00
type
NdString* = ptr object
len: uint32
chars: UncheckedArray[char]
proc newString*(str: string): NdString =
let strlen = str.len()
let len = 4 + strlen
result = cast[NdString](alloc(len))
result.len = strlen.uint32
copyMem(result.chars[0].unsafeAddr, str[0].unsafeAddr, strlen)
proc `$`*(ndStr: NdString): string =
result = newString(ndStr.len.int)
copyMem(result[0].unsafeAddr, ndStr.chars[0].unsafeAddr, ndStr.len.int)
proc `&`*(left, right: NdString): NdString =
# TODO optimize this later when strings will be benchmarked
newString($left & $right)