changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > core / annotate 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
438
b719ae57647d zstd refactoring
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
1
 ;;; simple.lisp --- Zstd Simple API
b719ae57647d zstd refactoring
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
2
 
b719ae57647d zstd refactoring
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
3
 ;; 
b719ae57647d zstd refactoring
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
4
 
b719ae57647d zstd refactoring
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
5
 ;;; Code:
b719ae57647d zstd refactoring
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
6
 (in-package :zstd)
b719ae57647d zstd refactoring
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
7
 
507
4dd7b6320efc zstd alien errors
Richard Westhaver <ellis@rwest.io>
parents: 481
diff changeset
8
 (deferror zstd-alien-simple-error (zstd-alien-error std-error) () (:auto t))
4dd7b6320efc zstd alien errors
Richard Westhaver <ellis@rwest.io>
parents: 481
diff changeset
9
 
438
b719ae57647d zstd refactoring
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
10
 (define-alien-routine "ZSTD_compress" size-t
b719ae57647d zstd refactoring
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
11
   (dst (* t))
b719ae57647d zstd refactoring
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
12
   (dst-capacity size-t)
b719ae57647d zstd refactoring
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
13
   (src (* t))
b719ae57647d zstd refactoring
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
14
   (src-size size-t)
b719ae57647d zstd refactoring
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
15
   (compression int))
b719ae57647d zstd refactoring
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
16
 
b719ae57647d zstd refactoring
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
17
 (define-alien-routine "ZSTD_decompress" size-t
470
c6caddf91c72 zstdd and zstdc
Richard Westhaver <ellis@rwest.io>
parents: 438
diff changeset
18
   (dst (* t))
c6caddf91c72 zstdd and zstdc
Richard Westhaver <ellis@rwest.io>
parents: 438
diff changeset
19
   (dst-capacity size-t)
c6caddf91c72 zstdd and zstdc
Richard Westhaver <ellis@rwest.io>
parents: 438
diff changeset
20
   (src (* t))
c6caddf91c72 zstdd and zstdc
Richard Westhaver <ellis@rwest.io>
parents: 438
diff changeset
21
   (compressed-size size-t))
c6caddf91c72 zstdd and zstdc
Richard Westhaver <ellis@rwest.io>
parents: 438
diff changeset
22
 
c6caddf91c72 zstdd and zstdc
Richard Westhaver <ellis@rwest.io>
parents: 438
diff changeset
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
c6caddf91c72 zstdd and zstdc
Richard Westhaver <ellis@rwest.io>
parents: 438
diff changeset
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
c6caddf91c72 zstdd and zstdc
Richard Westhaver <ellis@rwest.io>
parents: 438
diff changeset
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
c6caddf91c72 zstdd and zstdc
Richard Westhaver <ellis@rwest.io>
parents: 438
diff changeset
30
         (if (= 1 (zstd-iserror csize))
507
4dd7b6320efc zstd alien errors
Richard Westhaver <ellis@rwest.io>
parents: 481
diff changeset
31
             (zstd-alien-simple-error (zstd-geterrorname csize))
470
c6caddf91c72 zstdd and zstdc
Richard Westhaver <ellis@rwest.io>
parents: 438
diff changeset
32
             (coerce
c6caddf91c72 zstdd and zstdc
Richard Westhaver <ellis@rwest.io>
parents: 438
diff changeset
33
              (loop for i from 0 below csize
c6caddf91c72 zstdd and zstdc
Richard Westhaver <ellis@rwest.io>
parents: 438
diff changeset
34
                    collect (deref out i))
c6caddf91c72 zstdd and zstdc
Richard Westhaver <ellis@rwest.io>
parents: 438
diff changeset
35
              'vector))))))
c6caddf91c72 zstdd and zstdc
Richard Westhaver <ellis@rwest.io>
parents: 438
diff changeset
36
 
c6caddf91c72 zstdd and zstdc
Richard Westhaver <ellis@rwest.io>
parents: 438
diff changeset
37
 (defun zstdd (octets &optional (capacity 4096))
c6caddf91c72 zstdd and zstdc
Richard Westhaver <ellis@rwest.io>
parents: 438
diff changeset
38
   (let ((len (length octets)))
c6caddf91c72 zstdd and zstdc
Richard Westhaver <ellis@rwest.io>
parents: 438
diff changeset
39
     (with-alien ((in (* (unsigned 8)) (make-alien (unsigned 8) len)))
c6caddf91c72 zstdd and zstdc
Richard Westhaver <ellis@rwest.io>
parents: 438
diff changeset
40
       (clone-octets-to-alien octets in)
c6caddf91c72 zstdd and zstdc
Richard Westhaver <ellis@rwest.io>
parents: 438
diff changeset
41
       (with-alien ((out (* (unsigned 8)) (make-alien (unsigned 8) capacity)))
c6caddf91c72 zstdd and zstdc
Richard Westhaver <ellis@rwest.io>
parents: 438
diff changeset
42
         (let ((dsize (zstd-decompress out capacity in len)))
c6caddf91c72 zstdd and zstdc
Richard Westhaver <ellis@rwest.io>
parents: 438
diff changeset
43
           (if (= 1 (zstd-iserror dsize))
507
4dd7b6320efc zstd alien errors
Richard Westhaver <ellis@rwest.io>
parents: 481
diff changeset
44
               (zstd-alien-simple-error (zstd-geterrorname dsize))
470
c6caddf91c72 zstdd and zstdc
Richard Westhaver <ellis@rwest.io>
parents: 438
diff changeset
45
               (coerce
c6caddf91c72 zstdd and zstdc
Richard Westhaver <ellis@rwest.io>
parents: 438
diff changeset
46
                (loop for i from 0 below dsize
c6caddf91c72 zstdd and zstdc
Richard Westhaver <ellis@rwest.io>
parents: 438
diff changeset
47
                      collect (deref out i))
c6caddf91c72 zstdd and zstdc
Richard Westhaver <ellis@rwest.io>
parents: 438
diff changeset
48
                'vector)))))))
c6caddf91c72 zstdd and zstdc
Richard Westhaver <ellis@rwest.io>
parents: 438
diff changeset
49
 
c6caddf91c72 zstdd and zstdc
Richard Westhaver <ellis@rwest.io>
parents: 438
diff changeset
50
 ;; (zstdd (zstdc (make-array 4000 :initial-element (random 255) :element-type 'integer) 22))