blob: ceb6cf1cd2f32e104c02ebc2ed3665bdb2492fea [file] [log] [blame]
/* Copyright 2017 Google Inc. All Rights Reserved.
Distributed under MIT license.
See file LICENSE for detail or copy at
/* (Opaque) Shared Dictionary definition and utilities. */
#include <brotli/port.h>
#include <brotli/types.h>
#if defined(__cplusplus) || defined(c_plusplus)
extern "C" {
* Opaque structure that holds shared dictionary data.
* Allocated and initialized with ::BrotliSharedDictionaryCreateInstance.
* Cleaned up and deallocated with ::BrotliSharedDictionaryDestroyInstance.
typedef struct BrotliSharedDictionaryStruct BrotliSharedDictionary;
* Input data type for ::BrotliSharedDictionaryAttach.
typedef enum BrotliSharedDictionaryType {
/** Raw LZ77 prefix dictionary. */
/** Serialized shared dictionary. */
} BrotliSharedDictionaryType;
* Creates an instance of ::BrotliSharedDictionary.
* Fresh instance has default word dictionary and transforms
* and no LZ77 prefix dictionary.
* @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 ::BrotliSharedDictionary otherwise
BROTLI_COMMON_API BrotliSharedDictionary* BrotliSharedDictionaryCreateInstance(
brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);
* Deinitializes and frees ::BrotliSharedDictionary instance.
* @param dict shared dictionary instance to be cleaned up and deallocated
BROTLI_COMMON_API void BrotliSharedDictionaryDestroyInstance(
BrotliSharedDictionary* dict);
* Attaches dictionary to a given instance of ::BrotliSharedDictionary.
* Dictionary to be attached is represented in a serialized format as a region
* of memory.
* Provided data it partially referenced by a resulting (compound) dictionary,
* and should be kept untouched, while at least one compound dictionary uses it.
* This way memory overhead is kept minimal by the cost of additional resource
* management.
* @param dict dictionary to extend
* @param type type of dictionary to attach
* @param data_size size of @p data
* @param data serialized dictionary of type @p type, with at least @p data_size
* addressable bytes
* @returns ::BROTLI_TRUE if provided dictionary is successfully attached
* @returns ::BROTLI_FALSE otherwise
BROTLI_COMMON_API BROTLI_BOOL BrotliSharedDictionaryAttach(
BrotliSharedDictionary* dict, BrotliSharedDictionaryType type,
size_t data_size, const uint8_t data[BROTLI_ARRAY_PARAM(data_size)]);
#if defined(__cplusplus) || defined(c_plusplus)
} /* extern "C" */