+ vector<pair<Trigram, size_t>> trigrams;
+ for (const string &needle : needles) {
+ if (needle.size() < 3) continue;
+ for (size_t i = 0; i < needle.size() - 2; ++i) {
+ uint32_t trgm = read_trigram(needle, i);
+ corpus.find_trigram(trgm, [trgm, &trigrams](const Trigram *trgmptr, size_t len) {
+ if (trgmptr == nullptr) {
+ dprintf("trigram %06x isn't found, we abort the search\n", trgm);
+ return;
+ }
+ trigrams.emplace_back(*trgmptr, len);
+ });
+ }
+ }
+ engine.finish();
+ dprintf("Hashtable lookups done after %.1f ms.\n", 1e3 * duration<float>(steady_clock::now() - start).count());
+
+ if (trigrams.empty()) {