1///////////////////////////////////////////////////////////////////////////////
2//
3/// \file       filter_common.h
4/// \brief      Filter-specific stuff common for both encoder and decoder
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//
11///////////////////////////////////////////////////////////////////////////////
12
13#ifndef LZMA_FILTER_COMMON_H
14#define LZMA_FILTER_COMMON_H
15
16#include "common.h"
17
18
19/// Both lzma_filter_encoder and lzma_filter_decoder begin with these members.
20typedef struct {
21	/// Filter ID
22	lzma_vli id;
23
24	/// Initializes the filter encoder and calls lzma_next_filter_init()
25	/// for filters + 1.
26	lzma_init_function init;
27
28	/// Calculates memory usage of the encoder. If the options are
29	/// invalid, UINT64_MAX is returned.
30	uint64_t (*memusage)(const void *options);
31
32} lzma_filter_coder;
33
34
35typedef const lzma_filter_coder *(*lzma_filter_find)(lzma_vli id);
36
37
38extern lzma_ret lzma_raw_coder_init(
39		lzma_next_coder *next, const lzma_allocator *allocator,
40		const lzma_filter *filters,
41		lzma_filter_find coder_find, bool is_encoder);
42
43
44extern uint64_t lzma_raw_coder_memusage(lzma_filter_find coder_find,
45		const lzma_filter *filters);
46
47
48#endif
49