More pool array features: subarray, mitems, mpairs

This commit is contained in:
Ruslan Mustakov 2018-02-22 18:55:52 +07:00
commit be6f01e3b7
5 changed files with 559 additions and 92 deletions

View file

@ -1,4 +1,4 @@
version = "0.7.6"
version = "0.7.7"
author = "Xored Software, Inc."
description = "Godot Engine bindings"
license = "MIT"

View file

@ -48,6 +48,12 @@ template definePoolArray(T, GodotT, DataT, fieldName, newProcName, initProcName;
proc len*(self: T): int {.inline.} =
self.fieldName.len.int
proc subarray*(self: T, idxFrom, idxTo: int): T {.inline.} =
## Indexes are inclusive, negative values count from the end of the array.
assert(idxFrom >= low(cint) and idxFrom <= high(cint) and
idxTo >= low(cint) and idxTo <= high(cint))
newProcName(self.fieldName.subarray(idxFrom.cint, idxTo.cint))
when not noData:
proc add*(self: T; data: DataT) {.inline.} =
self.fieldName.add(data)
@ -62,12 +68,20 @@ template definePoolArray(T, GodotT, DataT, fieldName, newProcName, initProcName;
self.fieldName[idx.cint]
iterator items*(arr: T): DataT =
for i in 0..<arr.len:
yield arr[i]
for item in arr.fieldName.items:
yield item
iterator pairs*(arr: T): tuple[key: int, val: DataT] =
for i in 0..<arr.len:
yield (i, arr[i])
for pair in arr.fieldName.pairs:
yield (pair[0].int, pair[1])
iterator mitems*(arr: T): var DataT =
for item in arr.fieldName.mitems:
yield item
iterator mpairs*(arr: T): tuple[key: int, val: var DataT] =
for pair in arr.fieldName.mpairs:
yield (pair[0].int, pair[1])
definePoolArrayBase(PoolByteArray, GodotPoolByteArray, uint8,
godotPoolByteArray, newPoolByteArray,
@ -75,7 +89,7 @@ definePoolArrayBase(PoolByteArray, GodotPoolByteArray, uint8,
definePoolArrayBase(PoolIntArray, GodotPoolIntArray, cint,
godotPoolIntArray, newPoolIntArray,
initGodotPoolIntArray)
definePoolArrayBase(PoolRealArray, GodotPoolRealArray, float64,
definePoolArrayBase(PoolRealArray, GodotPoolRealArray, float32,
godotPoolRealArray, newPoolRealArray,
initGodotPoolRealArray)
definePoolArrayBase(PoolVector2Array, GodotPoolVector2Array, Vector2,
@ -99,7 +113,7 @@ definePoolArray(PoolByteArray, GodotPoolByteArray, uint8,
definePoolArray(PoolIntArray, GodotPoolIntArray, cint,
godotPoolIntArray, newPoolIntArray,
initGodotPoolIntArray)
definePoolArray(PoolRealArray, GodotPoolRealArray, float64,
definePoolArray(PoolRealArray, GodotPoolRealArray, float32,
godotPoolRealArray, newPoolRealArray,
initGodotPoolRealArray)
definePoolArray(PoolVector2Array, GodotPoolVector2Array, Vector2,

View file

@ -347,8 +347,10 @@ type
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolByteArrayResize: proc (self: var GodotPoolByteArray, size: cint)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolByteArrayRead: pointer
poolByteArrayWrite: pointer
poolByteArrayRead: proc (self: GodotPoolByteArray): ptr GodotPoolByteArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolByteArrayWrite: proc (self: var GodotPoolByteArray): ptr GodotPoolByteArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolByteArraySet: proc (self: var GodotPoolByteArray, idx: cint, data: byte)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolByteArrayGet: proc (self: GodotPoolByteArray, idx: cint): byte
@ -384,8 +386,10 @@ type
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolIntArrayResize: proc (self: var GodotPoolIntArray, size: cint)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolIntArrayRead: pointer
poolIntArrayWrite: pointer
poolIntArrayRead: proc (self: GodotPoolIntArray): ptr GodotPoolIntArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolIntArrayWrite: proc (self: var GodotPoolIntArray): ptr GodotPoolIntArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolIntArraySet: proc (self: var GodotPoolIntArray, idx: cint, data: cint)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolIntArrayGet: proc (self: GodotPoolIntArray, idx: cint): cint
@ -423,8 +427,10 @@ type
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolRealArrayResize: proc (self: var GodotPoolRealArray, size: cint)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolRealArrayRead: pointer
poolRealArrayWrite: pointer
poolRealArrayRead: proc (self: GodotPoolRealArray): ptr GodotPoolRealArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolRealArrayWrite: proc (self: var GodotPoolRealArray): ptr GodotPoolRealArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolRealArraySet: proc (self: var GodotPoolRealArray, idx: cint,
data: float32)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
@ -471,8 +477,10 @@ type
poolStringArrayResize: proc (self: var GodotPoolStringArray, size: cint)
{.noconv, raises: [], gcsafe, tags: [],
locks: 0.}
poolStringArrayRead: pointer
poolStringArrayWrite: pointer
poolStringArrayRead: proc (self: GodotPoolStringArray): ptr GodotPoolStringArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolStringArrayWrite: proc (self: var GodotPoolStringArray): ptr GodotPoolStringArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolStringArraySet: proc (self: var GodotPoolStringArray, idx: cint,
data: GodotString)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
@ -519,8 +527,10 @@ type
poolVector2ArrayResize: proc (self: var GodotPoolVector2Array, size: cint)
{.noconv, raises: [], gcsafe, tags: [],
locks: 0.}
poolVector2ArrayRead: pointer
poolVector2ArrayWrite: pointer
poolVector2ArrayRead: proc (self: GodotPoolVector2Array): ptr GodotPoolVector2ArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector2ArrayWrite: proc (self: var GodotPoolVector2Array): ptr GodotPoolVector2ArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector2ArraySet: proc (self: var GodotPoolVector2Array, idx: cint,
data: Vector2)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
@ -566,8 +576,10 @@ type
poolVector3ArrayResize: proc (self: var GodotPoolVector3Array,
size: cint) {.noconv, raises: [], gcsafe,
tags: [], locks: 0.}
poolVector3ArrayRead: pointer
poolVector3ArrayWrite: pointer
poolVector3ArrayRead: proc (self: GodotPoolVector3Array): ptr GodotPoolVector3ArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector3ArrayWrite: proc (self: var GodotPoolVector3Array): ptr GodotPoolVector3ArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector3ArraySet: proc (self: var GodotPoolVector3Array, idx: cint,
data: Vector3) {.noconv, raises: [], gcsafe,
tags: [], locks: 0.}
@ -609,8 +621,10 @@ type
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolColorArrayResize: proc (self: var GodotPoolColorArray, size: cint)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolColorArrayRead: pointer
poolColorArrayWrite: pointer
poolColorArrayRead: proc (self: GodotPoolColorArray): ptr GodotPoolColorArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolColorArrayWrite: proc (self: var GodotPoolColorArray): ptr GodotPoolColorArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolColorArraySet: proc (self: var GodotPoolColorArray, idx: cint,
data: Color)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
@ -622,65 +636,133 @@ type
{.noconv, raises: [], gcsafe, tags: [],
locks: 0.}
# Pool Array Read Access API
# Pool Array Read/Write Access API
poolByteArrayReadAccessCopy: pointer
poolByteArrayReadAccessPtr: pointer
poolByteArrayReadAccessOperatorAssign: pointer
poolByteArrayReadAccessDestroy: pointer
poolIntArrayReadAccessCopy: pointer
poolIntArrayReadAccessPtr: pointer
poolIntArrayReadAccessOperatorAssign: pointer
poolIntArrayReadAccessDestroy: pointer
poolRealArrayReadAccessCopy: pointer
poolRealArrayReadAccessPtr: pointer
poolRealArrayReadAccessOperatorAssign: pointer
poolRealArrayReadAccessDestroy: pointer
poolStringArrayReadAccessCopy: pointer
poolStringArrayReadAccessPtr: pointer
poolStringArrayReadAccessOperatorAssign: pointer
poolStringArrayReadAccessDestroy: pointer
poolVector2ArrayReadAccessCopy: pointer
poolVector2ArrayReadAccessPtr: pointer
poolVector2ArrayReadAccessOperatorAssign: pointer
poolVector2ArrayReadAccessDestroy: pointer
poolVector3ArrayReadAccessCopy: pointer
poolVector3ArrayReadAccessPtr: pointer
poolVector3ArrayReadAccessOperatorAssign: pointer
poolVector3ArrayReadAccessDestroy: pointer
poolColorArrayReadAccessCopy: pointer
poolColorArrayReadAccessPtr: pointer
poolColorArrayReadAccessOperatorAssign: pointer
poolColorArrayReadAccessDestroy: pointer
poolByteArrayReadAccessCopy: proc (self: ptr GodotPoolByteArrayReadAccess): ptr GodotPoolByteArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolByteArrayReadAccessPtr: proc (self: ptr GodotPoolByteArrayReadAccess): ptr byte
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolByteArrayReadAccessOperatorAssign: proc (self, other: ptr GodotPoolByteArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolByteArrayReadAccessDestroy: proc (self: ptr GodotPoolByteArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolByteArrayWriteAccessCopy: pointer
poolByteArrayWriteAccessPtr: pointer
poolByteArrayWriteAccessOperatorAssign: pointer
poolByteArrayWriteAccessDestroy: pointer
poolIntArrayWriteAccessCopy: pointer
poolIntArrayWriteAccessPtr: pointer
poolIntArrayWriteAccessOperatorAssign: pointer
poolIntArrayWriteAccessDestroy: pointer
poolRealArrayWriteAccessCopy: pointer
poolRealArrayWriteAccessPtr: pointer
poolRealArrayWriteAccessOperatorAssign: pointer
poolRealArrayWriteAccessDestroy: pointer
poolStringArrayWriteAccessCopy: pointer
poolStringArrayWriteAccessPtr: pointer
poolStringArrayWriteAccessOperatorAssign: pointer
poolStringArrayWriteAccessDestroy: pointer
poolVector2ArrayWriteAccessCopy: pointer
poolVector2ArrayWriteAccessPtr: pointer
poolVector2ArrayWriteAccessOperatorAssign: pointer
poolVector2ArrayWriteAccessDestroy: pointer
poolVector3ArrayWriteAccessCopy: pointer
poolVector3ArrayWriteAccessPtr: pointer
poolVector3ArrayWriteAccessOperatorAssign: pointer
poolVector3ArrayWriteAccessDestroy: pointer
poolColorArrayWriteAccessCopy: pointer
poolColorArrayWriteAccessPtr: pointer
poolColorArrayWriteAccessOperatorAssign: pointer
poolColorArrayWriteAccessDestroy: pointer
poolIntArrayReadAccessCopy: proc (self: ptr GodotPoolIntArrayReadAccess): ptr GodotPoolIntArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolIntArrayReadAccessPtr: proc (self: ptr GodotPoolIntArrayReadAccess): ptr cint
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolIntArrayReadAccessOperatorAssign: proc (self, other: ptr GodotPoolIntArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolIntArrayReadAccessDestroy: proc (self: ptr GodotPoolIntArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolRealArrayReadAccessCopy: proc (self: ptr GodotPoolRealArrayReadAccess): ptr GodotPoolRealArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolRealArrayReadAccessPtr: proc (self: ptr GodotPoolRealArrayReadAccess): ptr float32
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolRealArrayReadAccessOperatorAssign: proc (self, other: ptr GodotPoolRealArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolRealArrayReadAccessDestroy: proc (self: ptr GodotPoolRealArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolStringArrayReadAccessCopy: proc (self: ptr GodotPoolStringArrayReadAccess): ptr GodotPoolStringArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolStringArrayReadAccessPtr: proc (self: ptr GodotPoolStringArrayReadAccess): ptr GodotString
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolStringArrayReadAccessOperatorAssign: proc (self, other: ptr GodotPoolStringArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolStringArrayReadAccessDestroy: proc (self: ptr GodotPoolStringArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector2ArrayReadAccessCopy: proc (self: ptr GodotPoolVector2ArrayReadAccess): ptr GodotPoolVector2ArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector2ArrayReadAccessPtr: proc (self: ptr GodotPoolVector2ArrayReadAccess): ptr Vector2
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector2ArrayReadAccessOperatorAssign: proc (self, other: ptr GodotPoolVector2ArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector2ArrayReadAccessDestroy: proc (self: ptr GodotPoolVector2ArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector3ArrayReadAccessCopy: proc (self: ptr GodotPoolVector3ArrayReadAccess): ptr GodotPoolVector3ArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector3ArrayReadAccessPtr: proc (self: ptr GodotPoolVector3ArrayReadAccess): ptr Vector3
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector3ArrayReadAccessOperatorAssign: proc (self, other: ptr GodotPoolVector3ArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector3ArrayReadAccessDestroy: proc (self: ptr GodotPoolVector3ArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolColorArrayReadAccessCopy: proc (self: ptr GodotPoolColorArrayReadAccess): ptr GodotPoolColorArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolColorArrayReadAccessPtr: proc (self: ptr GodotPoolColorArrayReadAccess): ptr Color
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolColorArrayReadAccessOperatorAssign: proc (self, other: ptr GodotPoolColorArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolColorArrayReadAccessDestroy: proc (self: ptr GodotPoolColorArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolByteArrayWriteAccessCopy: proc (self: ptr GodotPoolByteArrayWriteAccess): ptr GodotPoolByteArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolByteArrayWriteAccessPtr: proc (self: ptr GodotPoolByteArrayWriteAccess): ptr byte
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolByteArrayWriteAccessOperatorAssign: proc (self, other: ptr GodotPoolByteArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolByteArrayWriteAccessDestroy: proc (self: ptr GodotPoolByteArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolIntArrayWriteAccessCopy: proc (self: ptr GodotPoolIntArrayWriteAccess): ptr GodotPoolIntArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolIntArrayWriteAccessPtr: proc (self: ptr GodotPoolIntArrayWriteAccess): ptr cint
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolIntArrayWriteAccessOperatorAssign: proc (self, other: ptr GodotPoolIntArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolIntArrayWriteAccessDestroy: proc (self: ptr GodotPoolIntArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolRealArrayWriteAccessCopy: proc (self: ptr GodotPoolRealArrayWriteAccess): ptr GodotPoolRealArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolRealArrayWriteAccessPtr: proc (self: ptr GodotPoolRealArrayWriteAccess): ptr float32
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolRealArrayWriteAccessOperatorAssign: proc (self, other: ptr GodotPoolRealArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolRealArrayWriteAccessDestroy: proc (self: ptr GodotPoolRealArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolStringArrayWriteAccessCopy: proc (self: ptr GodotPoolStringArrayWriteAccess): ptr GodotPoolStringArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolStringArrayWriteAccessPtr: proc (self: ptr GodotPoolStringArrayWriteAccess): ptr GodotString
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolStringArrayWriteAccessOperatorAssign: proc (self, other: ptr GodotPoolStringArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolStringArrayWriteAccessDestroy: proc (self: ptr GodotPoolStringArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector2ArrayWriteAccessCopy: proc (self: ptr GodotPoolVector2ArrayWriteAccess): ptr GodotPoolVector2ArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector2ArrayWriteAccessPtr: proc (self: ptr GodotPoolVector2ArrayWriteAccess): ptr Vector2
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector2ArrayWriteAccessOperatorAssign: proc (self, other: ptr GodotPoolVector2ArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector2ArrayWriteAccessDestroy: proc (self: ptr GodotPoolVector2ArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector3ArrayWriteAccessCopy: proc (self: ptr GodotPoolVector3ArrayWriteAccess): ptr GodotPoolVector3ArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector3ArrayWriteAccessPtr: proc (self: ptr GodotPoolVector3ArrayWriteAccess): ptr Vector3
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector3ArrayWriteAccessOperatorAssign: proc (self, other: ptr GodotPoolVector3ArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector3ArrayWriteAccessDestroy: proc (self: ptr GodotPoolVector3ArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolColorArrayWriteAccessCopy: proc (self: ptr GodotPoolColorArrayWriteAccess): ptr GodotPoolColorArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolColorArrayWriteAccessPtr: proc (self: ptr GodotPoolColorArrayWriteAccess): ptr Color
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolColorArrayWriteAccessOperatorAssign: proc (self, other: ptr GodotPoolColorArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolColorArrayWriteAccessDestroy: proc (self: ptr GodotPoolColorArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
# Array API
arrayNew: proc (dest: var GodotArray)
@ -1707,6 +1789,10 @@ type
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolByteArrayResize*: proc (self: var GodotPoolByteArray, size: cint)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolByteArrayRead*: proc (self: GodotPoolByteArray): ptr GodotPoolByteArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolByteArrayWrite*: proc (self: var GodotPoolByteArray): ptr GodotPoolByteArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolByteArraySet*: proc (self: var GodotPoolByteArray, idx: cint, data: byte)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolByteArrayGet*: proc (self: GodotPoolByteArray, idx: cint): byte
@ -1742,6 +1828,10 @@ type
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolIntArrayResize*: proc (self: var GodotPoolIntArray, size: cint)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolIntArrayRead*: proc (self: GodotPoolIntArray): ptr GodotPoolIntArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolIntArrayWrite*: proc (self: var GodotPoolIntArray): ptr GodotPoolIntArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolIntArraySet*: proc (self: var GodotPoolIntArray, idx: cint, data: cint)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolIntArrayGet*: proc (self: GodotPoolIntArray, idx: cint): cint
@ -1778,6 +1868,10 @@ type
poolRealArrayRemove*: proc (self: var GodotPoolRealArray, idx: cint)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolRealArrayResize*: proc (self: var GodotPoolRealArray, size: cint)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolRealArrayRead*: proc (self: GodotPoolRealArray): ptr GodotPoolRealArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolRealArrayWrite*: proc (self: var GodotPoolRealArray): ptr GodotPoolRealArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolRealArraySet*: proc (self: var GodotPoolRealArray, idx: cint,
data: float32)
@ -1825,6 +1919,10 @@ type
poolStringArrayResize*: proc (self: var GodotPoolStringArray, size: cint)
{.noconv, raises: [], gcsafe, tags: [],
locks: 0.}
poolStringArrayRead*: proc (self: GodotPoolStringArray): ptr GodotPoolStringArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolStringArrayWrite*: proc (self: var GodotPoolStringArray): ptr GodotPoolStringArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolStringArraySet*: proc (self: var GodotPoolStringArray, idx: cint,
data: GodotString)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
@ -1871,6 +1969,10 @@ type
poolVector2ArrayResize*: proc (self: var GodotPoolVector2Array, size: cint)
{.noconv, raises: [], gcsafe, tags: [],
locks: 0.}
poolVector2ArrayRead*: proc (self: GodotPoolVector2Array): ptr GodotPoolVector2ArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector2ArrayWrite*: proc (self: var GodotPoolVector2Array): ptr GodotPoolVector2ArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector2ArraySet*: proc (self: var GodotPoolVector2Array, idx: cint,
data: Vector2)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
@ -1916,6 +2018,10 @@ type
poolVector3ArrayResize*: proc (self: var GodotPoolVector3Array,
size: cint) {.noconv, raises: [], gcsafe,
tags: [], locks: 0.}
poolVector3ArrayRead*: proc (self: GodotPoolVector3Array): ptr GodotPoolVector3ArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector3ArrayWrite*: proc (self: var GodotPoolVector3Array): ptr GodotPoolVector3ArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector3ArraySet*: proc (self: var GodotPoolVector3Array, idx: cint,
data: Vector3) {.noconv, raises: [], gcsafe,
tags: [], locks: 0.}
@ -1957,6 +2063,10 @@ type
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolColorArrayResize*: proc (self: var GodotPoolColorArray, size: cint)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolColorArrayRead*: proc (self: GodotPoolColorArray): ptr GodotPoolColorArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolColorArrayWrite*: proc (self: var GodotPoolColorArray): ptr GodotPoolColorArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolColorArraySet*: proc (self: var GodotPoolColorArray, idx: cint,
data: Color)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
@ -1968,6 +2078,134 @@ type
{.noconv, raises: [], gcsafe, tags: [],
locks: 0.}
# Pool Array Read/Write Access API
poolByteArrayReadAccessCopy*: proc (self: ptr GodotPoolByteArrayReadAccess): ptr GodotPoolByteArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolByteArrayReadAccessPtr*: proc (self: ptr GodotPoolByteArrayReadAccess): ptr byte
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolByteArrayReadAccessOperatorAssign*: proc (self, other: ptr GodotPoolByteArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolByteArrayReadAccessDestroy*: proc (self: ptr GodotPoolByteArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolIntArrayReadAccessCopy*: proc (self: ptr GodotPoolIntArrayReadAccess): ptr GodotPoolIntArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolIntArrayReadAccessPtr*: proc (self: ptr GodotPoolIntArrayReadAccess): ptr cint
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolIntArrayReadAccessOperatorAssign*: proc (self, other: ptr GodotPoolIntArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolIntArrayReadAccessDestroy*: proc (self: ptr GodotPoolIntArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolRealArrayReadAccessCopy*: proc (self: ptr GodotPoolRealArrayReadAccess): ptr GodotPoolRealArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolRealArrayReadAccessPtr*: proc (self: ptr GodotPoolRealArrayReadAccess): ptr float32
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolRealArrayReadAccessOperatorAssign*: proc (self, other: ptr GodotPoolRealArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolRealArrayReadAccessDestroy*: proc (self: ptr GodotPoolRealArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolStringArrayReadAccessCopy*: proc (self: ptr GodotPoolStringArrayReadAccess): ptr GodotPoolStringArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolStringArrayReadAccessPtr*: proc (self: ptr GodotPoolStringArrayReadAccess): ptr GodotString
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolStringArrayReadAccessOperatorAssign*: proc (self, other: ptr GodotPoolStringArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolStringArrayReadAccessDestroy*: proc (self: ptr GodotPoolStringArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector2ArrayReadAccessCopy*: proc (self: ptr GodotPoolVector2ArrayReadAccess): ptr GodotPoolVector2ArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector2ArrayReadAccessPtr*: proc (self: ptr GodotPoolVector2ArrayReadAccess): ptr Vector2
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector2ArrayReadAccessOperatorAssign*: proc (self, other: ptr GodotPoolVector2ArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector2ArrayReadAccessDestroy*: proc (self: ptr GodotPoolVector2ArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector3ArrayReadAccessCopy*: proc (self: ptr GodotPoolVector3ArrayReadAccess): ptr GodotPoolVector3ArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector3ArrayReadAccessPtr*: proc (self: ptr GodotPoolVector3ArrayReadAccess): ptr Vector3
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector3ArrayReadAccessOperatorAssign*: proc (self, other: ptr GodotPoolVector3ArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector3ArrayReadAccessDestroy*: proc (self: ptr GodotPoolVector3ArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolColorArrayReadAccessCopy*: proc (self: ptr GodotPoolColorArrayReadAccess): ptr GodotPoolColorArrayReadAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolColorArrayReadAccessPtr*: proc (self: ptr GodotPoolColorArrayReadAccess): ptr Color
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolColorArrayReadAccessOperatorAssign*: proc (self, other: ptr GodotPoolColorArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolColorArrayReadAccessDestroy*: proc (self: ptr GodotPoolColorArrayReadAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolByteArrayWriteAccessCopy*: proc (self: ptr GodotPoolByteArrayWriteAccess): ptr GodotPoolByteArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolByteArrayWriteAccessPtr*: proc (self: ptr GodotPoolByteArrayWriteAccess): ptr byte
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolByteArrayWriteAccessOperatorAssign*: proc (self, other: ptr GodotPoolByteArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolByteArrayWriteAccessDestroy*: proc (self: ptr GodotPoolByteArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolIntArrayWriteAccessCopy*: proc (self: ptr GodotPoolIntArrayWriteAccess): ptr GodotPoolIntArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolIntArrayWriteAccessPtr*: proc (self: ptr GodotPoolIntArrayWriteAccess): ptr cint
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolIntArrayWriteAccessOperatorAssign*: proc (self, other: ptr GodotPoolIntArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolIntArrayWriteAccessDestroy*: proc (self: ptr GodotPoolIntArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolRealArrayWriteAccessCopy*: proc (self: ptr GodotPoolRealArrayWriteAccess): ptr GodotPoolRealArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolRealArrayWriteAccessPtr*: proc (self: ptr GodotPoolRealArrayWriteAccess): ptr float32
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolRealArrayWriteAccessOperatorAssign*: proc (self, other: ptr GodotPoolRealArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolRealArrayWriteAccessDestroy*: proc (self: ptr GodotPoolRealArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolStringArrayWriteAccessCopy*: proc (self: ptr GodotPoolStringArrayWriteAccess): ptr GodotPoolStringArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolStringArrayWriteAccessPtr*: proc (self: ptr GodotPoolStringArrayWriteAccess): ptr GodotString
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolStringArrayWriteAccessOperatorAssign*: proc (self, other: ptr GodotPoolStringArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolStringArrayWriteAccessDestroy*: proc (self: ptr GodotPoolStringArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector2ArrayWriteAccessCopy*: proc (self: ptr GodotPoolVector2ArrayWriteAccess): ptr GodotPoolVector2ArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector2ArrayWriteAccessPtr*: proc (self: ptr GodotPoolVector2ArrayWriteAccess): ptr Vector2
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector2ArrayWriteAccessOperatorAssign*: proc (self, other: ptr GodotPoolVector2ArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector2ArrayWriteAccessDestroy*: proc (self: ptr GodotPoolVector2ArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector3ArrayWriteAccessCopy*: proc (self: ptr GodotPoolVector3ArrayWriteAccess): ptr GodotPoolVector3ArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector3ArrayWriteAccessPtr*: proc (self: ptr GodotPoolVector3ArrayWriteAccess): ptr Vector3
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector3ArrayWriteAccessOperatorAssign*: proc (self, other: ptr GodotPoolVector3ArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolVector3ArrayWriteAccessDestroy*: proc (self: ptr GodotPoolVector3ArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolColorArrayWriteAccessCopy*: proc (self: ptr GodotPoolColorArrayWriteAccess): ptr GodotPoolColorArrayWriteAccess
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolColorArrayWriteAccessPtr*: proc (self: ptr GodotPoolColorArrayWriteAccess): ptr Color
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolColorArrayWriteAccessOperatorAssign*: proc (self, other: ptr GodotPoolColorArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
poolColorArrayWriteAccessDestroy*: proc (self: ptr GodotPoolColorArrayWriteAccess)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
# Array API
arrayNew*: proc (dest: var GodotArray)
{.noconv, raises: [], gcsafe, tags: [], locks: 0.}
@ -2780,6 +3018,8 @@ proc setGDNativeAPI*(apiStruct: pointer, initOptions: ptr GDNativeInitOptions) =
poolByteArrayPushBack
poolByteArrayRemove
poolByteArrayResize
poolByteArrayRead
poolByteArrayWrite
poolByteArraySet
poolByteArrayGet
poolByteArraySize
@ -2796,6 +3036,8 @@ proc setGDNativeAPI*(apiStruct: pointer, initOptions: ptr GDNativeInitOptions) =
poolIntArrayPushBack
poolIntArrayRemove
poolIntArrayResize
poolIntArrayRead
poolIntArrayWrite
poolIntArraySet
poolIntArrayGet
poolIntArraySize
@ -2812,6 +3054,8 @@ proc setGDNativeAPI*(apiStruct: pointer, initOptions: ptr GDNativeInitOptions) =
poolRealArrayPushBack
poolRealArrayRemove
poolRealArrayResize
poolRealArrayRead
poolRealArrayWrite
poolRealArraySet
poolRealArrayGet
poolRealArraySize
@ -2828,6 +3072,8 @@ proc setGDNativeAPI*(apiStruct: pointer, initOptions: ptr GDNativeInitOptions) =
poolStringArrayPushBack
poolStringArrayRemove
poolStringArrayResize
poolStringArrayRead
poolStringArrayWrite
poolStringArraySet
poolStringArrayGet
poolStringArraySize
@ -2845,6 +3091,8 @@ proc setGDNativeAPI*(apiStruct: pointer, initOptions: ptr GDNativeInitOptions) =
poolVector2ArrayPushBack
poolVector2ArrayRemove
poolVector2ArrayResize
poolVector2ArrayRead
poolVector2ArrayWrite
poolVector2ArraySet
poolVector2ArrayGet
poolVector2ArraySize
@ -2861,6 +3109,8 @@ proc setGDNativeAPI*(apiStruct: pointer, initOptions: ptr GDNativeInitOptions) =
poolVector3ArrayPushBack
poolVector3ArrayRemove
poolVector3ArrayResize
poolVector3ArrayRead
poolVector3ArrayWrite
poolVector3ArraySet
poolVector3ArrayGet
poolVector3ArraySize
@ -2877,6 +3127,8 @@ proc setGDNativeAPI*(apiStruct: pointer, initOptions: ptr GDNativeInitOptions) =
poolColorArrayPushBack
poolColorArrayRemove
poolColorArrayResize
poolColorArrayRead
poolColorArrayWrite
poolColorArraySet
poolColorArrayGet
poolColorArraySize
@ -2922,6 +3174,78 @@ proc setGDNativeAPI*(apiStruct: pointer, initOptions: ptr GDNativeInitOptions) =
arrayBSearchCustom
arrayDestroy
# Pool Array Read/Write Access API
poolByteArrayReadAccessCopy
poolByteArrayReadAccessPtr
poolByteArrayReadAccessOperatorAssign
poolByteArrayReadAccessDestroy
poolIntArrayReadAccessCopy
poolIntArrayReadAccessPtr
poolIntArrayReadAccessOperatorAssign
poolIntArrayReadAccessDestroy
poolRealArrayReadAccessCopy
poolRealArrayReadAccessPtr
poolRealArrayReadAccessOperatorAssign
poolRealArrayReadAccessDestroy
poolStringArrayReadAccessCopy
poolStringArrayReadAccessPtr
poolStringArrayReadAccessOperatorAssign
poolStringArrayReadAccessDestroy
poolVector2ArrayReadAccessCopy
poolVector2ArrayReadAccessPtr
poolVector2ArrayReadAccessOperatorAssign
poolVector2ArrayReadAccessDestroy
poolVector3ArrayReadAccessCopy
poolVector3ArrayReadAccessPtr
poolVector3ArrayReadAccessOperatorAssign
poolVector3ArrayReadAccessDestroy
poolColorArrayReadAccessCopy
poolColorArrayReadAccessPtr
poolColorArrayReadAccessOperatorAssign
poolColorArrayReadAccessDestroy
poolByteArrayWriteAccessCopy
poolByteArrayWriteAccessPtr
poolByteArrayWriteAccessOperatorAssign
poolByteArrayWriteAccessDestroy
poolIntArrayWriteAccessCopy
poolIntArrayWriteAccessPtr
poolIntArrayWriteAccessOperatorAssign
poolIntArrayWriteAccessDestroy
poolRealArrayWriteAccessCopy
poolRealArrayWriteAccessPtr
poolRealArrayWriteAccessOperatorAssign
poolRealArrayWriteAccessDestroy
poolStringArrayWriteAccessCopy
poolStringArrayWriteAccessPtr
poolStringArrayWriteAccessOperatorAssign
poolStringArrayWriteAccessDestroy
poolVector2ArrayWriteAccessCopy
poolVector2ArrayWriteAccessPtr
poolVector2ArrayWriteAccessOperatorAssign
poolVector2ArrayWriteAccessDestroy
poolVector3ArrayWriteAccessCopy
poolVector3ArrayWriteAccessPtr
poolVector3ArrayWriteAccessOperatorAssign
poolVector3ArrayWriteAccessDestroy
poolColorArrayWriteAccessCopy
poolColorArrayWriteAccessPtr
poolColorArrayWriteAccessOperatorAssign
poolColorArrayWriteAccessDestroy
# Dictionary API
dictionaryNew
dictionaryNewCopy

View file

@ -16,18 +16,52 @@ type
GodotPoolByteArray* {.byref.} = object
data: array[sizeof(int), byte]
GodotPoolByteArrayReadAccess* {.byref.} = object
data: array[1, byte]
GodotPoolByteArrayWriteAccess* {.byref.} = object
data: array[1, byte]
GodotPoolIntArray* {.byref.} = object
data: array[sizeof(int), byte]
GodotPoolIntArrayReadAccess* {.byref.} = object
data: array[1, byte]
GodotPoolIntArrayWriteAccess* {.byref.} = object
data: array[1, byte]
GodotPoolRealArray* {.byref.} = object
data: array[sizeof(int), byte]
GodotPoolRealArrayReadAccess* {.byref.} = object
data: array[1, byte]
GodotPoolRealArrayWriteAccess* {.byref.} = object
data: array[1, byte]
GodotPoolStringArray* {.byref.} = object
data: array[sizeof(int), byte]
GodotPoolStringArrayReadAccess* {.byref.} = object
data: array[1, byte]
GodotPoolStringArrayWriteAccess* {.byref.} = object
data: array[1, byte]
GodotPoolVector2Array* {.byref.} = object
data: array[sizeof(int), byte]
GodotPoolVector2ArrayReadAccess* {.byref.} = object
data: array[1, byte]
GodotPoolVector2ArrayWriteAccess* {.byref.} = object
data: array[1, byte]
GodotPoolVector3Array* {.byref.} = object
data: array[sizeof(int), byte]
GodotPoolVector3ArrayReadAccess* {.byref.} = object
data: array[1, byte]
GodotPoolVector3ArrayWriteAccess* {.byref.} = object
data: array[1, byte]
GodotPoolColorArray* {.byref.} = object
data: array[sizeof(int), byte]
GodotPoolColorArrayReadAccess* {.byref.} = object
data: array[1, byte]
GodotPoolColorArrayWriteAccess* {.byref.} = object
data: array[1, byte]
GodotString* {.byref.} = object
data: array[sizeof(int), byte]

View file

@ -3,11 +3,16 @@
import godotinternaltypes, gdnativeapi
import core.godotcoretypes
proc offset[T](p: ptr T, offset: int): ptr T {.inline.} =
cast[ptr T](cast[ByteAddress](p) +% (offset * sizeof(T)))
template genPoolArrayAPI(ArrayT, initIdent, DataT,
newProc, newCopyProc, newWithArrayProc, appendProc,
appendArrayProc, insertProc, invertProc, pushBackProc,
removeProc, resizeProc, setProc, getProc, sizeProc,
destroyProc) =
destroyProc, readProc, writeProc,
readAccessPtrProc, writeAccessPtrProc,
readAccessDestroyProc, writeAccessDestroyProc) =
proc initIdent*(dest: var ArrayT) {.inline.} =
getGDNativeAPI().newProc(dest)
@ -48,13 +53,61 @@ template genPoolArrayAPI(ArrayT, initIdent, DataT,
proc len*(self: ArrayT): cint {.inline.} =
getGDNativeAPI().sizeProc(self)
iterator items*(arr: ArrayT): DataT =
for i in 0.cint..<arr.len:
yield arr[i]
iterator items*(self: ArrayT): DataT =
let readAccess = getGDNativeAPI().readProc(self)
let readPtr = getGDNativeAPI().readAccessPtrProc(readAccess)
for i in 0.cint..<self.len:
yield readPtr.offset(i)[]
getGDNativeAPI().readAccessDestroyProc(readAccess)
iterator pairs*(arr: ArrayT): tuple[key: cint, val: DataT] =
for i in 0.cint..<arr.len:
yield (i, arr[i])
iterator mitems*(self: var ArrayT): var DataT =
let writeAccess = getGDNativeAPI().writeProc(self)
let writePtr = getGDNativeAPI().writeAccessPtrProc(writeAccess)
for i in 0.cint..<self.len:
yield writePtr.offset(i)[]
getGDNativeAPI().writeAccessDestroyProc(writeAccess)
iterator pairs*(self: ArrayT): tuple[key: cint, val: DataT] =
let readAccess = getGDNativeAPI().readProc(self)
let readPtr = getGDNativeAPI().readAccessPtrProc(readAccess)
for i in 0.cint..<self.len:
yield (i, readPtr.offset(i)[])
getGDNativeAPI().readAccessDestroyProc(readAccess)
iterator mpairs*(self: var ArrayT): tuple[key: cint, val: var DataT] =
let writeAccess = getGDNativeAPI().writeProc(self)
let writePtr = getGDNativeAPI().writeAccessPtrProc(writeAccess)
for i in 0.cint..<self.len:
yield (i, writePtr.offset(i)[])
getGDNativeAPI().writeAccessDestroyProc(writeAccess)
proc subarray*(self: ArrayT, idxFrom, idxTo: cint): ArrayT =
## Indexes are inclusive, negative values count from the end of the array.
let ownLen = self.len
var actualIdxFrom = if idxFrom < 0: idxFrom + ownLen
else: idxFrom
var actualIdxTo = if idxTo < 0: idxTo + ownLen
else: idxTo
initIdent(result)
if actualIdxFrom < 0 or actualIdxFrom >= ownLen:
let (file, line) = instantiationInfo()
getGDNativeAPI().printError(
cstring"Invalid subarray begin index", cstring"subarray", file, line.cint)
return
if actualIdxTo < 0 or actualIdxTo >= ownLen:
let (file, line) = instantiationInfo()
getGDNativeAPI().printError(
cstring"Invalid subarray end index", cstring"subarray", file, line.cint)
return
let span = actualIdxTo - actualIdxFrom + 1
result.setLen(span)
let readAccess = getGDNativeAPI().readProc(self)
let writeAccess = getGDNativeAPI().writeProc(result)
let readPtr = getGDNativeAPI().readAccessPtrProc(readAccess).offset(actualIdxFrom)
copyMem(getGDNativeAPI().writeAccessPtrProc(writeAccess), readPtr, span)
getGDNativeAPI().readAccessDestroyProc(readAccess)
getGDNativeAPI().writeAccessDestroyProc(writeAccess)
genPoolArrayAPI(GodotPoolByteArray, initGodotPoolByteArray, byte,
poolByteArrayNew,
@ -70,7 +123,13 @@ genPoolArrayAPI(GodotPoolByteArray, initGodotPoolByteArray, byte,
poolByteArraySet,
poolByteArrayGet,
poolByteArraySize,
poolByteArrayDestroy)
poolByteArrayDestroy,
poolByteArrayRead,
poolByteArrayWrite,
poolByteArrayReadAccessPtr,
poolByteArrayWriteAccessPtr,
poolByteArrayReadAccessDestroy,
poolByteArrayWriteAccessDestroy)
genPoolArrayAPI(GodotPoolIntArray, initGodotPoolIntArray, cint,
poolIntArrayNew,
@ -86,7 +145,13 @@ genPoolArrayAPI(GodotPoolIntArray, initGodotPoolIntArray, cint,
poolIntArraySet,
poolIntArrayGet,
poolIntArraySize,
poolIntArrayDestroy)
poolIntArrayDestroy,
poolIntArrayRead,
poolIntArrayWrite,
poolIntArrayReadAccessPtr,
poolIntArrayWriteAccessPtr,
poolIntArrayReadAccessDestroy,
poolIntArrayWriteAccessDestroy)
genPoolArrayAPI(GodotPoolRealArray, initGodotPoolRealArray, float32,
poolRealArrayNew,
@ -102,7 +167,13 @@ genPoolArrayAPI(GodotPoolRealArray, initGodotPoolRealArray, float32,
poolRealArraySet,
poolRealArrayGet,
poolRealArraySize,
poolRealArrayDestroy)
poolRealArrayDestroy,
poolRealArrayRead,
poolRealArrayWrite,
poolRealArrayReadAccessPtr,
poolRealArrayWriteAccessPtr,
poolRealArrayReadAccessDestroy,
poolRealArrayWriteAccessDestroy)
genPoolArrayAPI(GodotPoolStringArray, initGodotPoolStringArray, GodotString,
poolStringArrayNew,
@ -118,7 +189,13 @@ genPoolArrayAPI(GodotPoolStringArray, initGodotPoolStringArray, GodotString,
poolStringArraySet,
poolStringArrayGet,
poolStringArraySize,
poolStringArrayDestroy)
poolStringArrayDestroy,
poolStringArrayRead,
poolStringArrayWrite,
poolStringArrayReadAccessPtr,
poolStringArrayWriteAccessPtr,
poolStringArrayReadAccessDestroy,
poolStringArrayWriteAccessDestroy)
genPoolArrayAPI(GodotPoolVector2Array, initGodotPoolVector2Array, Vector2,
poolVector2ArrayNew,
@ -134,7 +211,13 @@ genPoolArrayAPI(GodotPoolVector2Array, initGodotPoolVector2Array, Vector2,
poolVector2ArraySet,
poolVector2ArrayGet,
poolVector2ArraySize,
poolVector2ArrayDestroy)
poolVector2ArrayDestroy,
poolVector2ArrayRead,
poolVector2ArrayWrite,
poolVector2ArrayReadAccessPtr,
poolVector2ArrayWriteAccessPtr,
poolVector2ArrayReadAccessDestroy,
poolVector2ArrayWriteAccessDestroy)
genPoolArrayAPI(GodotPoolVector3Array, initGodotPoolVector3Array, Vector3,
poolVector3ArrayNew,
@ -150,7 +233,13 @@ genPoolArrayAPI(GodotPoolVector3Array, initGodotPoolVector3Array, Vector3,
poolVector3ArraySet,
poolVector3ArrayGet,
poolVector3ArraySize,
poolVector3ArrayDestroy)
poolVector3ArrayDestroy,
poolVector3ArrayRead,
poolVector3ArrayWrite,
poolVector3ArrayReadAccessPtr,
poolVector3ArrayWriteAccessPtr,
poolVector3ArrayReadAccessDestroy,
poolVector3ArrayWriteAccessDestroy)
genPoolArrayAPI(GodotPoolColorArray, initGodotPoolColorArray, Color,
poolColorArrayNew,
@ -166,4 +255,10 @@ genPoolArrayAPI(GodotPoolColorArray, initGodotPoolColorArray, Color,
poolColorArraySet,
poolColorArrayGet,
poolColorArraySize,
poolColorArrayDestroy)
poolColorArrayDestroy,
poolColorArrayRead,
poolColorArrayWrite,
poolColorArrayReadAccessPtr,
poolColorArrayWriteAccessPtr,
poolColorArrayReadAccessDestroy,
poolColorArrayWriteAccessDestroy)