(define-module (pypi sdist-store dependency-sets) #:use-module (srfi srfi-9) #:use-module (ice-9 vlist) #:export (make-dependency-sets-record add-dependency-set remove-dependency-set dependency-sets->list get-dependency-set-keys-matching get-dependency-set-keys get-dependency-set)) (define-record-type (new-dependency-sets-record vhash next-key) dependency-sets-record? (vhash dependency-sets-vhash) (next-key dependency-sets-next-key)) (define (make-dependency-sets-record) (new-dependency-sets-record vlist-null 0)) (define (add-dependency-set dependency-sets entry) (let ((key (dependency-sets-next-key dependency-sets))) (new-dependency-sets-record (vhash-consq key entry (dependency-sets-vhash dependency-sets)) (+ key 1)))) (define (remove-dependency-set dependency-sets key) (new-dependency-sets-record (vhash-delq key (dependency-sets-vhash dependency-sets)) (dependency-sets-next-key dependency-sets))) (define (dependency-sets->list proc dependency-sets) (vhash-fold (lambda (key value result) (cons (proc key value) result)) '() (dependency-sets-vhash dependency-sets))) (define (get-dependency-set-keys-matching dependency-sets proc) (vhash-fold (lambda (key value result) (if (proc value) (cons key result) result)) '() (dependency-sets-vhash dependency-sets))) (define (get-dependency-set-keys dependency-sets) (vhash-fold (lambda (key value result) (cons key result)) '() (dependency-sets-vhash dependency-sets))) (define (get-dependency-set dependency-sets key) (cdr (vhash-assq key (dependency-sets-vhash dependency-sets))))