blob: 1c11703399208cc5d9d5fe0dbe3685b7e901857d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
(in-package #:lempel)
(defparameter window-bits 12) ; Amount of bits for window. Valid range between 8 and 15
(defparameter break-even-threshold 4) ; Minimum word length to consider for compression
(defparameter reversed-byte-order nil)
(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)))))
|