mirror of
https://github.com/logos-storage/logos-storage-nim.git
synced 2026-01-03 22:13:12 +00:00
25 lines
646 B
Nim
25 lines
646 B
Nim
|
|
import stew/ptrops
|
||
|
|
|
||
|
|
type SharedBuf*[T] = object
|
||
|
|
payload*: ptr UncheckedArray[T]
|
||
|
|
len*: int
|
||
|
|
|
||
|
|
proc view*[T](_: type SharedBuf, v: openArray[T]): SharedBuf[T] =
|
||
|
|
if v.len > 0:
|
||
|
|
SharedBuf[T](payload: makeUncheckedArray(addr v[0]), len: v.len)
|
||
|
|
else:
|
||
|
|
default(SharedBuf[T])
|
||
|
|
|
||
|
|
template checkIdx(v: SharedBuf, i: int) =
|
||
|
|
doAssert i > 0 and i <= v.len
|
||
|
|
|
||
|
|
proc `[]`*[T](v: SharedBuf[T], i: int): var T =
|
||
|
|
v.checkIdx(i)
|
||
|
|
v.payload[i]
|
||
|
|
|
||
|
|
template toOpenArray*[T](v: SharedBuf[T]): var openArray[T] =
|
||
|
|
v.payload.toOpenArray(0, v.len - 1)
|
||
|
|
|
||
|
|
template toOpenArray*[T](v: SharedBuf[T], s, e: int): var openArray[T] =
|
||
|
|
v.toOpenArray().toOpenArray(s, e)
|