diff options
Diffstat (limited to 'common.lisp')
| -rw-r--r-- | common.lisp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/common.lisp b/common.lisp index a061ca1..1c11703 100644 --- a/common.lisp +++ b/common.lisp @@ -7,3 +7,15 @@ (defstruct point (offset 0 :type fixnum) (size 0 :type fixnum)) + +(declaim (ftype (function ((array (unsigned-byte 1)) fixnum) (unsigned-byte 8)) bits->byte)) +(defun bits->byte (data index) + (let ((byte 0)) + (dotimes (i 8) + (setf byte (logior byte (ash (elt data (+ index i)) (- 7 i))))) + byte)) + +(declaim (ftype (function ((unsigned-byte 8) (array (unsigned-byte 1)) fixnum)) byte->bits)) +(defun byte->bits (data bits index) + (dotimes (i 8) + (setf (elt bits (+ index i)) (ash (logand data (ash 1 (- 7 i))) (- i 7))))) |
