changeset 697: | 08621be7e780 |
parent: | 937a6f354047 |
author: | Richard Westhaver <ellis@rwest.io> |
date: | Fri, 04 Oct 2024 21:45:59 -0400 |
permissions: | -rw-r--r-- |
description: | alien C updates |
114 | 1 | ;;; ffi/zstd/pkg.lisp --- ZSTD FFI |
2 | ||
395 | 3 | ;; Zstd compression support for Lisp |
4 | ||
5 | ;;; Commentary: |
|
6 | ||
431
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
7 | ;; Initially I was thinking of this as an SB-CONTRIB module which links up |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
8 | ;; with whatever C runtime functions exposed by the built-in SBCL compression |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
9 | ;; support. However, there isn't actually much going on in the runtime and |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
10 | ;; it's not publicly exposed at all. The SBCL/Zstd surface-area is restrained |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
11 | ;; to FASL read/write streams and not of much use outside it. |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
12 | |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
13 | ;; So, we'll be applying the same from-scratch strategy we've become |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
14 | ;; accustomed to, exposing as much of the C API as possible and building up |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
15 | ;; our abstractions. |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
16 | |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
17 | ;; The low-level abstractions are in this package - ZSTD. |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
18 | |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
19 | ;; For the high-level abstractions see IO/FLATE and IO/ZSTD in the IO package. |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
20 | |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
21 | ;; The following programs have compile-time support for linking Zstd: |
395 | 22 | |
23 | ;; SBCL |
|
24 | ;; QEMU |
|
431
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
25 | ;; RocksDB |
114 | 26 | |
431
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
27 | #| from zstd.h: |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
28 | Introduction ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
29 | ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
30 | zstd, short for Zstandard, is a fast lossless compression algorithm, targeting ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
31 | real-time compression scenarios at zlib-level and better compression ratios. ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
32 | The zstd compression library provides in-memory compression and decompression ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
33 | functions. ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
34 | ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
35 | The library supports regular compression levels from 1 up to ZSTD_maxCLevel(), ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
36 | which is currently 22. Levels >= 20, labeled `--ultra`, should be used with ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
37 | caution, as they require more memory. The library also offers negative ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
38 | compression levels, which extend the range of speed vs. ratio preferences. ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
39 | The lower the level, the faster the speed (at the cost of compression). ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
40 | ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
41 | Compression can be done in: ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
42 | - a single step (described as Simple API) ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
43 | - a single step, reusing a context (described as Explicit context) ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
44 | - unbounded multiple steps (described as Streaming compression) ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
45 | ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
46 | The compression ratio achievable on small data can be highly improved using ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
47 | a dictionary. Dictionary compression can be performed in: ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
48 | - a single step (described as Simple dictionary API) ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
49 | - a single step, reusing a dictionary (described as Bulk-processing ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
50 | dictionary API) ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
51 | ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
52 | Advanced experimental functions can be accessed using ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
53 | `#define ZSTD_STATIC_LINKING_ONLY` before including zstd.h. ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
54 | ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
55 | Advanced experimental APIs should never be used with a dynamically-linked ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
56 | library. They are not "stable"; their definitions or signatures may change in ; ; ; ; ; ; |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
57 | the future. Only static linking is allowed. ; ; ; ; ; ; |
114 | 58 | |# |
59 | ||
60 | ;;; Code: |
|
96 | 61 | (defpackage :zstd |
391 | 62 | (:use :cl :std :sb-alien) |
431
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
63 | (:nicknames :zstd) |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
64 | (:export :zstd-alien-error :with-zstd-cstream :with-zstd-dstream |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
65 | :zstd-versionnumber :zstd-cstreaminsize :zstd-cstreamoutsize :zstd-inbuffer |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
66 | :zstd-iserror :zstd-defaultclevel :zstd-compress :zstd-decompress |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
67 | :zstd-cstream :zstd-dstream :zstd-compressstream :zstd-decompressstream |
470 | 68 | :zstd-compressstream2 :zstd-outbuffer :zstd-geterrorname :zstd-geterrorcode |
507 | 69 | :zstdc :zstdd |
657 | 70 | :zstd-alien-error :zstd-dstream-error :zstd-cstream-error |
71 | :with-zstd-streams |
|
72 | :with-zstd-buffers |
|
73 | :with-zstd-outbuffer |
|
74 | :with-zstd-inbuffer |
|
75 | :with-zstd-cdict |
|
76 | :with-zstd-ddict)) |
|
60 | 77 | |
96 | 78 | (in-package :zstd) |
114 | 79 | |
391 | 80 | (define-alien-loader "zstd" t "/usr/lib/") |
697 | 81 | (define-alien-loader "zstd-alien" t "/usr/local/lib/") |
391 | 82 | |
431
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
83 | ;;; Types |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
84 | (deftype zstd-error-code () |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
85 | `(integer 0 120)) |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
86 | |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
87 | (deftype zstd-strategy-designator () |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
88 | `(or (integer ,(zstd-minclevel) ,(zstd-maxclevel)) |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
89 | (member :fast :dfast :greedy :lazy |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
90 | :lazy2 :btlazy2 :btopt :btultra |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
91 | :btultra2))) |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
92 | |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
93 | (deftype zstd-compression-parameter () |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
94 | `(integer 100 1024)) |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
95 | (deftype zstd-decompression-parameter () |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
96 | `(integer 100 1024)) |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
97 | |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
98 | (deftype zstd-reset-directive () |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
99 | `(or (integer 1 3) (member :session-only :parameters :session-and-parameters))) |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
100 | (deftype zstd-end-directive () |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
101 | `(or (integer 0 2) (member :continue :flus :end))) |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
102 | |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
103 | ;;; Errors |
507 | 104 | (define-condition zstd-alien-condition () () |
105 | (:documentation "Superclass of all conditions triggered by the ZSTD FFI.")) |
|
431
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
106 | |
507 | 107 | (deferror zstd-alien-error (error) |
108 | ((code :initarg :code :accessor zstd-error-code)) |
|
109 | (:documentation "Error signaled from Zstd Alien.")) |
|
110 | |
|
469
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
111 | ;; found in zstd_errors.h |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
112 | (define-alien-enum (zstd-errorcode int) |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
113 | :no-error 0 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
114 | :generic 1 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
115 | :prefix-unknown 10 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
116 | :version-unsupported 12 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
117 | :frameparameter-unsupported 14 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
118 | :frameparameter-windowtoolarge 16 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
119 | :corruption-detected 20 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
120 | :checksum-wrong 22 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
121 | :literals-headerwrong 24 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
122 | :dictionary-corrupted 30 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
123 | :dictionary-wrong 32 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
124 | :dictionarycreation-failed 34 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
125 | :parameter-unsupported 40 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
126 | :parameter-combination-unsupported 41 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
127 | :parameter-outofbound 42 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
128 | :tablelog-toolarge 44 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
129 | :maxsymbolvalue-toolarge 46 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
130 | :maxsymbolvalue-toosmall 48 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
131 | :stabilitycondition-notrespected 50 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
132 | :stage-wrong 60 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
133 | :init-missing 62 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
134 | :memory-allocation 64 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
135 | :workspace-toosmall 66 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
136 | :dstsize-toosmall 70 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
137 | :srcsize-wrong 72 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
138 | :dstbuffer-null 74 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
139 | :noforwardprogress-destfull 80 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
140 | :noforwardprogress-inputempty 82 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
141 | ;; unstable |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
142 | :frameindex-toolarge 100 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
143 | :seekableio 102 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
144 | :dstbuffer-wrong 104 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
145 | :srcbuffer-wrong 105 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
146 | :sequenceproducer-failed 106 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
147 | :externalsequences-invalid 107 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
148 | :maxcode 120) |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
149 | |
392 | 150 | ;;; Utils |
431
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
151 | (define-alien-routine "ZSTD_versionNumber" unsigned) |
392 | 152 | (define-alien-routine "ZSTD_versionString" c-string) |
153 | (define-alien-routine "ZSTD_compressBound" size-t (src-size size-t)) |
|
154 | (define-alien-routine "ZSTD_isError" unsigned (code size-t)) |
|
155 | (define-alien-routine "ZSTD_getErrorName" c-string (code size-t)) |
|
431
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
156 | ;; zstd_errors.h - does this work? |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
157 | (define-alien-routine "ZSTD_getErrorCode" int (function-result size-t)) |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
158 | (define-alien-routine "ZSTD_getErrorString" c-string (code int)) |
c40d2a41d7ce
source concatenating std.lisp, more systems, got zstd simple working, IO work, added dat/tar
Richard Westhaver <ellis@rwest.io>
parents:
395
diff
changeset
|
159 | |
392 | 160 | (define-alien-routine "ZSTD_minCLevel" int) |
161 | (define-alien-routine "ZSTD_maxCLevel" int) |
|
162 | (define-alien-routine "ZSTD_defaultCLevel" int) |
|
163 | ||
470 | 164 | (define-alien-routine "ZSTD_findFrameCompressedSize" size-t |
165 | (src (* t)) |
|
166 | (src-size size-t)) |
|
167 | ||
168 | (define-alien-routine "ZSTD_getFrameContentSize" unsigned-long-long |
|
169 | (src (* t)) |
|
170 | (src-size size-t)) |
|
171 | ||
172 | (define-alien-routine "ZSTD_decompressBound" unsigned-long-long |
|
173 | (src (* t)) |
|
174 | (src-size size-t)) |
|
175 | ||
392 | 176 | ;;; Explicit Context API |
177 | (define-alien-type zstd-cctx (struct zstd-cctx-s)) |
|
178 | ||
179 | (define-alien-routine "ZSTD_createCCtx" (* zstd-cctx)) |
|
180 | (define-alien-routine "ZSTD_freeCCtx" void (cctx (* zstd-cctx))) |
|
181 | (define-alien-routine "ZSTD_compressCCtx" size-t |
|
182 | (cctx (* zstd-cctx)) |
|
183 | (dst (* t)) (dst-capacity size-t) |
|
184 | (src (* t)) (src-size size-t) |
|
185 | (compression-level int)) |
|
186 | ||
187 | (define-alien-type zstd-dctx (struct zstd-dctx-s)) |
|
188 | ||
189 | (define-alien-routine "ZSTD_createDCtx" (* zstd-dctx)) |
|
190 | (define-alien-routine "ZSTD_freeDCtx" void (dctx (* zstd-dctx))) |
|
191 | (define-alien-routine "ZSTD_decompressDCtx" size-t |
|
192 | (dctx (* zstd-dctx)) |
|
193 | (dst (* t)) (dst-capacity size-t) |
|
194 | (src (* t)) (src-size size-t)) |
|
469
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
195 | ;;; Advanced API |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
196 | (define-alien-enum (zstd-strategy int) |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
197 | :fast 1 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
198 | :dfast 2 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
199 | :greedy 3 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
200 | :lazy 4 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
201 | :lazy2 5 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
202 | :btlazy2 6 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
203 | :btopt 7 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
204 | :btultra 8 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
205 | :btultra2 9) |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
206 | |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
207 | (define-alien-enum (zstd-cparameter int) |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
208 | :compression-level 100 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
209 | :window-log 101 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
210 | :hash-log 102 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
211 | :chain-log 103 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
212 | :search-log 104 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
213 | :min-match 105 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
214 | :target-length 106 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
215 | :strategy 107 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
216 | :target-c-block-size 130 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
217 | :enable-long-distance-matching 160 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
218 | :ldm-hash-log 161 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
219 | :ldm-min-match 162 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
220 | :ldm-bucket-size-log 163 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
221 | :ldm-hash-rate-log 164 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
222 | :content-size-flag 200 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
223 | :checksum-flag 201 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
224 | :dict-id-flag 202 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
225 | :nb-workers 400 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
226 | :job-size 401 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
227 | :overlap-log 402 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
228 | :expiremental1 500 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
229 | :expiremental2 10 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
230 | :expiremental3 1000 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
231 | :expiremental4 1001 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
232 | :expiremental5 1002 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
233 | ;; :expiremental6 1003 ;; is now target-c-block-size |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
234 | :expiremental7 1004 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
235 | :expiremental8 1005 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
236 | :expiremental9 1006 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
237 | :expiremental10 1007 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
238 | :expiremental11 1008 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
239 | :expiremental12 1009 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
240 | :expiremental13 1010 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
241 | :expiremental14 1011 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
242 | :expiremental15 1012 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
243 | :expiremental16 1013 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
244 | :expiremental17 1014 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
245 | :expiremental18 1015 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
246 | :expiremental19 1016) |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
247 | |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
248 | (define-alien-enum (zstd-reset-directive int) |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
249 | :session-only 1 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
250 | :parameters 2 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
251 | :session-and-parameters 3) |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
252 | |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
253 | (define-alien-enum (zstd-dparameter int) |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
254 | :window-log-max 100 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
255 | :experimental1 1000 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
256 | :experimental2 1001 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
257 | :experimental3 1002 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
258 | :experimental4 1003 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
259 | :experimental5 1004 |
7354623e5b54
define-alien-enum, zstd, skel, and pod work
Richard Westhaver <ellis@rwest.io>
parents:
438
diff
changeset
|
260 | :experimental6 1005) |