You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
typesetting/pitfall/restructure/decodestream.rkt

29 lines
1.3 KiB
Racket

#lang restructure/racket
(provide (all-defined-out))
;; approximates https://github.com/mbutterick/restructure/blob/master/src/DecodeStream.coffee
8 years ago
(provide (rename-out [type-sizes TYPES]))
(define type-sizes (let-values ([(intkeys intvalues)
(for*/lists (intkeys intvalues)
([signed (in-list '(U ""))]
[size (in-list '(8 16 24 32))])
(values
(format "~aInt~a" signed size)
(/ size 8)))])
(for/hash ([key (in-list (append '(Float Double) intkeys))]
[value (in-list (append '(4 8) intvalues))]
#:when key
[endian '("" BE LE)])
(values (string->symbol (format "~a~a" key endian)) value))))
8 years ago
;; basically just a wrapper for a Racket port
8 years ago
(define-subclass object% (RDecodeStream [buffer #""])
8 years ago
(field [length (bytes-length buffer)]
[_port (open-input-bytes buffer)])
(getter-field [pos (port-position _port)])
(define/public (read-bytes count)
(read-bytes-exact count _port)))