?????????? ????????? - ??????????????? - /home/agenciai/public_html/cd38d8/brotli.zip
???????
PK �:�[��� �) �) port.hnu �[��� /* Copyright 2016 Google Inc. All Rights Reserved. Distributed under MIT license. See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ /* Macros for compiler / platform specific API declarations. */ #ifndef BROTLI_COMMON_PORT_H_ #define BROTLI_COMMON_PORT_H_ /* The following macros were borrowed from https://github.com/nemequ/hedley * with permission of original author - Evan Nemerson <evan@nemerson.com> */ /* >>> >>> >>> hedley macros */ #define BROTLI_MAKE_VERSION(major, minor, revision) \ (((major) * 1000000) + ((minor) * 1000) + (revision)) #if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__) #define BROTLI_GNUC_VERSION \ BROTLI_MAKE_VERSION(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) #elif defined(__GNUC__) #define BROTLI_GNUC_VERSION BROTLI_MAKE_VERSION(__GNUC__, __GNUC_MINOR__, 0) #endif #if defined(BROTLI_GNUC_VERSION) #define BROTLI_GNUC_VERSION_CHECK(major, minor, patch) \ (BROTLI_GNUC_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch)) #else #define BROTLI_GNUC_VERSION_CHECK(major, minor, patch) (0) #endif #if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) #define BROTLI_MSVC_VERSION \ BROTLI_MAKE_VERSION((_MSC_FULL_VER / 10000000), \ (_MSC_FULL_VER % 10000000) / 100000, \ (_MSC_FULL_VER % 100000) / 100) #elif defined(_MSC_FULL_VER) #define BROTLI_MSVC_VERSION \ BROTLI_MAKE_VERSION((_MSC_FULL_VER / 1000000), \ (_MSC_FULL_VER % 1000000) / 10000, \ (_MSC_FULL_VER % 10000) / 10) #elif defined(_MSC_VER) #define BROTLI_MSVC_VERSION \ BROTLI_MAKE_VERSION(_MSC_VER / 100, _MSC_VER % 100, 0) #endif #if !defined(_MSC_VER) #define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) (0) #elif defined(_MSC_VER) && (_MSC_VER >= 1400) #define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \ (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch))) #elif defined(_MSC_VER) && (_MSC_VER >= 1200) #define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \ (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch))) #else #define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \ (_MSC_VER >= ((major * 100) + (minor))) #endif #if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) #define BROTLI_INTEL_VERSION \ BROTLI_MAKE_VERSION(__INTEL_COMPILER / 100, \ __INTEL_COMPILER % 100, \ __INTEL_COMPILER_UPDATE) #elif defined(__INTEL_COMPILER) #define BROTLI_INTEL_VERSION \ BROTLI_MAKE_VERSION(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0) #endif #if defined(BROTLI_INTEL_VERSION) #define BROTLI_INTEL_VERSION_CHECK(major, minor, patch) \ (BROTLI_INTEL_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch)) #else #define BROTLI_INTEL_VERSION_CHECK(major, minor, patch) (0) #endif #if defined(__PGI) && \ defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__) #define BROTLI_PGI_VERSION \ BROTLI_MAKE_VERSION(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__) #endif #if defined(BROTLI_PGI_VERSION) #define BROTLI_PGI_VERSION_CHECK(major, minor, patch) \ (BROTLI_PGI_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch)) #else #define BROTLI_PGI_VERSION_CHECK(major, minor, patch) (0) #endif #if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000) #define BROTLI_SUNPRO_VERSION \ BROTLI_MAKE_VERSION( \ (((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), \ (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), \ (__SUNPRO_C & 0xf) * 10) #elif defined(__SUNPRO_C) #define BROTLI_SUNPRO_VERSION \ BROTLI_MAKE_VERSION((__SUNPRO_C >> 8) & 0xf, \ (__SUNPRO_C >> 4) & 0xf, \ (__SUNPRO_C) & 0xf) #elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000) #define BROTLI_SUNPRO_VERSION \ BROTLI_MAKE_VERSION( \ (((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), \ (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), \ (__SUNPRO_CC & 0xf) * 10) #elif defined(__SUNPRO_CC) #define BROTLI_SUNPRO_VERSION \ BROTLI_MAKE_VERSION((__SUNPRO_CC >> 8) & 0xf, \ (__SUNPRO_CC >> 4) & 0xf, \ (__SUNPRO_CC) & 0xf) #endif #if defined(BROTLI_SUNPRO_VERSION) #define BROTLI_SUNPRO_VERSION_CHECK(major, minor, patch) \ (BROTLI_SUNPRO_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch)) #else #define BROTLI_SUNPRO_VERSION_CHECK(major, minor, patch) (0) #endif #if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION) #define BROTLI_ARM_VERSION \ BROTLI_MAKE_VERSION((__ARMCOMPILER_VERSION / 1000000), \ (__ARMCOMPILER_VERSION % 1000000) / 10000, \ (__ARMCOMPILER_VERSION % 10000) / 100) #elif defined(__CC_ARM) && defined(__ARMCC_VERSION) #define BROTLI_ARM_VERSION \ BROTLI_MAKE_VERSION((__ARMCC_VERSION / 1000000), \ (__ARMCC_VERSION % 1000000) / 10000, \ (__ARMCC_VERSION % 10000) / 100) #endif #if defined(BROTLI_ARM_VERSION) #define BROTLI_ARM_VERSION_CHECK(major, minor, patch) \ (BROTLI_ARM_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch)) #else #define BROTLI_ARM_VERSION_CHECK(major, minor, patch) (0) #endif #if defined(__ibmxl__) #define BROTLI_IBM_VERSION \ BROTLI_MAKE_VERSION(__ibmxl_version__, \ __ibmxl_release__, \ __ibmxl_modification__) #elif defined(__xlC__) && defined(__xlC_ver__) #define BROTLI_IBM_VERSION \ BROTLI_MAKE_VERSION(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff) #elif defined(__xlC__) #define BROTLI_IBM_VERSION BROTLI_MAKE_VERSION(__xlC__ >> 8, __xlC__ & 0xff, 0) #endif #if defined(BROTLI_IBM_VERSION) #define BROTLI_IBM_VERSION_CHECK(major, minor, patch) \ (BROTLI_IBM_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch)) #else #define BROTLI_IBM_VERSION_CHECK(major, minor, patch) (0) #endif #if defined(__TI_COMPILER_VERSION__) #define BROTLI_TI_VERSION \ BROTLI_MAKE_VERSION((__TI_COMPILER_VERSION__ / 1000000), \ (__TI_COMPILER_VERSION__ % 1000000) / 1000, \ (__TI_COMPILER_VERSION__ % 1000)) #endif #if defined(BROTLI_TI_VERSION) #define BROTLI_TI_VERSION_CHECK(major, minor, patch) \ (BROTLI_TI_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch)) #else #define BROTLI_TI_VERSION_CHECK(major, minor, patch) (0) #endif #if defined(__IAR_SYSTEMS_ICC__) #if __VER__ > 1000 #define BROTLI_IAR_VERSION \ BROTLI_MAKE_VERSION((__VER__ / 1000000), \ (__VER__ / 1000) % 1000, \ (__VER__ % 1000)) #else #define BROTLI_IAR_VERSION BROTLI_MAKE_VERSION(VER / 100, __VER__ % 100, 0) #endif #endif #if defined(BROTLI_IAR_VERSION) #define BROTLI_IAR_VERSION_CHECK(major, minor, patch) \ (BROTLI_IAR_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch)) #else #define BROTLI_IAR_VERSION_CHECK(major, minor, patch) (0) #endif #if defined(__TINYC__) #define BROTLI_TINYC_VERSION \ BROTLI_MAKE_VERSION(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100) #endif #if defined(BROTLI_TINYC_VERSION) #define BROTLI_TINYC_VERSION_CHECK(major, minor, patch) \ (BROTLI_TINYC_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch)) #else #define BROTLI_TINYC_VERSION_CHECK(major, minor, patch) (0) #endif #if defined(__has_attribute) #define BROTLI_GNUC_HAS_ATTRIBUTE(attribute, major, minor, patch) \ __has_attribute(attribute) #else #define BROTLI_GNUC_HAS_ATTRIBUTE(attribute, major, minor, patch) \ BROTLI_GNUC_VERSION_CHECK(major, minor, patch) #endif #if defined(__has_builtin) #define BROTLI_GNUC_HAS_BUILTIN(builtin, major, minor, patch) \ __has_builtin(builtin) #else #define BROTLI_GNUC_HAS_BUILTIN(builtin, major, minor, patch) \ BROTLI_GNUC_VERSION_CHECK(major, minor, patch) #endif #if defined(__has_feature) #define BROTLI_HAS_FEATURE(feature) __has_feature(feature) #else #define BROTLI_HAS_FEATURE(feature) (0) #endif #if defined(ADDRESS_SANITIZER) || BROTLI_HAS_FEATURE(address_sanitizer) || \ defined(THREAD_SANITIZER) || BROTLI_HAS_FEATURE(thread_sanitizer) || \ defined(MEMORY_SANITIZER) || BROTLI_HAS_FEATURE(memory_sanitizer) #define BROTLI_SANITIZED 1 #else #define BROTLI_SANITIZED 0 #endif #if defined(_WIN32) || defined(__CYGWIN__) #define BROTLI_PUBLIC #elif BROTLI_GNUC_VERSION_CHECK(3, 3, 0) || \ BROTLI_TI_VERSION_CHECK(8, 0, 0) || \ BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \ BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \ BROTLI_IBM_VERSION_CHECK(13, 1, 0) || \ BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \ (BROTLI_TI_VERSION_CHECK(7, 3, 0) && \ defined(__TI_GNU_ATTRIBUTE_SUPPORT__) && defined(__TI_EABI__)) #define BROTLI_PUBLIC __attribute__ ((visibility ("default"))) #else #define BROTLI_PUBLIC #endif #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ !defined(__STDC_NO_VLA__) && !defined(__cplusplus) && \ !defined(__PGI) && !defined(__PGIC__) && !defined(__TINYC__) #define BROTLI_ARRAY_PARAM(name) (name) #else #define BROTLI_ARRAY_PARAM(name) #endif /* <<< <<< <<< end of hedley macros. */ #if defined(BROTLI_SHARED_COMPILATION) #if defined(_WIN32) #if defined(BROTLICOMMON_SHARED_COMPILATION) #define BROTLI_COMMON_API __declspec(dllexport) #else #define BROTLI_COMMON_API __declspec(dllimport) #endif /* BROTLICOMMON_SHARED_COMPILATION */ #if defined(BROTLIDEC_SHARED_COMPILATION) #define BROTLI_DEC_API __declspec(dllexport) #else #define BROTLI_DEC_API __declspec(dllimport) #endif /* BROTLIDEC_SHARED_COMPILATION */ #if defined(BROTLIENC_SHARED_COMPILATION) #define BROTLI_ENC_API __declspec(dllexport) #else #define BROTLI_ENC_API __declspec(dllimport) #endif /* BROTLIENC_SHARED_COMPILATION */ #else /* _WIN32 */ #define BROTLI_COMMON_API BROTLI_PUBLIC #define BROTLI_DEC_API BROTLI_PUBLIC #define BROTLI_ENC_API BROTLI_PUBLIC #endif /* _WIN32 */ #else /* BROTLI_SHARED_COMPILATION */ #define BROTLI_COMMON_API #define BROTLI_DEC_API #define BROTLI_ENC_API #endif #endif /* BROTLI_COMMON_PORT_H_ */ PK �:�[�G,��7 �7 decode.hnu �[��� /* Copyright 2013 Google Inc. All Rights Reserved. Distributed under MIT license. See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ /** * @file * API for Brotli decompression. */ #ifndef BROTLI_DEC_DECODE_H_ #define BROTLI_DEC_DECODE_H_ #include <brotli/port.h> #include <brotli/types.h> #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif /** * Opaque structure that holds decoder state. * * Allocated and initialized with ::BrotliDecoderCreateInstance. * Cleaned up and deallocated with ::BrotliDecoderDestroyInstance. */ typedef struct BrotliDecoderStateStruct BrotliDecoderState; /** * Result type for ::BrotliDecoderDecompress and * ::BrotliDecoderDecompressStream functions. */ typedef enum { /** Decoding error, e.g. corrupted input or memory allocation problem. */ BROTLI_DECODER_RESULT_ERROR = 0, /** Decoding successfully completed. */ BROTLI_DECODER_RESULT_SUCCESS = 1, /** Partially done; should be called again with more input. */ BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT = 2, /** Partially done; should be called again with more output. */ BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT = 3 } BrotliDecoderResult; /** * Template that evaluates items of ::BrotliDecoderErrorCode. * * Example: @code {.cpp} * // Log Brotli error code. * switch (brotliDecoderErrorCode) { * #define CASE_(PREFIX, NAME, CODE) \ * case BROTLI_DECODER ## PREFIX ## NAME: \ * LOG(INFO) << "error code:" << #NAME; \ * break; * #define NEWLINE_ * BROTLI_DECODER_ERROR_CODES_LIST(CASE_, NEWLINE_) * #undef CASE_ * #undef NEWLINE_ * default: LOG(FATAL) << "unknown brotli error code"; * } * @endcode */ #define BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE, SEPARATOR) \ BROTLI_ERROR_CODE(_, NO_ERROR, 0) SEPARATOR \ /* Same as BrotliDecoderResult values */ \ BROTLI_ERROR_CODE(_, SUCCESS, 1) SEPARATOR \ BROTLI_ERROR_CODE(_, NEEDS_MORE_INPUT, 2) SEPARATOR \ BROTLI_ERROR_CODE(_, NEEDS_MORE_OUTPUT, 3) SEPARATOR \ \ /* Errors caused by invalid input */ \ BROTLI_ERROR_CODE(_ERROR_FORMAT_, EXUBERANT_NIBBLE, -1) SEPARATOR \ BROTLI_ERROR_CODE(_ERROR_FORMAT_, RESERVED, -2) SEPARATOR \ BROTLI_ERROR_CODE(_ERROR_FORMAT_, EXUBERANT_META_NIBBLE, -3) SEPARATOR \ BROTLI_ERROR_CODE(_ERROR_FORMAT_, SIMPLE_HUFFMAN_ALPHABET, -4) SEPARATOR \ BROTLI_ERROR_CODE(_ERROR_FORMAT_, SIMPLE_HUFFMAN_SAME, -5) SEPARATOR \ BROTLI_ERROR_CODE(_ERROR_FORMAT_, CL_SPACE, -6) SEPARATOR \ BROTLI_ERROR_CODE(_ERROR_FORMAT_, HUFFMAN_SPACE, -7) SEPARATOR \ BROTLI_ERROR_CODE(_ERROR_FORMAT_, CONTEXT_MAP_REPEAT, -8) SEPARATOR \ BROTLI_ERROR_CODE(_ERROR_FORMAT_, BLOCK_LENGTH_1, -9) SEPARATOR \ BROTLI_ERROR_CODE(_ERROR_FORMAT_, BLOCK_LENGTH_2, -10) SEPARATOR \ BROTLI_ERROR_CODE(_ERROR_FORMAT_, TRANSFORM, -11) SEPARATOR \ BROTLI_ERROR_CODE(_ERROR_FORMAT_, DICTIONARY, -12) SEPARATOR \ BROTLI_ERROR_CODE(_ERROR_FORMAT_, WINDOW_BITS, -13) SEPARATOR \ BROTLI_ERROR_CODE(_ERROR_FORMAT_, PADDING_1, -14) SEPARATOR \ BROTLI_ERROR_CODE(_ERROR_FORMAT_, PADDING_2, -15) SEPARATOR \ BROTLI_ERROR_CODE(_ERROR_FORMAT_, DISTANCE, -16) SEPARATOR \ \ /* -17..-18 codes are reserved */ \ \ BROTLI_ERROR_CODE(_ERROR_, DICTIONARY_NOT_SET, -19) SEPARATOR \ BROTLI_ERROR_CODE(_ERROR_, INVALID_ARGUMENTS, -20) SEPARATOR \ \ /* Memory allocation problems */ \ BROTLI_ERROR_CODE(_ERROR_ALLOC_, CONTEXT_MODES, -21) SEPARATOR \ /* Literal, insert and distance trees together */ \ BROTLI_ERROR_CODE(_ERROR_ALLOC_, TREE_GROUPS, -22) SEPARATOR \ /* -23..-24 codes are reserved for distinct tree groups */ \ BROTLI_ERROR_CODE(_ERROR_ALLOC_, CONTEXT_MAP, -25) SEPARATOR \ BROTLI_ERROR_CODE(_ERROR_ALLOC_, RING_BUFFER_1, -26) SEPARATOR \ BROTLI_ERROR_CODE(_ERROR_ALLOC_, RING_BUFFER_2, -27) SEPARATOR \ /* -28..-29 codes are reserved for dynamic ring-buffer allocation */ \ BROTLI_ERROR_CODE(_ERROR_ALLOC_, BLOCK_TYPE_TREES, -30) SEPARATOR \ \ /* "Impossible" states */ \ BROTLI_ERROR_CODE(_ERROR_, UNREACHABLE, -31) /** * Error code for detailed logging / production debugging. * * See ::BrotliDecoderGetErrorCode and ::BROTLI_LAST_ERROR_CODE. */ typedef enum { #define BROTLI_COMMA_ , #define BROTLI_ERROR_CODE_ENUM_ITEM_(PREFIX, NAME, CODE) \ BROTLI_DECODER ## PREFIX ## NAME = CODE BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE_ENUM_ITEM_, BROTLI_COMMA_) } BrotliDecoderErrorCode; #undef BROTLI_ERROR_CODE_ENUM_ITEM_ #undef BROTLI_COMMA_ /** * The value of the last error code, negative integer. * * All other error code values are in the range from ::BROTLI_LAST_ERROR_CODE * to @c -1. There are also 4 other possible non-error codes @c 0 .. @c 3 in * ::BrotliDecoderErrorCode enumeration. */ #define BROTLI_LAST_ERROR_CODE BROTLI_DECODER_ERROR_UNREACHABLE /** Options to be used with ::BrotliDecoderSetParameter. */ typedef enum BrotliDecoderParameter { /** * Disable "canny" ring buffer allocation strategy. * * Ring buffer is allocated according to window size, despite the real size of * the content. */ BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION = 0, /** * Flag that determines if "Large Window Brotli" is used. */ BROTLI_DECODER_PARAM_LARGE_WINDOW = 1 } BrotliDecoderParameter; /** * Sets the specified parameter to the given decoder instance. * * @param state decoder instance * @param param parameter to set * @param value new parameter value * @returns ::BROTLI_FALSE if parameter is unrecognized, or value is invalid * @returns ::BROTLI_TRUE if value is accepted */ BROTLI_DEC_API BROTLI_BOOL BrotliDecoderSetParameter( BrotliDecoderState* state, BrotliDecoderParameter param, uint32_t value); /** * Creates an instance of ::BrotliDecoderState and initializes it. * * The instance can be used once for decoding and should then be destroyed with * ::BrotliDecoderDestroyInstance, it cannot be reused for a new decoding * session. * * @p alloc_func and @p free_func @b MUST be both zero or both non-zero. In the * case they are both zero, default memory allocators are used. @p opaque is * passed to @p alloc_func and @p free_func when they are called. @p free_func * has to return without doing anything when asked to free a NULL pointer. * * @param alloc_func custom memory allocation function * @param free_func custom memory free function * @param opaque custom memory manager handle * @returns @c 0 if instance can not be allocated or initialized * @returns pointer to initialized ::BrotliDecoderState otherwise */ BROTLI_DEC_API BrotliDecoderState* BrotliDecoderCreateInstance( brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque); /** * Deinitializes and frees ::BrotliDecoderState instance. * * @param state decoder instance to be cleaned up and deallocated */ BROTLI_DEC_API void BrotliDecoderDestroyInstance(BrotliDecoderState* state); /** * Performs one-shot memory-to-memory decompression. * * Decompresses the data in @p encoded_buffer into @p decoded_buffer, and sets * @p *decoded_size to the decompressed length. * * @param encoded_size size of @p encoded_buffer * @param encoded_buffer compressed data buffer with at least @p encoded_size * addressable bytes * @param[in, out] decoded_size @b in: size of @p decoded_buffer; \n * @b out: length of decompressed data written to * @p decoded_buffer * @param decoded_buffer decompressed data destination buffer * @returns ::BROTLI_DECODER_RESULT_ERROR if input is corrupted, memory * allocation failed, or @p decoded_buffer is not large enough; * @returns ::BROTLI_DECODER_RESULT_SUCCESS otherwise */ BROTLI_DEC_API BrotliDecoderResult BrotliDecoderDecompress( size_t encoded_size, const uint8_t encoded_buffer[BROTLI_ARRAY_PARAM(encoded_size)], size_t* decoded_size, uint8_t decoded_buffer[BROTLI_ARRAY_PARAM(*decoded_size)]); /** * Decompresses the input stream to the output stream. * * The values @p *available_in and @p *available_out must specify the number of * bytes addressable at @p *next_in and @p *next_out respectively. * When @p *available_out is @c 0, @p next_out is allowed to be @c NULL. * * After each call, @p *available_in will be decremented by the amount of input * bytes consumed, and the @p *next_in pointer will be incremented by that * amount. Similarly, @p *available_out will be decremented by the amount of * output bytes written, and the @p *next_out pointer will be incremented by * that amount. * * @p total_out, if it is not a null-pointer, will be set to the number * of bytes decompressed since the last @p state initialization. * * @note Input is never overconsumed, so @p next_in and @p available_in could be * passed to the next consumer after decoding is complete. * * @param state decoder instance * @param[in, out] available_in @b in: amount of available input; \n * @b out: amount of unused input * @param[in, out] next_in pointer to the next compressed byte * @param[in, out] available_out @b in: length of output buffer; \n * @b out: remaining size of output buffer * @param[in, out] next_out output buffer cursor; * can be @c NULL if @p available_out is @c 0 * @param[out] total_out number of bytes decompressed so far; can be @c NULL * @returns ::BROTLI_DECODER_RESULT_ERROR if input is corrupted, memory * allocation failed, arguments were invalid, etc.; * use ::BrotliDecoderGetErrorCode to get detailed error code * @returns ::BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT decoding is blocked until * more input data is provided * @returns ::BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT decoding is blocked until * more output space is provided * @returns ::BROTLI_DECODER_RESULT_SUCCESS decoding is finished, no more * input might be consumed and no more output will be produced */ BROTLI_DEC_API BrotliDecoderResult BrotliDecoderDecompressStream( BrotliDecoderState* state, size_t* available_in, const uint8_t** next_in, size_t* available_out, uint8_t** next_out, size_t* total_out); /** * Checks if decoder has more output. * * @param state decoder instance * @returns ::BROTLI_TRUE, if decoder has some unconsumed output * @returns ::BROTLI_FALSE otherwise */ BROTLI_DEC_API BROTLI_BOOL BrotliDecoderHasMoreOutput( const BrotliDecoderState* state); /** * Acquires pointer to internal output buffer. * * This method is used to make language bindings easier and more efficient: * -# push data to ::BrotliDecoderDecompressStream, * until ::BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT is reported * -# use ::BrotliDecoderTakeOutput to peek bytes and copy to language-specific * entity * * Also this could be useful if there is an output stream that is able to * consume all the provided data (e.g. when data is saved to file system). * * @attention After every call to ::BrotliDecoderTakeOutput @p *size bytes of * output are considered consumed for all consecutive calls to the * instance methods; returned pointer becomes invalidated as well. * * @note Decoder output is not guaranteed to be contiguous. This means that * after the size-unrestricted call to ::BrotliDecoderTakeOutput, * immediate next call to ::BrotliDecoderTakeOutput may return more data. * * @param state decoder instance * @param[in, out] size @b in: number of bytes caller is ready to take, @c 0 if * any amount could be handled; \n * @b out: amount of data pointed by returned pointer and * considered consumed; \n * out value is never greater than in value, unless it is @c 0 * @returns pointer to output data */ BROTLI_DEC_API const uint8_t* BrotliDecoderTakeOutput( BrotliDecoderState* state, size_t* size); /** * Checks if instance has already consumed input. * * Instance that returns ::BROTLI_FALSE is considered "fresh" and could be * reused. * * @param state decoder instance * @returns ::BROTLI_TRUE if decoder has already used some input bytes * @returns ::BROTLI_FALSE otherwise */ BROTLI_DEC_API BROTLI_BOOL BrotliDecoderIsUsed(const BrotliDecoderState* state); /** * Checks if decoder instance reached the final state. * * @param state decoder instance * @returns ::BROTLI_TRUE if decoder is in a state where it reached the end of * the input and produced all of the output * @returns ::BROTLI_FALSE otherwise */ BROTLI_DEC_API BROTLI_BOOL BrotliDecoderIsFinished( const BrotliDecoderState* state); /** * Acquires a detailed error code. * * Should be used only after ::BrotliDecoderDecompressStream returns * ::BROTLI_DECODER_RESULT_ERROR. * * See also ::BrotliDecoderErrorString * * @param state decoder instance * @returns last saved error code */ BROTLI_DEC_API BrotliDecoderErrorCode BrotliDecoderGetErrorCode( const BrotliDecoderState* state); /** * Converts error code to a c-string. */ BROTLI_DEC_API const char* BrotliDecoderErrorString(BrotliDecoderErrorCode c); /** * Gets a decoder library version. * * Look at BROTLI_VERSION for more information. */ BROTLI_DEC_API uint32_t BrotliDecoderVersion(void); #if defined(__cplusplus) || defined(c_plusplus) } /* extern "C" */ #endif #endif /* BROTLI_DEC_DECODE_H_ */ PK �:�[$��X�C �C encode.hnu �[��� /* Copyright 2013 Google Inc. All Rights Reserved. Distributed under MIT license. See file LICENSE for detail or copy at https://opensource.org/licenses/MIT */ /** * @file * API for Brotli compression. */ #ifndef BROTLI_ENC_ENCODE_H_ #define BROTLI_ENC_ENCODE_H_ #include <brotli/port.h> #include <brotli/types.h> #if defined(__cplusplus) || defined(c_plusplus) extern "C" { #endif /** Minimal value for ::BROTLI_PARAM_LGWIN parameter. */ #define BROTLI_MIN_WINDOW_BITS 10 /** * Maximal value for ::BROTLI_PARAM_LGWIN parameter. * * @note equal to @c BROTLI_MAX_DISTANCE_BITS constant. */ #define BROTLI_MAX_WINDOW_BITS 24 /** * Maximal value for ::BROTLI_PARAM_LGWIN parameter * in "Large Window Brotli" (32-bit). */ #define BROTLI_LARGE_MAX_WINDOW_BITS 30 /** Minimal value for ::BROTLI_PARAM_LGBLOCK parameter. */ #define BROTLI_MIN_INPUT_BLOCK_BITS 16 /** Maximal value for ::BROTLI_PARAM_LGBLOCK parameter. */ #define BROTLI_MAX_INPUT_BLOCK_BITS 24 /** Minimal value for ::BROTLI_PARAM_QUALITY parameter. */ #define BROTLI_MIN_QUALITY 0 /** Maximal value for ::BROTLI_PARAM_QUALITY parameter. */ #define BROTLI_MAX_QUALITY 11 /** Options for ::BROTLI_PARAM_MODE parameter. */ typedef enum BrotliEncoderMode { /** * Default compression mode. * * In this mode compressor does not know anything in advance about the * properties of the input. */ BROTLI_MODE_GENERIC = 0, /** Compression mode for UTF-8 formatted text input. */ BROTLI_MODE_TEXT = 1, /** Compression mode used in WOFF 2.0. */ BROTLI_MODE_FONT = 2 } BrotliEncoderMode; /** Default value for ::BROTLI_PARAM_QUALITY parameter. */ #define BROTLI_DEFAULT_QUALITY 11 /** Default value for ::BROTLI_PARAM_LGWIN parameter. */ #define BROTLI_DEFAULT_WINDOW 22 /** Default value for ::BROTLI_PARAM_MODE parameter. */ #define BROTLI_DEFAULT_MODE BROTLI_MODE_GENERIC /** Operations that can be performed by streaming encoder. */ typedef enum BrotliEncoderOperation { /** * Process input. * * Encoder may postpone producing output, until it has processed enough input. */ BROTLI_OPERATION_PROCESS = 0, /** * Produce output for all processed input. * * Actual flush is performed when input stream is depleted and there is enough * space in output stream. This means that client should repeat * ::BROTLI_OPERATION_FLUSH operation until @p available_in becomes @c 0, and * ::BrotliEncoderHasMoreOutput returns ::BROTLI_FALSE. If output is acquired * via ::BrotliEncoderTakeOutput, then operation should be repeated after * output buffer is drained. * * @warning Until flush is complete, client @b SHOULD @b NOT swap, * reduce or extend input stream. * * When flush is complete, output data will be sufficient for decoder to * reproduce all the given input. */ BROTLI_OPERATION_FLUSH = 1, /** * Finalize the stream. * * Actual finalization is performed when input stream is depleted and there is * enough space in output stream. This means that client should repeat * ::BROTLI_OPERATION_FINISH operation until @p available_in becomes @c 0, and * ::BrotliEncoderHasMoreOutput returns ::BROTLI_FALSE. If output is acquired * via ::BrotliEncoderTakeOutput, then operation should be repeated after * output buffer is drained. * * @warning Until finalization is complete, client @b SHOULD @b NOT swap, * reduce or extend input stream. * * Helper function ::BrotliEncoderIsFinished checks if stream is finalized and * output fully dumped. * * Adding more input data to finalized stream is impossible. */ BROTLI_OPERATION_FINISH = 2, /** * Emit metadata block to stream. * * Metadata is opaque to Brotli: neither encoder, nor decoder processes this * data or relies on it. It may be used to pass some extra information from * encoder client to decoder client without interfering with main data stream. * * @note Encoder may emit empty metadata blocks internally, to pad encoded * stream to byte boundary. * * @warning Until emitting metadata is complete client @b SHOULD @b NOT swap, * reduce or extend input stream. * * @warning The whole content of input buffer is considered to be the content * of metadata block. Do @b NOT @e append metadata to input stream, * before it is depleted with other operations. * * Stream is soft-flushed before metadata block is emitted. Metadata block * @b MUST be no longer than than 16MiB. */ BROTLI_OPERATION_EMIT_METADATA = 3 } BrotliEncoderOperation; /** Options to be used with ::BrotliEncoderSetParameter. */ typedef enum BrotliEncoderParameter { /** * Tune encoder for specific input. * * ::BrotliEncoderMode enumerates all available values. */ BROTLI_PARAM_MODE = 0, /** * The main compression speed-density lever. * * The higher the quality, the slower the compression. Range is * from ::BROTLI_MIN_QUALITY to ::BROTLI_MAX_QUALITY. */ BROTLI_PARAM_QUALITY = 1, /** * Recommended sliding LZ77 window size. * * Encoder may reduce this value, e.g. if input is much smaller than * window size. * * Window size is `(1 << value) - 16`. * * Range is from ::BROTLI_MIN_WINDOW_BITS to ::BROTLI_MAX_WINDOW_BITS. */ BROTLI_PARAM_LGWIN = 2, /** * Recommended input block size. * * Encoder may reduce this value, e.g. if input is much smaller than input * block size. * * Range is from ::BROTLI_MIN_INPUT_BLOCK_BITS to * ::BROTLI_MAX_INPUT_BLOCK_BITS. * * @note Bigger input block size allows better compression, but consumes more * memory. \n The rough formula of memory used for temporary input * storage is `3 << lgBlock`. */ BROTLI_PARAM_LGBLOCK = 3, /** * Flag that affects usage of "literal context modeling" format feature. * * This flag is a "decoding-speed vs compression ratio" trade-off. */ BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING = 4, /** * Estimated total input size for all ::BrotliEncoderCompressStream calls. * * The default value is 0, which means that the total input size is unknown. */ BROTLI_PARAM_SIZE_HINT = 5, /** * Flag that determines if "Large Window Brotli" is used. */ BROTLI_PARAM_LARGE_WINDOW = 6, /** * Recommended number of postfix bits (NPOSTFIX). * * Encoder may change this value. * * Range is from 0 to ::BROTLI_MAX_NPOSTFIX. */ BROTLI_PARAM_NPOSTFIX = 7, /** * Recommended number of direct distance codes (NDIRECT). * * Encoder may change this value. * * Range is from 0 to (15 << NPOSTFIX) in steps of (1 << NPOSTFIX). */ BROTLI_PARAM_NDIRECT = 8, /** * Number of bytes of input stream already processed by a different instance. * * @note It is important to configure all the encoder instances with same * parameters (except this one) in order to allow all the encoded parts * obey the same restrictions implied by header. * * If offset is not 0, then stream header is omitted. * In any case output start is byte aligned, so for proper streams stitching * "predecessor" stream must be flushed. * * Range is not artificially limited, but all the values greater or equal to * maximal window size have the same effect. Values greater than 2**30 are not * allowed. */ BROTLI_PARAM_STREAM_OFFSET = 9 } BrotliEncoderParameter; /** * Opaque structure that holds encoder state. * * Allocated and initializ
| ver. 1.6 |
Github
|
.
| PHP 8.2.30 | ??????????? ?????????: 0 |
proxy
|
phpinfo
|
???????????