(library (cache-xml) (export generate-xml) (import (rnrs) (list-utils) (loops) (generators) (xml) (fmt fmt) (srfi s27 random-bits) (only (srfi s1 lists) iota)) (define (make-enum-vector count) (let ((v (make-vector count))) (upto (n count) (vector-set! v n n)) v)) (define (vector-swap! v n m) (let ((tmp (vector-ref v n))) (vector-set! v n (vector-ref v m)) (vector-set! v m tmp))) (define (rnd b e) (+ b (random-integer (- e b)))) (define (vector-partial-shuffle! v count) (let ((len (vector-length v))) (upto (n count) (vector-swap! v n (rnd n len))))) ;;--------------------------------------------------------- (define (generate-xml block-size nr-origin-blocks nr-cache-blocks) (tag 'superblock `((uuid . "") (block-size . ,block-size) (nr-cache-blocks . ,nr-cache-blocks) (policy . "smq") (hint-width . 4)) ;; FIXME: what a waste of memory (let ((v (make-enum-vector nr-origin-blocks))) (vector-partial-shuffle! v nr-cache-blocks) (vcat (map (lambda (cblock) (tag 'mapping `((cache-block . ,cblock) (origin-block . ,(vector-ref v cblock)) (dirty . "true")))) (iota nr-cache-blocks)))))))