mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-19 05:39:18 +02:00
Improving (chibi bytevector) docs.
This commit is contained in:
parent
93730efceb
commit
0e83df3f91
2 changed files with 40 additions and 16 deletions
|
@ -1,28 +1,43 @@
|
||||||
|
|
||||||
;;> \section{Additional accessors}
|
;;> \section{Additional accessors}
|
||||||
|
|
||||||
(define (bytevector-u16-ref-le str i)
|
;;> Retrieve a 16-bit unsigned integer value from the given bytevector
|
||||||
(+ (bytevector-u8-ref str i)
|
;;> \var{bv} at offset \var{i}, in little-endian order.
|
||||||
(arithmetic-shift (bytevector-u8-ref str (+ i 1)) 8)))
|
|
||||||
|
|
||||||
(define (bytevector-u16-ref-be str i)
|
(define (bytevector-u16-ref-le bv i)
|
||||||
(+ (arithmetic-shift (bytevector-u8-ref str i) 8)
|
(+ (bytevector-u8-ref bv i)
|
||||||
(bytevector-u8-ref str (+ i 1))))
|
(arithmetic-shift (bytevector-u8-ref bv (+ i 1)) 8)))
|
||||||
|
|
||||||
(define (bytevector-u32-ref-le str i)
|
;;> Retrieve a 16-bit unsigned integer value from the given bytevector
|
||||||
(+ (bytevector-u8-ref str i)
|
;;> \var{bv} at offset \var{i}, in big-endian order.
|
||||||
(arithmetic-shift (bytevector-u8-ref str (+ i 1)) 8)
|
|
||||||
(arithmetic-shift (bytevector-u8-ref str (+ i 2)) 16)
|
|
||||||
(arithmetic-shift (bytevector-u8-ref str (+ i 3)) 24)))
|
|
||||||
|
|
||||||
(define (bytevector-u32-ref-be str i)
|
(define (bytevector-u16-ref-be bv i)
|
||||||
(+ (arithmetic-shift (bytevector-u8-ref str i) 24)
|
(+ (arithmetic-shift (bytevector-u8-ref bv i) 8)
|
||||||
(arithmetic-shift (bytevector-u8-ref str (+ i 1)) 16)
|
(bytevector-u8-ref bv (+ i 1))))
|
||||||
(arithmetic-shift (bytevector-u8-ref str (+ i 2)) 8)
|
|
||||||
(bytevector-u8-ref str (+ i 3))))
|
;;> Retrieve a 32-bit unsigned integer value from the given bytevector
|
||||||
|
;;> \var{bv} at offset \var{i}, in little-endian order.
|
||||||
|
|
||||||
|
(define (bytevector-u32-ref-le bv i)
|
||||||
|
(+ (bytevector-u8-ref bv i)
|
||||||
|
(arithmetic-shift (bytevector-u8-ref bv (+ i 1)) 8)
|
||||||
|
(arithmetic-shift (bytevector-u8-ref bv (+ i 2)) 16)
|
||||||
|
(arithmetic-shift (bytevector-u8-ref bv (+ i 3)) 24)))
|
||||||
|
|
||||||
|
;;> Retrieve a 32-bit unsigned integer value from the given bytevector
|
||||||
|
;;> \var{bv} at offset \var{i}, in big-endian order.
|
||||||
|
|
||||||
|
(define (bytevector-u32-ref-be bv i)
|
||||||
|
(+ (arithmetic-shift (bytevector-u8-ref bv i) 24)
|
||||||
|
(arithmetic-shift (bytevector-u8-ref bv (+ i 1)) 16)
|
||||||
|
(arithmetic-shift (bytevector-u8-ref bv (+ i 2)) 8)
|
||||||
|
(bytevector-u8-ref bv (+ i 3))))
|
||||||
|
|
||||||
;;> \section{Integer conversion}
|
;;> \section{Integer conversion}
|
||||||
|
|
||||||
|
;;> Convert an unsigned integer \var{n} to a bytevector representing
|
||||||
|
;;> the base-256 big-endian form (the zero index holds the MSB).
|
||||||
|
|
||||||
(define (integer->bytevector n)
|
(define (integer->bytevector n)
|
||||||
(cond
|
(cond
|
||||||
((zero? n)
|
((zero? n)
|
||||||
|
@ -40,6 +55,10 @@
|
||||||
(bytevector-u8-set! bv i (car ls))))
|
(bytevector-u8-set! bv i (car ls))))
|
||||||
(lp (quotient n 256) (cons (remainder n 256) res)))))))
|
(lp (quotient n 256) (cons (remainder n 256) res)))))))
|
||||||
|
|
||||||
|
;;> The inverse of \scheme{integer->bytevector}. Convert a bytevector
|
||||||
|
;;> representing the base-256 big-endian form (the zero index holds
|
||||||
|
;;> the MSB) to the corresponding unsigned integer.
|
||||||
|
|
||||||
(define (bytevector->integer bv)
|
(define (bytevector->integer bv)
|
||||||
(let ((len (bytevector-length bv)))
|
(let ((len (bytevector-length bv)))
|
||||||
(let lp ((i 0) (n 0))
|
(let lp ((i 0) (n 0))
|
||||||
|
@ -49,6 +68,9 @@
|
||||||
(+ (arithmetic-shift n 8)
|
(+ (arithmetic-shift n 8)
|
||||||
(bytevector-u8-ref bv i)))))))
|
(bytevector-u8-ref bv i)))))))
|
||||||
|
|
||||||
|
;;> Utility to pad a bytevector with zeros. Padding is added to the
|
||||||
|
;;> left so as not to change the big-endian value.
|
||||||
|
|
||||||
(define (bytevector-pad-left bv len)
|
(define (bytevector-pad-left bv len)
|
||||||
(let ((diff (- len (bytevector-length bv))))
|
(let ((diff (- len (bytevector-length bv))))
|
||||||
(if (positive? diff)
|
(if (positive? diff)
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
|
|
||||||
|
;;> Additional bytevector utilities.
|
||||||
|
|
||||||
(define-library (chibi bytevector)
|
(define-library (chibi bytevector)
|
||||||
(export
|
(export
|
||||||
bytevector-u16-ref-le bytevector-u16-ref-be
|
bytevector-u16-ref-le bytevector-u16-ref-be
|
||||||
|
|
Loading…
Add table
Reference in a new issue