1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
// SPDX-License-Identifier: 0BSD
///////////////////////////////////////////////////////////////////////////////
//
/// \file simple_private.h
/// \brief Private definitions for so called simple filters
//
// Author: Lasse Collin
//
///////////////////////////////////////////////////////////////////////////////
#ifndef LZMA_SIMPLE_PRIVATE_H
#define LZMA_SIMPLE_PRIVATE_H
#include "simple_coder.h"
typedef struct {
/// Next filter in the chain
lzma_next_coder next;
/// True if the next coder in the chain has returned LZMA_STREAM_END.
bool end_was_reached;
/// True if filter() should encode the data; false to decode.
/// Currently all simple filters use the same function for encoding
/// and decoding, because the difference between encoders and decoders
/// is very small.
bool is_encoder;
/// Pointer to filter-specific function, which does
/// the actual filtering.
size_t (*filter)(void *simple, uint32_t now_pos,
bool is_encoder, uint8_t *buffer, size_t size);
/// Pointer to filter-specific data, or NULL if filter doesn't need
/// any extra data.
void *simple;
/// The lowest 32 bits of the current position in the data. Most
/// filters need this to do conversions between absolute and relative
/// addresses.
uint32_t now_pos;
/// Size of the memory allocated for the buffer.
size_t allocated;
/// Flushing position in the temporary buffer. buffer[pos] is the
/// next byte to be copied to out[].
size_t pos;
/// buffer[filtered] is the first unfiltered byte. When pos is smaller
/// than filtered, there is unflushed filtered data in the buffer.
size_t filtered;
/// Total number of bytes (both filtered and unfiltered) currently
/// in the temporary buffer.
size_t size;
/// Temporary buffer
uint8_t buffer[];
} lzma_simple_coder;
extern lzma_ret lzma_simple_coder_init(lzma_next_coder *next,
const lzma_allocator *allocator,
const lzma_filter_info *filters,
size_t (*filter)(void *simple, uint32_t now_pos,
bool is_encoder, uint8_t *buffer, size_t size),
size_t simple_size, size_t unfiltered_max,
uint32_t alignment, bool is_encoder);
#endif
|