Parolin 0.7.9 6796
Console (soon DLLs) to do a tar like job
Loading...
Searching...
No Matches
outqueue.h
Go to the documentation of this file.
1// SPDX-License-Identifier: 0BSD
2
4//
7//
8// Author: Lasse Collin
9//
11
12#ifndef LZMA_OUTQUEUE_H
13#define LZMA_OUTQUEUE_H
14
15#include "common.h"
16
17
19typedef struct lzma_outbuf_s lzma_outbuf;
20struct lzma_outbuf_s {
24
28 void *worker;
29
32 size_t allocated;
33
39 size_t pos;
40
48 size_t decoder_in_pos;
49
54 bool finished;
55
62
67
69 uint8_t buf[];
70};
71
72
73typedef struct {
78 lzma_outbuf *tail;
79
81 size_t read_pos;
82
87 lzma_outbuf *cache;
88
90 uint64_t mem_allocated;
91
94 uint64_t mem_in_use;
95
98 uint32_t bufs_in_use;
99
101 uint32_t bufs_allocated;
102
104 uint32_t bufs_limit;
105} lzma_outq;
106
107
113extern uint64_t lzma_outq_memusage(uint64_t buf_size_max, uint32_t threads);
114
115
136 const lzma_allocator *allocator, uint32_t threads);
137
138
140extern void lzma_outq_end(lzma_outq *outq, const lzma_allocator *allocator);
141
142
144extern void lzma_outq_clear_cache(
145 lzma_outq *outq, const lzma_allocator *allocator);
146
147
153extern void lzma_outq_clear_cache2(
154 lzma_outq *outq, const lzma_allocator *allocator,
155 size_t keep_size);
156
157
169 lzma_outq *outq, const lzma_allocator *allocator, size_t size);
170
171
177extern lzma_outbuf *lzma_outq_get_buf(lzma_outq *outq, void *worker);
178
179
185extern bool lzma_outq_is_readable(const lzma_outq *outq);
186
187
208extern lzma_ret lzma_outq_read(lzma_outq *restrict outq,
209 const lzma_allocator *restrict allocator,
210 uint8_t *restrict out, size_t *restrict out_pos,
211 size_t out_size, lzma_vli *restrict unpadded_size,
212 lzma_vli *restrict uncompressed_size);
213
214
225 void (*enable_partial_output)(void *worker));
226
227
232static inline bool
233lzma_outq_has_buf(const lzma_outq *outq)
234{
235 return outq->bufs_in_use < outq->bufs_limit;
236}
237
238
240static inline bool
241lzma_outq_is_empty(const lzma_outq *outq)
242{
243 return outq->bufs_in_use == 0;
244}
245
246
251static inline uint64_t
252lzma_outq_outbuf_memusage(size_t buf_size)
253{
254 assert(buf_size <= SIZE_MAX - sizeof(lzma_outbuf));
255 return sizeof(lzma_outbuf) + buf_size;
256}
257
258#endif
#define assert(condition)
Definition lz4.c:273
str head
Definition test-lz4-abi.py:25
Custom functions for memory handling.
Definition base.h:372
Definition outqueue.h:18
lzma_vli uncompressed_size
Definition outqueue.h:64
void * worker
Definition outqueue.h:26
lzma_vli unpadded_size
Definition outqueue.h:63
size_t pos
Definition outqueue.h:37
lzma_outbuf * next
Definition outqueue.h:21
lzma_ret finish_ret
Definition outqueue.h:59
bool finished
Definition outqueue.h:52
size_t decoder_in_pos
Definition outqueue.h:46
size_t allocated
Definition outqueue.h:30
uint8_t buf[]
Buffer of "allocated" bytes.
Definition outqueue.h:67
Definition outqueue.h:71
uint32_t bufs_limit
Maximum allowed number of allocated buffers.
Definition outqueue.h:102
uint32_t bufs_in_use
Definition outqueue.h:96
size_t size
Definition platform.h:559
Definitions common to the whole liblzma library.
lzma_ret
Return values used by several functions in liblzma.
Definition base.h:57
const lzma_allocator const uint8_t size_t uint8_t size_t * out_pos
Definition block.h:528
const lzma_allocator * allocator
Definition block.h:377
const lzma_allocator lzma_vli unpadded_size
Definition index.h:345
uint64_t lzma_vli
Variable-length integer type.
Definition vli.h:63
void lzma_outq_end(lzma_outq *outq, const lzma_allocator *allocator)
Free the memory associated with the output queue.
Definition outqueue.c:138
bool lzma_outq_is_readable(const lzma_outq *outq)
Test if there is data ready to be read.
Definition outqueue.c:221
void lzma_outq_enable_partial_output(lzma_outq *outq, void(*enable_partial_output)(void *worker))
Enable partial output from a worker thread.
Definition outqueue.c:275
void lzma_outq_clear_cache2(lzma_outq *outq, const lzma_allocator *allocator, size_t keep_size)
Like lzma_outq_clear_cache() but might keep one buffer.
Definition outqueue.c:94
struct lzma_outbuf_s lzma_outbuf
Output buffer for a single thread.
Definition outqueue.h:17
void lzma_outq_clear_cache(lzma_outq *outq, const lzma_allocator *allocator)
Free all cached buffers that consume memory but aren't in use.
Definition outqueue.c:84
uint64_t lzma_outq_memusage(uint64_t buf_size_max, uint32_t threads)
Calculate the memory usage of an output queue.
Definition outqueue.c:24
lzma_ret lzma_outq_init(lzma_outq *outq, const lzma_allocator *allocator, uint32_t threads)
Initialize an output queue.
Definition outqueue.c:113
lzma_outbuf * lzma_outq_get_buf(lzma_outq *outq, void *worker)
Get a new buffer.
Definition outqueue.c:183
lzma_ret lzma_outq_read(lzma_outq *restrict outq, const lzma_allocator *restrict allocator, uint8_t *restrict out, size_t *restrict out_pos, size_t out_size, lzma_vli *restrict unpadded_size, lzma_vli *restrict uncompressed_size)
Read finished data.
Definition outqueue.c:231
lzma_ret lzma_outq_prealloc_buf(lzma_outq *outq, const lzma_allocator *allocator, size_t size)
Preallocate a new buffer into cache.
Definition outqueue.c:149
uint64_t uncompressed_size
Definition list.c:209