|
|
@ -62,15 +62,17 @@ https://github.com/mbutterick/restructure/blob/master/src/Array.coffee
|
|
|
|
(define (xarray-size xa [val #f] #:parent [parent #f])
|
|
|
|
(define (xarray-size xa [val #f] #:parent [parent #f])
|
|
|
|
(when val (unless (sequence? val)
|
|
|
|
(when val (unless (sequence? val)
|
|
|
|
(raise-argument-error 'xarray-size "sequence" val)))
|
|
|
|
(raise-argument-error 'xarray-size "sequence" val)))
|
|
|
|
|
|
|
|
(finalize-size
|
|
|
|
(cond
|
|
|
|
(cond
|
|
|
|
[val (let-values ([(parent len-size) (if (xint? (xarray-base-len xa))
|
|
|
|
[val (define-values (new-parent len-size) (if (xint? (xarray-base-len xa))
|
|
|
|
(values (mhasheq 'parent parent) (size (xarray-base-len xa)))
|
|
|
|
(values (mhasheq 'parent parent) (size (xarray-base-len xa)))
|
|
|
|
(values parent 0))])
|
|
|
|
(values parent 0)))
|
|
|
|
(+ len-size (for/sum ([item val])
|
|
|
|
(define items-size (for/sum ([item val])
|
|
|
|
(size (xarray-base-type xa) item #:parent parent))))]
|
|
|
|
(size (xarray-base-type xa) item #:parent new-parent)))
|
|
|
|
[else (let ([item-count (resolve-length (xarray-base-len xa) #f #:parent parent)]
|
|
|
|
(+ items-size len-size)]
|
|
|
|
[item-size (size (xarray-base-type xa) #f #:parent parent)])
|
|
|
|
[else (define item-count (resolve-length (xarray-base-len xa) #f #:parent parent))
|
|
|
|
(* item-size item-count))]))
|
|
|
|
(define item-size (size (xarray-base-type xa) #f #:parent parent))
|
|
|
|
|
|
|
|
(* item-size item-count)])))
|
|
|
|
|
|
|
|
|
|
|
|
(struct xarray-base (type len) #:transparent)
|
|
|
|
(struct xarray-base (type len) #:transparent)
|
|
|
|
(struct xarray xarray-base (length-type) #:transparent
|
|
|
|
(struct xarray xarray-base (length-type) #:transparent
|
|
|
|