;;;; lookup-table-synch.scm ;;;; Kon Lovett, Sep '09 ;;; (module lookup-table-synch (;export make-dict/synch alist->dict/synch dict->alist/synch dict?/synch dict-equivalence-function/synch dict-count/synch dict-keys/synch dict-values/synch dict-ref/synch dict-indempotent-ref!/synch dict-set!/synch dict-exists?/synch dict-update!/synch dict-update-list!/synch dict-update-dict!/synch dict-delete!/synch dict-for-each/synch dict-search/synch dict-merge!/synch dict-print/synch) (import scheme chicken lookup-table synch) (require-library lookup-table synch) ;;; Synchronized Dictionary (define-syntax synch-wrap-make (lambda (frm rnm cmp) (let ((_define (rnm 'define)) (_let (rnm 'let)) (_and (rnm 'and)) (_or (rnm 'or)) (_not (rnm 'not)) (_null? (rnm 'null?)) (_symbol? (rnm 'symbol?)) (_car (rnm 'car)) (_cdr (rnm 'cdr)) (_if (rnm 'if)) (_apply (rnm 'apply)) (_make-object/synch (rnm 'make-object/synch)) (_gensym (rnm 'gensym)) ) (let* ((prcnam (cadr frm)) (newnam (string->symbol (string-append (symbol->string prcnam) "/synch"))) ) `(,_define (,newnam . args) (,_let ((id (,_and (,_not (,_null? args)) (,_symbol? (,_car args)) (,_car args)))) (,_make-object/synch (,_apply ,prcnam (,_if id (,_cdr args) args)) (,_or id (,_gensym 'object/synch-))) ) ) ) ) ) ) (define-syntax synch-wrap (lambda (frm rnm cmp) (let ((_define (rnm 'define)) (_apply (rnm 'apply)) (_let/synch (rnm 'let/synch)) ) (let* ((prcnam (cadr frm)) (newnam (string->symbol (string-append (symbol->string prcnam) "/synch"))) ) `(,_define (,newnam os . args) (,_let/synch ((o os)) (,_apply ,prcnam o args))) ) ) ) ) (synch-wrap-make make-dict) (synch-wrap alist->dict) (synch-wrap dict->alist) (synch-wrap dict?) (synch-wrap dict-equivalence-function) (synch-wrap dict-count) (synch-wrap dict-keys) (synch-wrap dict-values) (synch-wrap dict-ref) (synch-wrap dict-indempotent-ref!) (synch-wrap dict-set!) (synch-wrap dict-exists?) (synch-wrap dict-update!) (synch-wrap dict-update-list!) (synch-wrap dict-update-dict!) (synch-wrap dict-delete!) (synch-wrap dict-for-each) (synch-wrap dict-search) (synch-wrap dict-merge!) (synch-wrap dict-print) ) ;module lookup-table-synch