changelog shortlog graph tags branches changeset file revisions annotate raw help

Mercurial > core / lisp/lib/io/flate.lisp

revision 431: c40d2a41d7ce
parent 400: 122554547517
child 435: 849bbe48e32d
     1.1--- a/lisp/lib/io/flate.lisp	Sat Jun 08 01:38:26 2024 -0400
     1.2+++ b/lisp/lib/io/flate.lisp	Sun Jun 09 02:04:18 2024 -0400
     1.3@@ -25,16 +25,64 @@
     1.4 (in-package :io/flate)
     1.5 
     1.6 ;;; Vars
     1.7+(defparameter *compression-buffer-size* 4096)
     1.8+(defparameter *decompression-buffer-size* 4096)
     1.9 
    1.10 ;;; Utils
    1.11 
    1.12+;;; Proto
    1.13+(deferror flate-error () () (:auto t))
    1.14+
    1.15+(deferror compression-error (flate-error) () (:auto t))
    1.16+(deferror decompression-error (flate-error) () (:auto t))
    1.17+
    1.18+(defgeneric finish-compression (self))
    1.19+(defgeneric finish-decompression (self))
    1.20+;; TODO 2024-06-08: maybe move this to generic io/stream protocol - 'RESET'
    1.21+(defgeneric reset-compressor (self))
    1.22+(defgeneric reset-decompressor (self))
    1.23+(defgeneric make-compressing-stream (compressor stream))
    1.24+(defgeneric make-decompressing-stream (decompressor stream))
    1.25+(defgeneric compress-object (self))
    1.26+(defgeneric decompress-object (self))
    1.27+
    1.28+(defgeneric compress (input state output))
    1.29+(defgeneric decompress (input state output))
    1.30+
    1.31+;; decompress
    1.32+
    1.33 ;;; Compression
    1.34 
    1.35-;; (Deflate)
    1.36+;; AKA 'DEFLATE'
    1.37+
    1.38+;; compress-octet
    1.39+;; compress-octet-vector
    1.40+
    1.41+;; finish-compression (finish-output?)
    1.42+;; with-compressor
    1.43+;; reset-compressor
    1.44+
    1.45+;; make-compressing-stream
    1.46+
    1.47+(defclass compressor ()
    1.48+  ((input
    1.49+    :initarg :input
    1.50+    :accessor compressor-input)
    1.51+   (start
    1.52+    :initarg :start
    1.53+    :accessor compressor-start)
    1.54+   (end
    1.55+    :initarg :end
    1.56+    :accessor compressor-end)))
    1.57+
    1.58+(defclass compressing-stream (fundamental-binary-output-stream)
    1.59+  ((compressor
    1.60+    :initarg :compressor
    1.61+    :accessor compressor)))
    1.62 
    1.63 ;;; Decompression
    1.64 
    1.65-;; (Inflate)
    1.66+;; AKA 'INFLATE'
    1.67 
    1.68 ;; From chipz:
    1.69 ;; We provide several convenience functions for decompression:
    1.70@@ -53,3 +101,19 @@
    1.71 ;; of determining what to do with possible state left in the
    1.72 ;; INFLATE-STATE that we used, etc.  Application-specific logic will
    1.73 ;; have to handle those bits.
    1.74+
    1.75+;; make-decompressing-stream
    1.76+;; decompress-octet
    1.77+;; decompress-octet-vector
    1.78+
    1.79+(defclass decompressor () ())
    1.80+
    1.81+(defclass decompressing-stream (fundamental-binary-input-stream)
    1.82+  ((decompressor
    1.83+    :initarg :compressor
    1.84+    :accessor decompressor)))
    1.85+
    1.86+;;; API
    1.87+
    1.88+;; zstd-stream
    1.89+;; zstd-file