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)))