diff options
Diffstat (limited to 'pypi/sdist-store/dependency-sets.scm')
-rw-r--r-- | pypi/sdist-store/dependency-sets.scm | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/pypi/sdist-store/dependency-sets.scm b/pypi/sdist-store/dependency-sets.scm new file mode 100644 index 0000000..d8fb920 --- /dev/null +++ b/pypi/sdist-store/dependency-sets.scm @@ -0,0 +1,66 @@ +(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 <dependency-sets> + (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)))) |