# Copyright (c) 2017 Xored Software, Inc. import godotinternaltypes, gdnativeapi import core.godotcoretypes template genPoolArrayAPI(ArrayT, initIdent, DataT, newProc, newCopyProc, newWithArrayProc, appendProc, appendArrayProc, insertProc, invertProc, pushBackProc, removeProc, resizeProc, setProc, getProc, sizeProc, destroyProc) = proc initIdent*(dest: var ArrayT) {.inline.} = getGDNativeAPI().newProc(dest) proc initIdent*(dest: var ArrayT; src: ArrayT) {.inline.} = getGDNativeAPI().newCopyProc(dest, src) proc initIdent*(dest: var ArrayT; arr: GodotArray) {.inline.} = getGDNativeAPI().newWithArrayProc(dest, arr) proc deinit*(self: var ArrayT) {.inline.} = getGDNativeAPI().destroyProc(self) proc add*(self: var ArrayT; data: DataT) {.inline.} = getGDNativeAPI().pushBackProc(self, data) proc add*(self: var ArrayT; arr: ArrayT) {.inline.} = getGDNativeAPI().appendArrayProc(self, arr) proc insert*(self: var ArrayT; idx: cint; data: DataT): Error {.inline.} = getGDNativeAPI().insertProc(self, idx, data) proc delete*(self: var ArrayT; idx: cint) {.inline.} = getGDNativeAPI().removeProc(self, idx) proc reverse*(self: var ArrayT) {.inline.} = getGDNativeAPI().invertProc(self) proc setLen*(self: var ArrayT; size: cint) {.inline.} = getGDNativeAPI().resizeProc(self, size) proc `[]=`*(self: var ArrayT; idx: cint; data: DataT) {.inline.} = getGDNativeAPI().setProc(self, idx, data) proc `[]`*(self: ArrayT; idx: cint): DataT {.inline.} = getGDNativeAPI().getProc(self, idx) proc len*(self: ArrayT): cint {.inline.} = getGDNativeAPI().sizeProc(self) iterator items*(arr: ArrayT): DataT = for i in 0..