diff --git a/src/ikarus.boot b/src/ikarus.boot index 02ff10b..eb68d91 100644 Binary files a/src/ikarus.boot and b/src/ikarus.boot differ diff --git a/src/ikarus.bytevectors.ss b/src/ikarus.bytevectors.ss index df0380f..7b495af 100644 --- a/src/ikarus.bytevectors.ss +++ b/src/ikarus.bytevectors.ss @@ -2,12 +2,14 @@ (library (ikarus bytevectors) (export make-bytevector bytevector-length bytevector-s8-ref bytevector-u8-ref bytevector-u8-set! bytevector-s8-set! - bytevector-copy! u8-list->bytevector bytevector->u8-list) + bytevector-copy! u8-list->bytevector bytevector->u8-list + bytevector-fill! bytevector-copy) (import (except (ikarus) make-bytevector bytevector-length bytevector-s8-ref bytevector-u8-ref bytevector-u8-set! bytevector-s8-set! - bytevector-copy! u8-list->bytevector bytevector->u8-list) + bytevector-copy! u8-list->bytevector bytevector->u8-list + bytevector-fill! bytevector-copy) (ikarus system $fx) (ikarus system $pairs) (ikarus system $bytevectors)) @@ -30,6 +32,15 @@ ($bytevector-fill (make-bytevector k) 0 k fill) (error 'make-bytevector "~s is not a valid fill" fill))])) + (define bytevector-fill! + (lambda (x fill) + (unless (bytevector? x) + (error 'bytevector-fill! "~s is not a bytevector" x)) + (unless (and (fixnum? fill) ($fx<= -128 fill) ($fx<= fill 255)) + (error 'bytevector-fill! "~s is not a valid fill" fill)) + ($bytevector-fill x 0 ($bytevector-length x) fill))) + + (define bytevector-length (lambda (x) (if (bytevector? x) @@ -114,6 +125,20 @@ (let ([s ($make-bytevector n)]) (fill s 0 ls)))))) + + (define bytevector-copy + (lambda (src) + (unless (bytevector? src) + (error 'bytevector-copy "~s is not a bytevector" src)) + (let ([n ($bytevector-length src)]) + (let f ([src src] [dst ($make-bytevector n)] [i 0] [n n]) + (cond + [($fx= i n) dst] + [else + ($bytevector-set! dst i ($bytevector-u8-ref src i)) + (f src dst ($fxadd1 i) n)]))))) + + (define bytevector-copy! (lambda (src src-start dst dst-start k) (cond diff --git a/src/makefile.ss b/src/makefile.ss index a0eb64c..c60b7d3 100755 --- a/src/makefile.ss +++ b/src/makefile.ss @@ -280,6 +280,8 @@ [bytevector->u8-list i] [u8-list->bytevector i] [bytevector-copy! i] + [bytevector-copy i] + [bytevector-fill! i] [for-each i r] [map i r]