summaryrefslogtreecommitdiff
path: root/common.lisp
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)))))