126fa459cSmrg/* Copyright 2013 Google Inc. All Rights Reserved. 226fa459cSmrg 326fa459cSmrg Distributed under MIT license. 426fa459cSmrg See file LICENSE for detail or copy at https://opensource.org/licenses/MIT 526fa459cSmrg*/ 626fa459cSmrg 726fa459cSmrg/* Block split point selection utilities. */ 826fa459cSmrg 926fa459cSmrg#ifndef BROTLI_ENC_BLOCK_SPLITTER_H_ 1026fa459cSmrg#define BROTLI_ENC_BLOCK_SPLITTER_H_ 1126fa459cSmrg 1226fa459cSmrg#include "../common/platform.h" 1326fa459cSmrg#include <brotli/types.h> 1426fa459cSmrg#include "./command.h" 1526fa459cSmrg#include "./memory.h" 1626fa459cSmrg#include "./quality.h" 1726fa459cSmrg 1826fa459cSmrg#if defined(__cplusplus) || defined(c_plusplus) 1926fa459cSmrgextern "C" { 2026fa459cSmrg#endif 2126fa459cSmrg 2226fa459cSmrgtypedef struct BlockSplit { 2326fa459cSmrg size_t num_types; /* Amount of distinct types */ 2426fa459cSmrg size_t num_blocks; /* Amount of values in types and length */ 2526fa459cSmrg uint8_t* types; 2626fa459cSmrg uint32_t* lengths; 2726fa459cSmrg 2826fa459cSmrg size_t types_alloc_size; 2926fa459cSmrg size_t lengths_alloc_size; 3026fa459cSmrg} BlockSplit; 3126fa459cSmrg 3226fa459cSmrgBROTLI_INTERNAL void BrotliInitBlockSplit(BlockSplit* self); 3326fa459cSmrgBROTLI_INTERNAL void BrotliDestroyBlockSplit(MemoryManager* m, 3426fa459cSmrg BlockSplit* self); 3526fa459cSmrg 3626fa459cSmrgBROTLI_INTERNAL void BrotliSplitBlock(MemoryManager* m, 3726fa459cSmrg const Command* cmds, 3826fa459cSmrg const size_t num_commands, 3926fa459cSmrg const uint8_t* data, 4026fa459cSmrg const size_t offset, 4126fa459cSmrg const size_t mask, 4226fa459cSmrg const BrotliEncoderParams* params, 4326fa459cSmrg BlockSplit* literal_split, 4426fa459cSmrg BlockSplit* insert_and_copy_split, 4526fa459cSmrg BlockSplit* dist_split); 4626fa459cSmrg 4726fa459cSmrg#if defined(__cplusplus) || defined(c_plusplus) 4826fa459cSmrg} /* extern "C" */ 4926fa459cSmrg#endif 5026fa459cSmrg 5126fa459cSmrg#endif /* BROTLI_ENC_BLOCK_SPLITTER_H_ */ 52