changelog shortlog graph tags branches changeset file revisions annotate raw help

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

revision 658: 804b5ee20a46
parent 657: 937a6f354047
child 696: 38e9c3be2392
     1.1--- a/lisp/ffi/zstd/dict.lisp	Wed Sep 18 21:48:06 2024 -0400
     1.2+++ b/lisp/ffi/zstd/dict.lisp	Thu Sep 19 23:23:02 2024 -0400
     1.3@@ -4,6 +4,11 @@
     1.4 
     1.5 ;;; Commentary:
     1.6 
     1.7+;; The CDict can be created once and shared across multiple threads since it's
     1.8+;; read-only.
     1.9+
    1.10+;; Unclear if DDict is also read-only.
    1.11+
    1.12 ;; From zdict.h:
    1.13 #|
    1.14  * Zstd dictionary builder
    1.15@@ -261,7 +266,7 @@
    1.16 
    1.17 (define-alien-routine "ZSTD_freeDDict" size-t (ddict (* zstd-ddict)))
    1.18 
    1.19-(define-alien-routine "ZSTD_compress_usingDDict" size-t
    1.20+(define-alien-routine "ZSTD_decompress_usingDDict" size-t
    1.21   (dctx (* zstd-dctx))
    1.22   (dst (* t))
    1.23   (dst-capacity size-t)
    1.24@@ -287,13 +292,26 @@
    1.25 (define-alien-routine "ZSTD_estimatedDictSize" size-t (dict-size size-t) (dict-load-method zstd-dict-load-method))
    1.26 
    1.27 (defmacro with-zstd-cdict ((cv &key buffer size (level (zstd-defaultclevel))) &body body)
    1.28-  (let ((size (or size (length buffer))))
    1.29-    `(with-alien ((,cv (* zstd-cdict) (zstd-createcdict (cast (octets-to-alien ,buffer) (* t)) ,size ,level)))
    1.30-       (unwind-protect (progn ,@body)
    1.31-         (zstd-freecdict ,cv)))))
    1.32+  `(with-alien ((,cv (* zstd-cdict) (zstd-createcdict (cast (octets-to-alien ,buffer) (* t))
    1.33+                                                      (or ,size (length ,buffer))
    1.34+                                                      ,level)))
    1.35+     (unwind-protect (progn ,@body)
    1.36+       (zstd-freecdict ,cv))))
    1.37 
    1.38 (defmacro with-zstd-ddict ((dv &key buffer size) &body body)
    1.39-  (let ((size (or size (length buffer))))
    1.40-    `(with-alien ((,dv (* zstd-ddict) (zstd-createddict (cast (octets-to-alien ,buffer) (* t)) ,size)))
    1.41-       (unwind-protect (progn ,@body)
    1.42-         (zstd-freeddict ,dv)))))
    1.43+  `(with-alien ((,dv (* zstd-ddict)
    1.44+                     (zstd-createddict (cast (octets-to-alien ,buffer) (* t)) (or ,size (length ,buffer)))))
    1.45+     (unwind-protect (progn ,@body)
    1.46+       (zstd-freeddict ,dv))))
    1.47+
    1.48+;;; zdict.h
    1.49+(define-alien-type zstd-cover-params 
    1.50+    (struct zdict-cover-params
    1.51+            (k unsigned)
    1.52+            (d unsigned)
    1.53+            (steps unsigned)
    1.54+            (nb-threads unsigned)
    1.55+            (split-point double)
    1.56+            (shrink-dict unsigned)
    1.57+            (shrink-dict-max-regression unsigned)
    1.58+            (zparams zdict-params)))