changeset 698: | 96958d3eb5b0 |
parent: | 4dd7b6320efc |
author: | Richard Westhaver <ellis@rwest.io> |
date: | Fri, 04 Oct 2024 22:04:59 -0400 |
permissions: | -rw-r--r-- |
description: | fixes |
438 | 1 | ;;; simple.lisp --- Zstd Simple API |
2 | ||
3 | ;; |
|
4 | ||
5 | ;;; Code: |
|
6 | (in-package :zstd) |
|
7 | ||
507 | 8 | (deferror zstd-alien-simple-error (zstd-alien-error std-error) () (:auto t)) |
9 | ||
438 | 10 | (define-alien-routine "ZSTD_compress" size-t |
11 | (dst (* t)) |
|
12 | (dst-capacity size-t) |
|
13 | (src (* t)) |
|
14 | (src-size size-t) |
|
15 | (compression int)) |
|
16 | ||
17 | (define-alien-routine "ZSTD_decompress" size-t |
|
470 | 18 | (dst (* t)) |
19 | (dst-capacity size-t) |
|
20 | (src (* t)) |
|
21 | (compressed-size size-t)) |
|
22 | ||
23 | (defun zstdc (octets &optional (level 3)) |
|
481
e048ca31ad61
with-zstd-output (buffered)
Richard Westhaver <ellis@rwest.io>
parents:
470
diff
changeset
|
24 | (let* ((len (length octets)) |
e048ca31ad61
with-zstd-output (buffered)
Richard Westhaver <ellis@rwest.io>
parents:
470
diff
changeset
|
25 | (clen (zstd-compressbound len))) |
470 | 26 | (with-alien ((in (* (unsigned 8)) (make-alien (unsigned 8) len)) |
481
e048ca31ad61
with-zstd-output (buffered)
Richard Westhaver <ellis@rwest.io>
parents:
470
diff
changeset
|
27 | (out (* (unsigned 8)) (make-alien (unsigned 8) clen))) |
470 | 28 | (clone-octets-to-alien octets in) |
481
e048ca31ad61
with-zstd-output (buffered)
Richard Westhaver <ellis@rwest.io>
parents:
470
diff
changeset
|
29 | (let ((csize (zstd-compress out clen in len level))) |
470 | 30 | (if (= 1 (zstd-iserror csize)) |
507 | 31 | (zstd-alien-simple-error (zstd-geterrorname csize)) |
470 | 32 | (coerce |
33 | (loop for i from 0 below csize |
|
34 | collect (deref out i)) |
|
35 | 'vector)))))) |
|
36 | ||
37 | (defun zstdd (octets &optional (capacity 4096)) |
|
38 | (let ((len (length octets))) |
|
39 | (with-alien ((in (* (unsigned 8)) (make-alien (unsigned 8) len))) |
|
40 | (clone-octets-to-alien octets in) |
|
41 | (with-alien ((out (* (unsigned 8)) (make-alien (unsigned 8) capacity))) |
|
42 | (let ((dsize (zstd-decompress out capacity in len))) |
|
43 | (if (= 1 (zstd-iserror dsize)) |
|
507 | 44 | (zstd-alien-simple-error (zstd-geterrorname dsize)) |
470 | 45 | (coerce |
46 | (loop for i from 0 below dsize |
|
47 | collect (deref out i)) |
|
48 | 'vector))))))) |
|
49 | ||
50 | ;; (zstdd (zstdc (make-array 4000 :initial-element (random 255) :element-type 'integer) 22)) |