changelog shortlog graph tags branches changeset files revisions annotate raw help

Mercurial > core / lisp/ffi/zstd/simple.lisp

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
1 ;;; simple.lisp --- Zstd Simple API
2 
3 ;;
4 
5 ;;; Code:
6 (in-package :zstd)
7 
8 (deferror zstd-alien-simple-error (zstd-alien-error std-error) () (:auto t))
9 
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
18  (dst (* t))
19  (dst-capacity size-t)
20  (src (* t))
21  (compressed-size size-t))
22 
23 (defun zstdc (octets &optional (level 3))
24  (let* ((len (length octets))
25  (clen (zstd-compressbound len)))
26  (with-alien ((in (* (unsigned 8)) (make-alien (unsigned 8) len))
27  (out (* (unsigned 8)) (make-alien (unsigned 8) clen)))
28  (clone-octets-to-alien octets in)
29  (let ((csize (zstd-compress out clen in len level)))
30  (if (= 1 (zstd-iserror csize))
31  (zstd-alien-simple-error (zstd-geterrorname csize))
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))
44  (zstd-alien-simple-error (zstd-geterrorname dsize))
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))