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 8 (deferror zstd-alien-simple-error (zstd-alien-error std-error) () (:auto t)) 10 (define-alien-routine "ZSTD_compress" size-t 17 (define-alien-routine "ZSTD_decompress" size-t 21 (compressed-size size-t)) 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)) 33 (loop for i from 0 below csize 34 collect (deref out i)) 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)) 46 (loop for i from 0 below dsize 47 collect (deref out i)) 50 ;; (zstdd (zstdc (make-array 4000 :initial-element (random 255) :element-type 'integer) 22))