Login
7 branches 0 tags
Ben (Win10) Temporarily added debugger action to windows action 5b7c8a6 4 years ago 326 Commits
nujel / stdlib / array2d.nuj
; Nujel - Copyright (C) 2020-2021 - Benjamin Vincent Schulenburg
; This project uses the MIT license, a copy should be included under /LICENSE
					;
;; Contains some routines for working with 2d data

[defun array/2d/allocate [width height]
       @[:data [-> [array/allocate [* width height]] [array/fill! 0]] :width width :height height]]

[defun array/2d/fill! [data v]
       [array/fill! [data :data] v]
       data]

[defun array/2d/ref [data x y oob-val]
       [if [or [>= x [data :width]]
               [>= y [data :height]]
               [< x 0]
               [< y 0]]
	   oob-val
           [array/ref [data :data] [add x [mul y [data :width]]]]]]

[defun array/2d/set! [data x y val]
       [if [or [>= x [data :width]]
               [>= y [data :height]]
               [< x 0]
               [< y 0]]
	   [throw [list :out-of-bounds "Trying to set an array out of bounds" data [current-lambda]]]
           [array/set! [data :data] [add x [mul y [data :width]]] val]]
           data]

[defun array/2d/print [data]
       [for [y 0 [data :height]]
       [for [x 0 [data :width]]
	    [display [cat [array/2d/ref data x y] " "]]]
       [newline]]
       data]