git subrepo pull --force deps/lightrec
[pcsx_rearmed.git] / deps / libretro-common / include / libchdr / lzma.h
1 /* license:BSD-3-Clause
2  * copyright-holders:Aaron Giles
3  ***************************************************************************
4
5     lzma.h
6
7     LZMA compression wrappers
8
9 ***************************************************************************/
10
11 #pragma once
12
13 #ifndef __LIBCHDR_LZMA_H__
14 #define __LIBCHDR_LZMA_H__
15
16 #include <stdint.h>
17
18 #include <LzmaEnc.h>
19 #include <LzmaDec.h>
20
21 #include <libchdr/libchdr_zlib.h>
22
23 /* codec-private data for the LZMA codec */
24 #define MAX_LZMA_ALLOCS 64
25
26 typedef struct _lzma_allocator lzma_allocator;
27 struct _lzma_allocator
28 {
29         void *(*Alloc)(void *p, size_t size);
30         void (*Free)(void *p, void *address); /* address can be 0 */
31         void (*FreeSz)(void *p, void *address, size_t size); /* address can be 0 */
32         uint32_t*       allocptr[MAX_LZMA_ALLOCS];
33         uint32_t*       allocptr2[MAX_LZMA_ALLOCS];
34 };
35
36 typedef struct _lzma_codec_data lzma_codec_data;
37 struct _lzma_codec_data
38 {
39         CLzmaDec                decoder;
40         lzma_allocator  allocator;
41 };
42
43 /* codec-private data for the CDLZ codec */
44 typedef struct _cdlz_codec_data cdlz_codec_data;
45 struct _cdlz_codec_data {
46         /* internal state */
47         lzma_codec_data         base_decompressor;
48 #ifdef WANT_SUBCODE
49         zlib_codec_data         subcode_decompressor;
50 #endif
51         uint8_t*                        buffer;
52 };
53
54 chd_error lzma_codec_init(void* codec, uint32_t hunkbytes);
55
56 void lzma_codec_free(void* codec);
57
58 /*-------------------------------------------------
59  *  decompress - decompress data using the LZMA
60  *  codec
61  *-------------------------------------------------
62  */
63
64 chd_error lzma_codec_decompress(void* codec, const uint8_t *src,
65       uint32_t complen, uint8_t *dest, uint32_t destlen);
66
67 chd_error cdlz_codec_init(void* codec, uint32_t hunkbytes);
68
69 void cdlz_codec_free(void* codec);
70
71 chd_error cdlz_codec_decompress(void *codec, const uint8_t *src, uint32_t complen, uint8_t *dest, uint32_t destlen);
72
73 #endif /* __LIBCHDR_LZMA_H__ */