aboutsummaryrefslogtreecommitdiff
path: root/pypi/sdist-store/dependency-sets.scm
diff options
context:
space:
mode:
Diffstat (limited to 'pypi/sdist-store/dependency-sets.scm')
-rw-r--r--pypi/sdist-store/dependency-sets.scm66
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))))