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