From 4eb0c696bc575210448f79eab92f4eb6965e75f9 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Thu, 19 Nov 2020 08:20:56 -0500 Subject: math: grid: Add grid-cell-fold and grid-item-fold procedures. --- chickadee/math/grid.scm | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/chickadee/math/grid.scm b/chickadee/math/grid.scm index 830f7d6..7b2b6d6 100644 --- a/chickadee/math/grid.scm +++ b/chickadee/math/grid.scm @@ -45,7 +45,9 @@ grid-item-count grid-rect-ref for-each-cell - for-each-item)) + grid-cell-fold + for-each-item + grid-item-fold)) ;;; @@ -192,10 +194,22 @@ cell if RECT is #f." row)) (grid-rows grid)))) +(define (grid-cell-fold proc init grid) + (hash-fold (lambda (y row memo) + (hash-fold (lambda (x cell memo) + (proc cell x y memo)) + memo + row)) + init + (grid-rows grid))) + (define (for-each-item proc grid) "Call PROC for each item in GRID." (hash-for-each proc (grid-rects grid))) +(define (grid-item-fold proc init grid) + (hash-fold proc init (grid-rects grid))) + (define (grid-add grid item x y width height) "Add ITEM to GRID represented by axis-aligned bounding box defined by X, Y, WIDTH, HEIGHT." -- cgit v1.2.3