[functional-tests] change btree functions to take a spine.

Also change the step-spine interface slightly.
This commit is contained in:
Joe Thornber
2017-09-14 16:09:43 +01:00
parent 48ae5beead
commit 4d3733d0e7
6 changed files with 80 additions and 83 deletions

View File

@@ -113,11 +113,11 @@
;;; Spine
;;;--------------------------------------------------------
(define-record-type spine
(fields (mutable max) (mutable entries))
(fields (immutable cache) (mutable max) (mutable entries))
(protocol
(lambda (new)
(lambda (max)
(new max '())))))
(lambda (cache max)
(new cache max '())))))
(define (spine-exit sp)
(for-each release-block (spine-entries sp)))
@@ -126,13 +126,14 @@
(let ((rs (reverse xs)))
(values (car xs) (reverse (cdr xs)))))
(define (spine-step% sp b)
(if (> (length (spine-entries sp))
(spine-max sp))
(receive (oldest-b es) (pop-last (spine-entries sp))
(release-block oldest-b)
(spine-entries-set! sp (cons b es)))
(spine-entries-set! sp (cons b (spine-entries sp)))))
(define (spine-step% sp index flags)
(let ((b (get-block (spine-cache sp) index flags)))
(if (> (length (spine-entries sp))
(spine-max sp))
(receive (oldest-b es) (pop-last (spine-entries sp))
(release-block oldest-b)
(spine-entries-set! sp (cons b es)))
(spine-entries-set! sp (cons b (spine-entries sp))))))
(define (spine-current sp)
(car (spine-entries sp)))
@@ -142,8 +143,8 @@
(define-syntax with-spine
(syntax-rules ()
((_ (sp max) b1 b2 ...)
(let ((sp (make-spine max)))
((_ (sp cache max) b1 b2 ...)
(let ((sp (make-spine cache max)))
(dynamic-wind
(lambda () #f)
(lambda () b1 b2 ...)
@@ -151,9 +152,9 @@
(define-syntax spine-step
(syntax-rules ()
((_ sp (b expr) b1 b2 ...)
((_ sp (b index flags) b1 b2 ...)
(begin
(spine-step% sp expr)
(spine-step% sp index flags)
(let ((b (spine-current sp)))
b1 b2 ...)))))
)