!7 cprint SnippetsWordIndex { transient WordIndex wordIndex; // word to snippet ID start-thread { time "Make word index" { new WordIndex wordIndex; for (virtual CSnippet sn : dm_allSnippets()) { S snippetID = (S) rcall snippetID(sn); S text = cast rcall text(sn); wordIndex.add(snippetID, text); } setField(+wordIndex); } print("Indexed " + nWords(wordIndex.numWords())); } // API // may return null (no pre-search result) Cl snippetsContainingTextIC_preSearch(S query) { ret wordIndex_lookupString(wordIndex, query); } }