From 90abbac26b6dc2b1f784bc27d6418dcdcfa9e50e Mon Sep 17 00:00:00 2001 From: Alberto Torres Date: Tue, 10 Sep 2024 00:52:39 +0200 Subject: [PATCH] SliceMem: change `newSliceMem(ptr, len...)` to match an example, add another. --- libs/arr_ref/slice_mem.nim | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/libs/arr_ref/slice_mem.nim b/libs/arr_ref/slice_mem.nim index 4c41c22..e62d4dc 100644 --- a/libs/arr_ref/slice_mem.nim +++ b/libs/arr_ref/slice_mem.nim @@ -35,7 +35,8 @@ proc newSliceMem*[T, U](container: sink U; p: pointer, byte_len: int): SliceMem[ ## Create a SliceMem from a container, a pointer, and a length in bytes. runnableExamples: let x = @[1,2,3,4,5] - let s = newSliceMem(x, x[0].addr, x.len * sizeof(x[0])) + # You can omit the [int] here because the container is iterable + let s = newSliceMem[int](x, x[0].addr, x.len * sizeof(x[0])) result = SliceMem[T]( data: cast[ptr UncheckedArray[T]](p), @@ -48,9 +49,9 @@ proc newSliceMem*[T, U](container: sink U; p: pointer, byte_len: int): SliceMem[ ), ) -proc newSliceMem*[T](p: ptr T, byte_len: int, destructor: proc() {.closure, raises: [].}): SliceMem[T] = - ## Create a SliceMem from a pointer to a type, a length in bytes, and a - ## destructor closure. +proc newSliceMem*[T](p: ptr T, len: int, destructor: proc() {.closure, raises: [].}): SliceMem[T] = + # Create a SliceMem from a pointer to a type, a length, and a destructor + # closure. runnableExamples: let x = createShared(int, 5) proc destroy() = deallocShared(x) @@ -58,7 +59,7 @@ proc newSliceMem*[T](p: ptr T, byte_len: int, destructor: proc() {.closure, rais result = SliceMem[T]( data: cast[ptr UncheckedArray[T]](p), - byte_len: byte_len, + byte_len: len * sizeof(T), destroy_ref: (ref CustomDestructor)(destroy: destructor), ) @@ -85,6 +86,11 @@ proc newSliceMem*[T, U](container: sink U; first, last: pointer): SliceMem[T] = proc newSliceMem*[T](size: int): SliceMem[T] = ## Create a SliceMem from new memory, similar to ArrRef[T]. + runnableExamples: + let s = newSliceMem[int](10) + for i,n in s.mpairs: + n = (i+1)*11 + doAssert $s == "SliceMem([11, 22, 33, 44, 55, 66, 77, 88, 99, 110])" var r: ref byte unsafeNew(r, size * sizeof(T)) result = SliceMem[T](