aboutsummaryrefslogtreecommitdiff
path: root/core/compress.c
diff options
context:
space:
mode:
authorPaul Oliver <contact@pauloliver.dev>2026-04-16 03:18:10 +0200
committerPaul Oliver <contact@pauloliver.dev>2026-04-16 03:18:10 +0200
commit0f9e16add75e5d5de0463241120cf4584194b7e6 (patch)
treeab8625b7c0194788c6a749a43424cdea6981558b /core/compress.c
parentd36b3f200dbaf19afd3b5e33f6a575961c471b72 (diff)
Makes event array compression multi-threaded
Diffstat (limited to 'core/compress.c')
-rw-r--r--core/compress.c97
1 files changed, 59 insertions, 38 deletions
diff --git a/core/compress.c b/core/compress.c
index df61123..1938bb3 100644
--- a/core/compress.c
+++ b/core/compress.c
@@ -1,56 +1,77 @@
-void salis_deflate(z_stream *strm, size_t size, Bytef *in, Bytef *out) {
- assert(strm);
- assert(size);
- assert(in);
- assert(out);
+#define EVA_SIZE (sizeof(uint64_t) * MVEC_SIZE)
- strm->zalloc = NULL;
- strm->zfree = NULL;
- strm->opaque = NULL;
+struct DeflateParams {
+ z_stream strm;
+ size_t size;
+ Bytef *in;
+ Bytef *out;
+ uint8_t tgap[THREAD_GAP];
+};
- deflateInit(strm, Z_DEFAULT_COMPRESSION);
+struct InflateParams {
+ z_stream strm;
+ size_t avail_in;
+ size_t size;
+ Bytef *in;
+ Bytef *out;
+ uint8_t tgap[THREAD_GAP];
+};
- strm->avail_in = size;
- strm->avail_out = size;
- strm->next_in = in;
- strm->next_out = out;
+int salis_deflate(struct DeflateParams *params) {
+ assert(params);
+ assert(params->size);
+ assert(params->in);
+ assert(params->out);
- deflate(strm, Z_FINISH);
-}
+ params->strm.zalloc = NULL;
+ params->strm.zfree = NULL;
+ params->strm.opaque = NULL;
+
+ deflateInit(&params->strm, Z_DEFAULT_COMPRESSION);
-void salis_deflate_end(z_stream *strm) {
- assert(strm);
+ params->strm.avail_in = params->size;
+ params->strm.avail_out = params->size;
+ params->strm.next_in = params->in;
+ params->strm.next_out = params->out;
- deflateEnd(strm);
+ deflate(&params->strm, Z_FINISH);
+
+ return 0;
}
-void salis_inflate(z_stream *strm, size_t avail_in, size_t size, Bytef *in, Bytef *out) {
- assert(strm);
- assert(avail_in);
- assert(size);
- assert(in);
- assert(out);
+void salis_deflate_end(struct DeflateParams *params) {
+ assert(params);
+ deflateEnd(&params->strm);
+}
- strm->next_in = in;
- strm->avail_in = avail_in;
- strm->zalloc = NULL;
- strm->zfree = NULL;
- strm->opaque = NULL;
+int salis_inflate(struct InflateParams *params) {
+ assert(params);
+ assert(params->avail_in);
+ assert(params->size);
+ assert(params->in);
+ assert(params->out);
- inflateInit(strm);
+ params->strm.next_in = params->in;
+ params->strm.avail_in = params->avail_in;
+ params->strm.zalloc = NULL;
+ params->strm.zfree = NULL;
+ params->strm.opaque = NULL;
- strm->avail_out = size;
- strm->next_out = out;
+ inflateInit(&params->strm);
+
+ params->strm.avail_out = params->size;
+ params->strm.next_out = params->out;
#if defined(NDEBUG)
- inflate(strm, Z_FINISH);
+ inflate(&params->strm, Z_FINISH);
#else
- assert(inflate(strm, Z_FINISH));
+ assert(inflate(&params->strm, Z_FINISH));
#endif
-}
-void salis_inflate_end(z_stream *strm) {
- assert(strm);
+ return 0;
+}
- inflateEnd(strm);
+void salis_inflate_end(struct InflateParams *params) {
+ assert(params);
+ inflateEnd(&params->strm);
}