Skip to content

Commit

Permalink
Merge pull request #138 from godot-nim/feat-add-iterators-for-array-k…
Browse files Browse the repository at this point in the history
…inds

Feat: add iterators for Array kinds
  • Loading branch information
panno8M authored Dec 28, 2024
2 parents 42b145c + a9fda8f commit 44483fb
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 6 deletions.
29 changes: 23 additions & 6 deletions src/gdext/surface/arrayutils.nim
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,37 @@ import gdext/gen/[builtinclasses]
import std/sequtils

{.push, inline.}
proc setLen*(arr: var Array; newlen: Natural) =
proc setLen*(arr: var Array; newlen: int) =
discard arr.resize(newlen)
proc setLen*(arr: var TypedArray; newlen: Natural) =
proc setLen*(arr: var TypedArray; newlen: int) =
arr.Array.setlen(newlen)
proc len*(arr: Array): Natural = arr.size
proc len*(arr: TypedArray): Natural = arr.Array.len
proc len*(arr: Array): int = arr.size
proc len*(arr: TypedArray): int = arr.Array.len

proc setLen*(arr: var PackedArray; newlen: int) =
discard arr.resize(newlen)
proc len*(arr: PackedArray): int = arr.size
{.pop.}

iterator items*(arr: Array): Variant =
for i in 0..<arr.len: yield arr[i]
iterator pairs*(arr: Array): (int, Variant) =
for i in 0..<arr.len: yield (int i, arr[i])

iterator items*[T](arr: PackedArray[T]): T =
for i in 0..<arr.len: yield arr[i]
iterator pairs*[T](arr: PackedArray[T]): (int, T) =
for i in 0..<arr.len: yield (int i, arr[i])

iterator pairs*(arr: Array): (Natural, Variant) =
for i in 0..<arr.len: yield (Natural i, arr[i])
iterator mitems*(arr: var Array): var Variant =
for i in 0..<arr.len: yield arr[i]
iterator mpairs*(arr: var Array): (int, var Variant) =
for i in 0..<arr.len: yield (int i, arr[i])

iterator mitems*[T](arr: var PackedArray[T]): var T =
for i in 0..<arr.len: yield arr[i]
iterator mpairs*[T](arr: var PackedArray[T]): (int, var T) =
for i in 0..<arr.len: yield (int i, arr[i])

proc typedArray*[T: SomeVariant](arr: Array): TypedArray[T] =
when T is SomeBuiltins:
Expand Down
18 changes: 18 additions & 0 deletions testproject/runtime/nim/src/cases/primitives.nim
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,24 @@ runtime: suite "PackedArray":
let s: seq[byte] = bytes.toSeq
check s == @[byte 0, 1, 2, 3, 4, 5, 6, 7]

test "mutable iteration":
for b in bytes.mitems:
b = 255
check b == 255

for i, b in bytes.mpairs:
b = byte i
check b == byte i

test "immutable iteration":
for i, b in bytes:
check b == byte i

var i: int
for b in bytes:
check b == byte i
inc i

runtime: suite "String":
test "to nim-string":
let gdstr: String = "String"
Expand Down

0 comments on commit 44483fb

Please sign in to comment.