diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 02:57:58 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 02:57:58 +0000 |
commit | be1c7e50e1e8809ea56f2c9d472eccd8ffd73a97 (patch) | |
tree | 9754ff1ca740f6346cf8483ec915d4054bc5da2d /web/server/h2o/libh2o/deps/brotli/enc/metablock.h | |
parent | Initial commit. (diff) | |
download | netdata-be1c7e50e1e8809ea56f2c9d472eccd8ffd73a97.tar.xz netdata-be1c7e50e1e8809ea56f2c9d472eccd8ffd73a97.zip |
Adding upstream version 1.44.3.upstream/1.44.3upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'web/server/h2o/libh2o/deps/brotli/enc/metablock.h')
-rw-r--r-- | web/server/h2o/libh2o/deps/brotli/enc/metablock.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/web/server/h2o/libh2o/deps/brotli/enc/metablock.h b/web/server/h2o/libh2o/deps/brotli/enc/metablock.h new file mode 100644 index 00000000..00c739b0 --- /dev/null +++ b/web/server/h2o/libh2o/deps/brotli/enc/metablock.h @@ -0,0 +1,80 @@ +/* Copyright 2015 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +// Algorithms for distributing the literals and commands of a metablock between +// block types and contexts. + +#ifndef BROTLI_ENC_METABLOCK_H_ +#define BROTLI_ENC_METABLOCK_H_ + +#include <vector> + +#include "./command.h" +#include "./histogram.h" + +namespace brotli { + +struct BlockSplit { + BlockSplit() : num_types(0) {} + + size_t num_types; + std::vector<uint8_t> types; + std::vector<uint32_t> lengths; +}; + +struct MetaBlockSplit { + BlockSplit literal_split; + BlockSplit command_split; + BlockSplit distance_split; + std::vector<uint32_t> literal_context_map; + std::vector<uint32_t> distance_context_map; + std::vector<HistogramLiteral> literal_histograms; + std::vector<HistogramCommand> command_histograms; + std::vector<HistogramDistance> distance_histograms; +}; + +// Uses the slow shortest-path block splitter and does context clustering. +void BuildMetaBlock(const uint8_t* ringbuffer, + const size_t pos, + const size_t mask, + uint8_t prev_byte, + uint8_t prev_byte2, + const Command* cmds, + size_t num_commands, + ContextType literal_context_mode, + MetaBlockSplit* mb); + +// Uses a fast greedy block splitter that tries to merge current block with the +// last or the second last block and does not do any context modeling. +void BuildMetaBlockGreedy(const uint8_t* ringbuffer, + size_t pos, + size_t mask, + const Command *commands, + size_t n_commands, + MetaBlockSplit* mb); + +// Uses a fast greedy block splitter that tries to merge current block with the +// last or the second last block and uses a static context clustering which +// is the same for all block types. +void BuildMetaBlockGreedyWithContexts(const uint8_t* ringbuffer, + size_t pos, + size_t mask, + uint8_t prev_byte, + uint8_t prev_byte2, + ContextType literal_context_mode, + size_t num_contexts, + const uint32_t* static_context_map, + const Command *commands, + size_t n_commands, + MetaBlockSplit* mb); + +void OptimizeHistograms(size_t num_direct_distance_codes, + size_t distance_postfix_bits, + MetaBlockSplit* mb); + +} // namespace brotli + +#endif // BROTLI_ENC_METABLOCK_H_ |