40 lines
801 B
Racket
40 lines
801 B
Racket
#lang racket
|
|
(require (planet jaymccarthy/dbm)
|
|
"wrap-dict.rkt")
|
|
|
|
(define (read-string s)
|
|
(with-input-from-string s read))
|
|
(define (write-string v)
|
|
(with-output-to-string (lambda () (write v))))
|
|
|
|
(define make-read/write-dict
|
|
(make-wrapped-dict
|
|
write-string read-string
|
|
write-string read-string))
|
|
|
|
(define (call-with-vdbm pth f)
|
|
(define a-dbm #f)
|
|
(dynamic-wind
|
|
(lambda ()
|
|
(set! a-dbm (dbm-open pth)))
|
|
(lambda ()
|
|
(f (make-read/write-dict a-dbm)))
|
|
(lambda ()
|
|
(dbm-close! a-dbm))))
|
|
|
|
(provide/contract
|
|
[call-with-vdbm (path-string? (dict? . -> . any) . -> . any)])
|
|
|
|
;; Test
|
|
|
|
(call-with-vdbm
|
|
"test"
|
|
(lambda (a-dict)
|
|
(list
|
|
(dict-set! a-dict (cons 1 2) 50)
|
|
(dict-ref a-dict (cons 1 2))
|
|
|
|
(for/list ([k (in-dict-keys a-dict)])
|
|
k))))
|
|
|