summaryrefslogtreecommitdiff
path: root/common.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'common.lisp')
-rw-r--r--common.lisp12
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)))))