Fix some slowness; clock emitters emit immediately.

This commit is contained in:
David Thompson 2024-05-22 06:52:36 -04:00
parent 984ea4df67
commit ff242fd1a5
2 changed files with 17 additions and 10 deletions

View file

@ -102,18 +102,25 @@
(set! *snapshots* older-snapshots) (set! *snapshots* older-snapshots)
(media-play audio:undo)))) (media-play audio:undo))))
(define (sort lst <=) (define (sort lst compare)
(match lst (match lst
(() '()) (() '())
((_) lst) ((_) lst)
((pivot . rest) (_
(let lp ((left '()) (right '()) (pivot pivot) (rest rest)) ;; Insertion sort because I am lazy!
(match rest (let ((vec (list->vector lst)))
(() (append (sort left <=) (list pivot) (sort right <=))) (let outer ((i 1))
((x . rest) (when (< i (vector-length vec))
(if (<= x pivot) (let inner ((j i))
(lp (append left (list x)) right pivot rest) (when (> j 0)
(lp left (append right (list x)) pivot rest)))))))) (let ((a (vector-ref vec j))
(b (vector-ref vec (1- j))))
(when (compare a b)
(vector-set! vec j b)
(vector-set! vec (1- j) a)
(inner (1- j))))))
(outer (1+ i))))
(vector->list vec)))))
(define (filter-map proc lst) (define (filter-map proc lst)
(let lp ((lst lst)) (let lp ((lst lst))

View file

@ -115,7 +115,7 @@
(('pushed?) ($ pushed?)))) (('pushed?) ($ pushed?))))
(define (^clock-emitter bcom x y interval) (define (^clock-emitter bcom x y interval)
(define timer (spawn ^cell 0)) (define timer (spawn ^cell -1))
(define position (vector x y 0)) (define position (vector x y 0))
(match-lambda* (match-lambda*
(('type) 'emitter) (('type) 'emitter)