var sz: array[64, byte] = [ 1,2,3,4] # add this init array method pls ...
# want 4 byte after all zero but I only have 30 byte val want set it.
# really dont like manual copy input var [1,2,3,4,0,0,0,0,0,0,0,0,0,0,0 ...]
# -------------
# ↓ I use this method in proj, looks like very cumbersome and unattractive
var ssz: array[64, byte] # ssz must 64byte, use ssz[0xF] will crash if haven't
var tssz = [1,2,3,4]
CopyMem(ssz, tssz, tssz.len)
# want easy init like this
var ssz[64, byte] = [1,2,3,4, ...0 ] after all 0, and [ 1,2,3,4, ...0xf] 4byte after all 0xf
Icon array byte size is too large, use two array and memcpy first array really slow It's not any more attractive but it removes the overhead of copying memory at runtime:
proc `[]=`*[T](arr: var openArray[T], slice: Slice[int], val: T) =
for x in slice:
arr[x] = val
proc `[]=`*[T](arr: var openArray[T], slice: HSlice[int, BackwardsIndex], val: T) =
for x in slice.a.. arr.len - int(slice.b):
arr[x] = val
proc `[]=`*[T](arr: var openArray[T], slice: HSlice[int, BackwardsIndex], val: openArray[T]) =
for x in slice.a.. arr.len - int(slice.b):
arr[x] = val[x - slice.a]
proc `[]=`*[T](arr: var openArray[T], slice: Slice[BackwardsIndex], val: openArray[T]) =
for x in arr.len - int(slice.a) .. arr.len - int(slice.b):
arr[x] = val[x - arr.len - int(slice.a)]
proc `[]=`*[T](arr: var openArray[T], slice: Slice[int], val: openArray[T]) =
for x in slice.a..slice.b:
arr[x] = val[x - slice.a]
var sz = static:
var val: array[64, byte]
val[0..3] = [1u8, 2, 3, 4]
val
echo sz
var ssz = static: # Do this at CT instead of runtime
var val: array[64, byte]
val[0..3] = [1u8, 2, 3, 4]
val[4..^1] = 0xf
val
echo ssz