mirror of
https://github.com/logos-storage/apatheia.git
synced 2026-01-08 16:03:08 +00:00
updates
This commit is contained in:
parent
b53cced09e
commit
1e75c8458e
@ -50,6 +50,11 @@ type
|
|||||||
template toOpenArray*[T](arr: OpenArrayHolder[T]): auto =
|
template toOpenArray*[T](arr: OpenArrayHolder[T]): auto =
|
||||||
system.toOpenArray(arr.data, 0, arr.size)
|
system.toOpenArray(arr.data, 0, arr.size)
|
||||||
|
|
||||||
|
proc toArrayHolder*[T](data: seq[T]): OpenArrayHolder[T] =
|
||||||
|
OpenArrayHolder[T](
|
||||||
|
data: cast[ptr UncheckedArray[T]](unsafeAddr(data[0])), size: data.len()
|
||||||
|
)
|
||||||
|
|
||||||
func jobId*[T](fut: Future[T]): JobId =
|
func jobId*[T](fut: Future[T]): JobId =
|
||||||
JobId fut.id()
|
JobId fut.id()
|
||||||
|
|
||||||
@ -93,9 +98,7 @@ template checkJobArgs*[T](exp: seq[T], fut: untyped): OpenArrayHolder[T] =
|
|||||||
when T is SupportedSeqTypes:
|
when T is SupportedSeqTypes:
|
||||||
let rval = SeqRetainer[T](data: exp)
|
let rval = SeqRetainer[T](data: exp)
|
||||||
retainMemory(fut.jobId(), rval)
|
retainMemory(fut.jobId(), rval)
|
||||||
let expPtr = OpenArrayHolder[T](
|
let expPtr = toArrayHolder(rval.data)
|
||||||
data: cast[ptr UncheckedArray[T]](unsafeAddr(rval.data[0])), size: rval.data.len()
|
|
||||||
)
|
|
||||||
expPtr
|
expPtr
|
||||||
else:
|
else:
|
||||||
{.error: "unsupported sequence type for job argument: " & $typeof(seq[T]).}
|
{.error: "unsupported sequence type for job argument: " & $typeof(seq[T]).}
|
||||||
@ -103,9 +106,7 @@ template checkJobArgs*[T](exp: seq[T], fut: untyped): OpenArrayHolder[T] =
|
|||||||
template checkJobArgs*(exp: string, fut: untyped): OpenArrayHolder[char] =
|
template checkJobArgs*(exp: string, fut: untyped): OpenArrayHolder[char] =
|
||||||
let rval = StrRetainer(data: exp)
|
let rval = StrRetainer(data: exp)
|
||||||
retainMemory(fut.jobId(), rval)
|
retainMemory(fut.jobId(), rval)
|
||||||
let expPtr = OpenArrayHolder[char](
|
let expPtr = toArrayHolder(rval.data)
|
||||||
data: cast[ptr UncheckedArray[char]](unsafeAddr(rval.data[0])), size: rval.data.len()
|
|
||||||
)
|
|
||||||
expPtr
|
expPtr
|
||||||
|
|
||||||
template checkJobArgs*(exp: typed, fut: untyped): auto =
|
template checkJobArgs*(exp: typed, fut: untyped): auto =
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import chronos/unittest2/asynctests
|
|||||||
import taskpools
|
import taskpools
|
||||||
|
|
||||||
import apatheia/queues
|
import apatheia/queues
|
||||||
|
import apatheia/jobs
|
||||||
|
|
||||||
type
|
type
|
||||||
DataObj = ref object
|
DataObj = ref object
|
||||||
@ -14,8 +15,8 @@ type
|
|||||||
|
|
||||||
proc worker(data: OpenArrayHolder[char], queue: SignalQueue[int]) =
|
proc worker(data: OpenArrayHolder[char], queue: SignalQueue[int]) =
|
||||||
os.sleep(1_000)
|
os.sleep(1_000)
|
||||||
echo "worker: ", data
|
echo "worker: ", data.toOpenArray()
|
||||||
discard queue.send(data.len())
|
discard queue.send(data.toOpenArray().len())
|
||||||
|
|
||||||
proc finalizer(obj: DataObj) =
|
proc finalizer(obj: DataObj) =
|
||||||
echo "FINALIZE!!"
|
echo "FINALIZE!!"
|
||||||
@ -27,7 +28,7 @@ proc runTest(tp: TaskPool, queue: SignalQueue[int]) {.async.} =
|
|||||||
obj.data = "hello world!".toSeq
|
obj.data = "hello world!".toSeq
|
||||||
|
|
||||||
echo "spawn worker"
|
echo "spawn worker"
|
||||||
tp.spawn worker(obj.data, queue)
|
tp.spawn worker(toArrayHolder(obj.data), queue)
|
||||||
|
|
||||||
let res =
|
let res =
|
||||||
await wait(queue).wait(100.milliseconds)
|
await wait(queue).wait(100.milliseconds)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user