File: constants.lisp

package info (click to toggle)
acl2 8.6%2Bdfsg-2
  • links: PTS
  • area: main
  • in suites: trixie
  • size: 1,111,420 kB
  • sloc: lisp: 17,818,294; java: 125,359; python: 28,122; javascript: 23,458; cpp: 18,851; ansic: 11,569; perl: 7,678; xml: 5,591; sh: 3,976; makefile: 3,833; ruby: 2,633; yacc: 1,126; ml: 763; awk: 295; csh: 233; lex: 197; php: 178; tcl: 49; asm: 23; haskell: 17
file content (73 lines) | stat: -rw-r--r-- 2,830 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
(in-package 3bz)

;; libz says these are enough entries for zlib as specified
(defconstant +max-tree-entries/len+ 852)
(defconstant +max-tree-entries/dist+ 592)
(defconstant +max-tree-size+ (+ +max-tree-entries/len+
                                +max-tree-entries/dist+))

;; max # of bits for an encoded huffman tree entry + and optional extra bits
;; (= 15 bits + 13 extra bits)
(defconstant +ht-max-bits+ 28)

;; low-bit tags for nodes in tree
(defconstant +ht-literal+ #b00)
(defconstant +ht-link/end+ #b01)
(defconstant +ht-len/dist+ #b10)
(defconstant +ht-invalid+ #b11)

;; 'end' code in lit/len alphabet
(defconstant +end-code+ 256)
;; first length code in lit/len alphabet
(defconstant +lengths-start+ 257)
;; last valid length (there are some extra unused values to fill tree)
(defconstant +lengths-end+ 285)
;; offset of length codes in extra-bits tables
(eval-when (:compile-toplevel :load-toplevel :execute)
  (defconstant +lengths-extra-bits-offset+ 32))

(defconstant +adler32-prime+ 65521)



;; extra-bits and len/dist-bases store
(declaim (type (simple-array (unsigned-byte 4)
                             (#. (+ 29 +lengths-extra-bits-offset+)))
               +extra-bits+)
         (type (simple-array (unsigned-byte 16)
                             (#. (+ 29 +lengths-extra-bits-offset+)))
               +len/dist-bases+))

(alexandria:define-constant +extra-bits+
    (concatenate
     '(simple-array (unsigned-byte 4) (61))
     (replace (make-array +lengths-extra-bits-offset+ :initial-element 0)
              #(0 0 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12 12 13 13))
     #(0 0 0 0 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 0))
  :test 'equalp)


;; base length value for each length/distance code, add to extra bits
;; to get length
(alexandria:define-constant +len/dist-bases+
    (concatenate '(simple-array (unsigned-byte 16) (61))
                 (replace (make-array +lengths-extra-bits-offset+ :initial-element 0)
                          #(1 2 3 4 5 7 9 13 17 25 33 49 65 97
                            129 193 257 385 513 769
                            1025 1537 2049 3073 4097 6145 8193
                            12289 16385 24577))
                 #(3 4 5 6 7 8 9 10 11 13 15 17 19 23 27 31 35 43 51 59 67 83 99
                   115 131 163 195 227 258))
  :test 'equalp)

(declaim (type (simple-array (unsigned-byte 8) (19)) +len-code-order+))

(alexandria:define-constant +len-code-order+
    (coerce #(16 17 18 0 8 7 9 6 10 5 11 4 12 3 13 2 14 1 15)
            '(simple-array (unsigned-byte 8) (19)))
  :test 'equalp)
(declaim (type (simple-array (unsigned-byte 4) (19)) +len-code-extra+))
(alexandria:define-constant +len-code-extra+
    (coerce #(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 3 7)
            '(simple-array (unsigned-byte 4) (19)))
  :test 'equalp)