diff options
author | Thomas White <taw@physics.org> | 2021-05-13 11:00:16 +0200 |
---|---|---|
committer | Thomas White <taw@physics.org> | 2021-05-13 11:00:16 +0200 |
commit | 6e86ea3f962577dca6f5ce703ab22e0ad2390d2b (patch) | |
tree | cf12f0651f262df6915a7bb8fb2be82d62523532 | |
parent | cecbbeb8dc71d99adbb078a690714011f91f4ce5 (diff) |
Avoid mutation of state objects by "set-state-name!"
-rw-r--r-- | guile/starlet/scanout.scm | 15 | ||||
-rw-r--r-- | guile/starlet/state.scm | 8 |
2 files changed, 16 insertions, 7 deletions
diff --git a/guile/starlet/scanout.scm b/guile/starlet/scanout.scm index 7833076..e7ab623 100644 --- a/guile/starlet/scanout.scm +++ b/guile/starlet/scanout.scm @@ -41,6 +41,21 @@ ;; List of states being scanned out (define state-list (make-atomic-box '())) +;; Association list of names to states +(define state-names (make-atomic-box '())) + + +(define (get-state-name st) + (assq-ref (atomic-box-ref state-names) + st)) + + +(define (set-state-name! st name) + (atomic-box-set! state-names + (assq-set! (atomic-box-ref state-names) + st + name))) + ;; Patch a new fixture (define* (patch-real name diff --git a/guile/starlet/state.scm b/guile/starlet/state.scm index a889d0c..92bf681 100644 --- a/guile/starlet/state.scm +++ b/guile/starlet/state.scm @@ -31,7 +31,6 @@ #:export (<starlet-state> make-empty-state get-state-name - set-state-name! state-for-each state-map clear-state! @@ -60,12 +59,7 @@ (define-class <starlet-state> (<object>) (hash-table-box #:init-form (make-atomic-box (make-hash-table)) - #:getter get-ht-box) - (name - #:init-value #f - #:init-keyword #:name - #:getter get-state-name - #:setter set-state-name!)) + #:getter get-ht-box)) ;; The state used to build a new scene for recording |