42 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Scheme
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Scheme
		
	
	
	
	
	
(library
 | 
						|
  (thin xml)
 | 
						|
  (export generate-xml)
 | 
						|
  (import (rnrs)
 | 
						|
          (list-utils)
 | 
						|
          (generators)
 | 
						|
          (xml)
 | 
						|
          (fmt fmt)
 | 
						|
          (only (srfi s1 lists) iota))
 | 
						|
 | 
						|
  (define (div-down n d)
 | 
						|
    (floor (/ n d)))
 | 
						|
 | 
						|
  (define (generate-dev dev-id nr-mappings data-offset)
 | 
						|
    (tag 'device `((dev-id . ,dev-id)
 | 
						|
                   (mapped-blocks . ,nr-mappings)
 | 
						|
                   (transaction . 1)
 | 
						|
                   (creation-time . 0)
 | 
						|
                   (snap-time . 0))
 | 
						|
         (tag 'range_mapping `((origin-begin . 0)
 | 
						|
                               (data-begin . ,data-offset)
 | 
						|
                               (length . ,nr-mappings)
 | 
						|
                               (time . 1)))))
 | 
						|
 | 
						|
  (define (generate-xml max-thins max-mappings)
 | 
						|
    (let ((nr-thins ((make-uniform-generator 1 max-thins)))
 | 
						|
          (nr-mappings-g (make-uniform-generator (div-down max-mappings 2)
 | 
						|
                                                 max-mappings)))
 | 
						|
      (let ((nr-mappings (iterate nr-mappings-g nr-thins)))
 | 
						|
       (tag 'superblock `((uuid . "")
 | 
						|
                         (time . 1)
 | 
						|
                         (transaction . 1)
 | 
						|
                         (flags . 0)
 | 
						|
                         (version . 2)
 | 
						|
                         (data-block-size . 128)
 | 
						|
                         (nr-data-blocks . ,(apply + nr-mappings)))
 | 
						|
            (vcat (map generate-dev
 | 
						|
                       (iota nr-thins)
 | 
						|
                       nr-mappings
 | 
						|
                       (accumulate nr-mappings))))))))
 | 
						|
 |