1 /* 2 * Copyright (c) 2016-present, 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 */ 9 10 /******* EXPOSED TYPES ********************************************************/ 11 /* 12 * Contains the parsed contents of a dictionary 13 * This includes Huffman and FSE tables used for decoding and data on offsets 14 */ 15 typedef struct dictionary_s dictionary_t; 16 /******* END EXPOSED TYPES ****************************************************/ 17 18 /******* DECOMPRESSION FUNCTIONS **********************************************/ 19 /// Zstandard decompression functions. 20 /// `dst` must point to a space at least as large as the reconstructed output. 21 size_t ZSTD_decompress(void *const dst, const size_t dst_len, 22 const void *const src, const size_t src_len); 23 24 /// If `dict != NULL` and `dict_len >= 8`, does the same thing as 25 /// `ZSTD_decompress` but uses the provided dict 26 size_t ZSTD_decompress_with_dict(void *const dst, const size_t dst_len, 27 const void *const src, const size_t src_len, 28 dictionary_t* parsed_dict); 29 30 /// Get the decompressed size of an input stream so memory can be allocated in 31 /// advance 32 /// Returns -1 if the size can't be determined 33 /// Assumes decompression of a single frame 34 size_t ZSTD_get_decompressed_size(const void *const src, const size_t src_len); 35 /******* END DECOMPRESSION FUNCTIONS ******************************************/ 36 37 /******* DICTIONARY MANAGEMENT ***********************************************/ 38 /* 39 * Return a valid dictionary_t pointer for use with dictionary initialization 40 * or decompression 41 */ 42 dictionary_t* create_dictionary(); 43 44 /* 45 * Parse a provided dictionary blob for use in decompression 46 * `src` -- must point to memory space representing the dictionary 47 * `src_len` -- must provide the dictionary size 48 * `dict` -- will contain the parsed contents of the dictionary and 49 * can be used for decompression 50 */ 51 void parse_dictionary(dictionary_t *const dict, const void *src, 52 size_t src_len); 53 54 /* 55 * Free internal Huffman tables, FSE tables, and dictionary content 56 */ 57 void free_dictionary(dictionary_t *const dict); 58 /******* END DICTIONARY MANAGEMENT *******************************************/ 59