(define (backend-nullwrap be) (make-storage (storage-max-block-size be) (storage-writable? be) (storage-unlinkable? be) (lambda (key data type) ; put! ((storage-put! be) key data type)) (lambda () ; flush! ((storage-flush! be))) (lambda (key) ; exists? ((storage-exists? be) key)) (lambda (key) ; get ((storage-get be) key)) (lambda (key) ; link! ((storage-link! be) key)) (lambda (key) ; unlink! ((storage-unlink! be) key)) (lambda (tag key) ; set-tag! ((storage-set-tag! be) tag key)) (lambda (tag) ; tag ((storage-tag be) tag)) (lambda () ; all-tags ((storage-all-tags be))) (lambda (tag) ; remove-tag! ((storage-remove-tag! be) tag)) (lambda (tag) ; lock-tag! ((storage-lock-tag! be) tag)) (lambda (tag) ; tag-locked? ((storage-tag-locked? be) tag)) (lambda (tag) ; unlock-tag! ((storage-unlock-tag! be) tag)) (lambda (command) ; admin! ((storage-admin! be) command)) (lambda () ; close! ((storage-close! be))))) (define (backend-limit-block-size be max-block-size) (make-storage (min max-block-size (storage-max-block-size be)) (storage-writable? be) (storage-unlinkable? be) (lambda (key data type) ; put! ((storage-put! be) key data type)) (lambda () ; flush! ((storage-flush! be))) (lambda (key) ; exists? ((storage-exists? be) key)) (lambda (key) ; get ((storage-get be) key)) (lambda (key) ; link! ((storage-link! be) key)) (lambda (key) ; unlink! ((storage-unlink! be) key)) (lambda (tag key) ; set-tag! ((storage-set-tag! be) tag key)) (lambda (tag) ; tag ((storage-tag be) tag)) (lambda () ; all-tags ((storage-all-tags be))) (lambda (tag) ; remove-tag! ((storage-remove-tag! be) tag)) (lambda (tag) ; lock-tag! ((storage-lock-tag! be) tag)) (lambda (tag) ; tag-locked? ((storage-tag-locked? be) tag)) (lambda (tag) ; unlock-tag! ((storage-unlock-tag! be) tag)) (lambda (command) ; admin! ((storage-admin! be) command)) (lambda () ; close! ((storage-close! be))))) (define (backend-debug be name) (make-storage (storage-max-block-size be) (storage-writable? be) (storage-unlinkable? be) (lambda (key data type) ; put! (begin (printf "~A: (put! ~A ~A ~A)\n" name key data type) ((storage-put! be) key data type))) (lambda () ; flush! (begin (printf "~A: (flush!)\n" name) ((storage-flush! be)))) (lambda (key) ; exists? (let ((result ((storage-exists? be) key))) (begin (printf "~A: (exists? ~A) = ~A\n" name key result) result))) (lambda (key) ; get (let ((result ((storage-get be) key))) (begin (printf "~A: (get ~A) = ~A\n" name key result) result))) (lambda (key) ; link! (begin (printf "~A: (link! ~A)\n" name key) ((storage-link! be) key))) (lambda (key) ; unlink! (let ((result ((storage-unlink! be) key))) (begin (printf "~A: (unlink! ~A) = ~A\n" name key result) result))) (lambda (tag key) ; set-tag! (begin (printf "~A: (set-tag! ~A ~A)\n" name tag key) ((storage-set-tag! be) tag key))) (lambda (tag) ; tag (let ((result ((storage-tag be) tag))) (begin (printf "~A: (tag ~A) = ~A\n" name tag result) result))) (lambda () ; all-tags (let ((result ((storage-all-tags be)))) (begin (printf "~A: (all-tags) = ~A\n" name result) result))) (lambda (tag) ; remove-tag! (begin (printf "~A: (remove-tag! ~A)\n" name tag) ((storage-remove-tag! be) tag))) (lambda (tag) ; lock-tag! (let ((result ((storage-lock-tag! be) tag))) (begin (printf "~A: (lock-tag! ~A) = ~A\n" name tag result) result))) (lambda (tag) ; tag-locked? (let ((result ((storage-tag-locked? be) tag))) (begin (printf "~A: (tag-locked? ~A) = ~A\n" name tag result) result))) (lambda (tag) ; unlock-tag! (begin (printf "~A: (lock-tag! ~A)\n" name tag) ((storage-unlock-tag! be) tag))) (lambda (command) ; admin! (let ((result ((storage-admin! be) command))) (begin (printf "~A: (admin! ~A) = ~A\n" name command result) result))) (lambda () ; close! (begin (printf "~A: (close!)\n" name) ((storage-close! be))))))