mirror of
https://github.com/logos-storage/apatheia.git
synced 2026-01-07 15:33:09 +00:00
reworking seq holder
This commit is contained in:
parent
c994ead5a5
commit
5ad38d5f44
@ -81,10 +81,10 @@ template checkJobArgs*[T](exp: seq[T], fut: untyped): OpenArrayHolder[T] =
|
|||||||
# echo "checkJobArgs::SEQ: ", $typeof(exp)
|
# echo "checkJobArgs::SEQ: ", $typeof(exp)
|
||||||
let rval = SeqHolder[T](data: exp)
|
let rval = SeqHolder[T](data: exp)
|
||||||
let expPtr = OpenArrayHolder[T](data: cast[ptr UncheckedArray[T]](unsafeAddr(rval.data[0])), size: rval.data.len())
|
let expPtr = OpenArrayHolder[T](data: cast[ptr UncheckedArray[T]](unsafeAddr(rval.data[0])), size: rval.data.len())
|
||||||
fut.addCallback proc(data: pointer) =
|
# fut.addCallback proc(data: pointer) =
|
||||||
## keep the rval GC object alive for duration of the job
|
# ## keep the rval GC object alive for duration of the job
|
||||||
discard rval.data.len()
|
# discard rval.data.len()
|
||||||
echo "FREE RVaL: ", rval.data.len()
|
# echo "FREE RVaL: ", rval.data.len()
|
||||||
## TODO: how to handle cancellations?
|
## TODO: how to handle cancellations?
|
||||||
expPtr
|
expPtr
|
||||||
|
|
||||||
@ -103,14 +103,29 @@ macro submitMacro(tp: untyped, jobs: untyped, exp: untyped): untyped =
|
|||||||
let futName = ident("fut")
|
let futName = ident("fut")
|
||||||
let nm = newLit(repr(exp))
|
let nm = newLit(repr(exp))
|
||||||
|
|
||||||
|
var argids = newSeq[NimNode]()
|
||||||
|
var letargs = nnkLetSection.newTree()
|
||||||
|
for i, p in exp[1..^1]:
|
||||||
|
echo "CHECK ARGS: ", p.treeRepr
|
||||||
|
let id = ident "arg" & $i
|
||||||
|
argids.add(id)
|
||||||
|
let pn = nnkCall.newTree(ident"checkJobArgs", p, nil)
|
||||||
|
letargs.add nnkIdentDefs.newTree( id, newEmptyNode(), pn)
|
||||||
|
# fncall.add(nnkCall.newTree(ident"checkJobArgs", p, `futName`))
|
||||||
|
echo "\nSUBMIT: ARGS: LET:\n", letargs.repr
|
||||||
|
echo ""
|
||||||
|
|
||||||
var fncall = nnkCall.newTree(exp[0])
|
var fncall = nnkCall.newTree(exp[0])
|
||||||
fncall.add(jobRes)
|
fncall.add(jobRes)
|
||||||
for p in exp[1..^1]:
|
for p in argids:
|
||||||
echo "CHECK ARGS: ", p.treeRepr
|
fncall.add(p)
|
||||||
fncall.add(nnkCall.newTree(ident"checkJobArgs", p, `futName`))
|
# for p in exp[1..^1]:
|
||||||
|
# echo "CHECK ARGS: ", p.treeRepr
|
||||||
|
# fncall.add(nnkCall.newTree(ident"checkJobArgs", p, `futName`))
|
||||||
|
|
||||||
result = quote do:
|
result = quote do:
|
||||||
block:
|
block:
|
||||||
|
`letargs`
|
||||||
let (`jobRes`, `futName`) = createFuture(`jobs`, `nm`)
|
let (`jobRes`, `futName`) = createFuture(`jobs`, `nm`)
|
||||||
when typeof(`fncall`) isnot void:
|
when typeof(`fncall`) isnot void:
|
||||||
{.error: "Apatheia jobs cannot return values. The given proc returns type: " & $(typeof(`fncall`)) &
|
{.error: "Apatheia jobs cannot return values. The given proc returns type: " & $(typeof(`fncall`)) &
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user