const N = 50000
proc pass(data: var array[N, uint64], shift: uint64) =
...
proc radix*(data: var array[N, uint64]) =
for i in 0'u64 .. 63'u64:
pass(data, i)
I would like to make N variable (but known at compile time). I have tried to change the signatures in
const N = 50000
proc pass[N: static[int]](data: var array[N, uint64], shift: uint64) =
...
proc radix*[N: static[int]](data: var array[N, uint64]) =
for i in 0'u64 .. 63'u64:
pass(data, i)
but when I try to invoke it like
var data: array[50000, uint64]
# populate data
radix(data)
I get an error saying: Error: internal error: cannot generate code for: N. Is there a way to leave N as a parameter?
(I have tried to use openarray, but in the body of pass I need two auxiliary arrays of the same size as data)
import unsigned
type sarray[N: static[int], T] = array[N, T]
proc pass[N](data: var sarray[N, uint64], shift: uint64) =
discard
proc radix*[N](data: var sarray[N, uint64]) =
for i in 0'u64 .. 63'u64:
pass(data, i)
var data: array[50000, uint64]
radix(data)