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
2//
5//
6// Author: Lasse Collin
7//
8// This file has been put into the public domain.
9// You can do whatever you want with this file.
10//
12
13#include "common.h"
14
15
69
70
71typedef struct {
77
79 size_t read_pos;
80
86
88 uint64_t mem_allocated;
89
92 uint64_t mem_in_use;
93
96 uint32_t bufs_in_use;
97
100
102 uint32_t bufs_limit;
103} lzma_outq;
104
105
111extern uint64_t lzma_outq_memusage(uint64_t buf_size_max, uint32_t threads);
112
113
134 const lzma_allocator *allocator, uint32_t threads);
135
136
138extern void lzma_outq_end(lzma_outq *outq, const lzma_allocator *allocator);
139
140
142extern void lzma_outq_clear_cache(
143 lzma_outq *outq, const lzma_allocator *allocator);
144
145
151extern void lzma_outq_clear_cache2(
152 lzma_outq *outq, const lzma_allocator *allocator,
153 size_t keep_size);
154
155
167 lzma_outq *outq, const lzma_allocator *allocator, size_t size);
168
169
175extern lzma_outbuf *lzma_outq_get_buf(lzma_outq *outq, void *worker);
176
177
183extern bool lzma_outq_is_readable(const lzma_outq *outq);
184
185
206extern lzma_ret lzma_outq_read(lzma_outq *restrict outq,
207 const lzma_allocator *restrict allocator,
208 uint8_t *restrict out, size_t *restrict out_pos,
209 size_t out_size, lzma_vli *restrict unpadded_size,
210 lzma_vli *restrict uncompressed_size);
211
212
223 void (*enable_partial_output)(void *worker));
224
225
230static inline bool
231lzma_outq_has_buf(const lzma_outq *outq)
232{
233 return outq->bufs_in_use < outq->bufs_limit;
234}
235
236
238static inline bool
239lzma_outq_is_empty(const lzma_outq *outq)
240{
241 return outq->bufs_in_use == 0;
242}
243
244
249static inline uint64_t
250lzma_outq_outbuf_memusage(size_t buf_size)
251{
252 assert(buf_size <= SIZE_MAX - sizeof(lzma_outbuf));
253 return sizeof(lzma_outbuf) + buf_size;
254}
#define assert(condition)
Definition lz4.c:273
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
size_t read_pos
Number of bytes read from head->buf[] in lzma_outq_read()
Definition outqueue.h:79
lzma_outbuf * head
Definition outqueue.h:75
lzma_outbuf * cache
Definition outqueue.h:85
uint32_t bufs_limit
Maximum allowed number of allocated buffers.
Definition outqueue.h:102
uint32_t bufs_in_use
Definition outqueue.h:96
uint32_t bufs_allocated
Number of buffers allocated (in use + cached)
Definition outqueue.h:99
lzma_outbuf * tail
Definition outqueue.h:76
uint64_t mem_in_use
Definition outqueue.h:92
uint64_t mem_allocated
Total amount of memory allocated for buffers.
Definition outqueue.h:88
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