Add the initial version of the static dictionary and transforms to Brotli.
diff --git a/brotli/enc/encode.cc b/brotli/enc/encode.cc
index 6603eec..fa04834 100644
--- a/brotli/enc/encode.cc
+++ b/brotli/enc/encode.cc
@@ -24,6 +24,7 @@
#include "./block_splitter.h"
#include "./cluster.h"
#include "./context.h"
+#include "./transform.h"
#include "./entropy_encode.h"
#include "./fast_log.h"
#include "./hash.h"
@@ -858,6 +859,7 @@
dist_ringbuffer_[2] = 11;
dist_ringbuffer_[3] = 4;
storage_[0] = 0;
+ StoreDictionaryWordHashes();
}
BrotliCompressor::~BrotliCompressor() {
@@ -865,6 +867,22 @@
delete[] storage_;
}
+void BrotliCompressor::StoreDictionaryWordHashes() {
+ for (int t = kNumTransforms - 1; t >= 0; --t) {
+ for (int i = kMaxDictionaryWordLength; i >= 3; --i) {
+ const int num_words = 1 << kBrotliDictionarySizeBitsByLength[i];
+ for (int j = num_words - 1; j >= 0; --j) {
+ int word_id = t * num_words + j;
+ std::string word = GetTransformedDictionaryWord(i, word_id);
+ if (word.size() >= 3) {
+ hasher_->Store(reinterpret_cast<const uint8_t*>(&word[0]),
+ (-1) * ((i << 20) + word_id + 1));
+ }
+ }
+ }
+ }
+}
+
void BrotliCompressor::WriteStreamHeader() {
// Encode window size.
if (window_bits_ == 16) {