From 9ad57df473432b5efba46d52440eb0e1400e1e36 Mon Sep 17 00:00:00 2001 From: Zahary Karadjov Date: Fri, 16 Feb 2018 16:58:46 +0200 Subject: [PATCH] obtain mem ranges from strings and sequences --- .gitignore | 6 ++++++ ranges/memranges.nim | 17 ++++++++--------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index 67d9b34..68e6fec 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,7 @@ +# ignore all executable files +* +!*.* +!*/ + nimcache/ + diff --git a/ranges/memranges.nim b/ranges/memranges.nim index 8df5e20..fe0a28c 100644 --- a/ranges/memranges.nim +++ b/ranges/memranges.nim @@ -10,16 +10,15 @@ template len*(mr: MemRange): int = mr.size template `[]`*(mr: MemRange, idx: int): byte = (cast[ptr byte](shift(mr.start, idx)))[] proc baseAddr*(mr: MemRange): pointer = mr.start -when false: - # XXX: Alternative definition that crashes the compiler. Investigate - type - MemRange* = distinct (pointer, csize) - - template len*(mr: MemRange): int = mr[1] - template `[]`*(mr: MemRange, idx: int): byte = (cast[ptr byte](shift(mr[0], idx)))[] - proc baseAddr*(mr: MemRange): pointer = mr[0] - proc makeMemRange*(start: pointer, size: csize): MemRange = result.start = start result.size = size +proc toMemRange*(x: string): MemRange = + result.start = x.cstring.pointer + result.size = x.len + +proc toMemRange*[T](x: openarray[T]): MemRange = + result.start = cast[pointer](x) + result.size = x.len * T.sizeof +