(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)))))