From 9f13d4bc354ef5bdca7df391607ac189dec3eb35 Mon Sep 17 00:00:00 2001 From: Jaremy Creechley Date: Fri, 16 Feb 2024 15:40:06 -0700 Subject: [PATCH] adds string support --- src/apatheia/jobs.nim | 8 ++++++++ src/apatheia/memretainers.nim | 2 +- tests/tjobs.nim | 10 +++++++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/apatheia/jobs.nim b/src/apatheia/jobs.nim index 3964e42..74a677e 100644 --- a/src/apatheia/jobs.nim +++ b/src/apatheia/jobs.nim @@ -100,6 +100,14 @@ template checkJobArgs*[T](exp: seq[T], fut: untyped): OpenArrayHolder[T] = else: {.error: "unsupported sequence type for job argument: " & $typeof(seq[T]).} +template checkJobArgs*(exp: string, fut: untyped): OpenArrayHolder[char] = + let rval = StrRetainer(data: exp) + retainMemory(fut.jobId(), rval) + let expPtr = OpenArrayHolder[char]( + data: cast[ptr UncheckedArray[char]](unsafeAddr(rval.data[0])), size: rval.data.len() + ) + expPtr + template checkJobArgs*(exp: typed, fut: untyped): auto = exp diff --git a/src/apatheia/memretainers.nim b/src/apatheia/memretainers.nim index f379b89..8a5d581 100644 --- a/src/apatheia/memretainers.nim +++ b/src/apatheia/memretainers.nim @@ -9,7 +9,7 @@ type SeqRetainer*[T] = ref object of Retainer data*: seq[T] - StrRetainer*[T] = ref object of Retainer + StrRetainer* = ref object of Retainer data*: string var memoryRetainerTable = newTable[uint, seq[Retainer]]() diff --git a/tests/tjobs.nim b/tests/tjobs.nim index 1bbcab1..de6e35c 100644 --- a/tests/tjobs.nim +++ b/tests/tjobs.nim @@ -28,6 +28,9 @@ proc addNumValues(jobResult: JobResult[float], base: float, vals: OpenArrayHolde res += x discard jobResult.queue.send((jobResult.id, res,)) +proc strCompute(jobResult: JobResult[int], vals: OpenArrayHolder[char]) = + discard jobResult.queue.send((jobResult.id, vals.size,)) + proc addStrings(jobResult: JobResult[float], vals: OpenArrayHolder[string]) = discard @@ -45,11 +48,16 @@ suite "async tests": check res == 3.0 - asyncTest "testing arrays": + asyncTest "testing seq": var jobs = newJobQueue[float](taskpool = tp) let res = await jobs.submit(addNumValues(10.0, @[1.0.float, 2.0])) check res == 13.0 + asyncTest "testing string": + var jobs = newJobQueue[int](taskpool = tp) + let res = await jobs.submit(strCompute("hello world!")) + check res == 12 + asyncTest "testing arrays": var jobs = newJobQueue[float](taskpool = tp) let fut1 = jobs.submit(addNumValues(10.0, @[1.0.float, 2.0]))