;;;; lookup-table-unsafe-synch.scm ;;;; Kon Lovett, Sep '09 ;;; (module lookup-table-unsafe-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-unsafe synch) (require-library lookup-table-unsafe 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-unsafe-synch