xref: /freebsd/sys/contrib/zstd/doc/educational_decoder/zstd_decompress.h (revision 924226fba12cc9a228c73b956e1b7fa24c60b055)
1 /*
2  * Copyright (c) 2016-2020, Facebook, Inc.
3  * All rights reserved.
4  *
5  * This source code is licensed under both the BSD-style license (found in the
6  * LICENSE file in the root directory of this source tree) and the GPLv2 (found
7  * in the COPYING file in the root directory of this source tree).
8  * You may select, at your option, one of the above-listed licenses.
9  */
10 
11 #include <stddef.h>   /* size_t */
12 
13 /******* EXPOSED TYPES ********************************************************/
14 /*
15 * Contains the parsed contents of a dictionary
16 * This includes Huffman and FSE tables used for decoding and data on offsets
17 */
18 typedef struct dictionary_s dictionary_t;
19 /******* END EXPOSED TYPES ****************************************************/
20 
21 /******* DECOMPRESSION FUNCTIONS **********************************************/
22 /// Zstandard decompression functions.
23 /// `dst` must point to a space at least as large as the reconstructed output.
24 size_t ZSTD_decompress(void *const dst, const size_t dst_len,
25                     const void *const src, const size_t src_len);
26 
27 /// If `dict != NULL` and `dict_len >= 8`, does the same thing as
28 /// `ZSTD_decompress` but uses the provided dict
29 size_t ZSTD_decompress_with_dict(void *const dst, const size_t dst_len,
30                               const void *const src, const size_t src_len,
31                               dictionary_t* parsed_dict);
32 
33 /// Get the decompressed size of an input stream so memory can be allocated in
34 /// advance
35 /// Returns -1 if the size can't be determined
36 /// Assumes decompression of a single frame
37 size_t ZSTD_get_decompressed_size(const void *const src, const size_t src_len);
38 /******* END DECOMPRESSION FUNCTIONS ******************************************/
39 
40 /******* DICTIONARY MANAGEMENT ***********************************************/
41 /*
42  * Return a valid dictionary_t pointer for use with dictionary initialization
43  * or decompression
44  */
45 dictionary_t* create_dictionary(void);
46 
47 /*
48  * Parse a provided dictionary blob for use in decompression
49  * `src` -- must point to memory space representing the dictionary
50  * `src_len` -- must provide the dictionary size
51  * `dict` -- will contain the parsed contents of the dictionary and
52  *        can be used for decompression
53  */
54 void parse_dictionary(dictionary_t *const dict, const void *src,
55                              size_t src_len);
56 
57 /*
58  * Free internal Huffman tables, FSE tables, and dictionary content
59  */
60 void free_dictionary(dictionary_t *const dict);
61 /******* END DICTIONARY MANAGEMENT *******************************************/
62