23 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_DEX_TRIGRAM_H
24 #define LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_DEX_TRIGRAM_H
27 #include "llvm/ADT/bit.h"
39 std::array<char, 4> Data;
41 enum class Sentinel { Tombstone = 4,
Empty = 5 };
42 Trigram(Sentinel S) : Data{0, 0, 0,
static_cast<char>(S)} {}
43 uint32_t id()
const {
return llvm::bit_cast<uint32_t>(Data); }
50 std::string
str()
const {
return std::string(Data.data(), Data[3]); }
51 friend struct ::llvm::DenseMapInfo<Trigram>;
73 std::vector<Trigram> &
Out);
91 template <>
struct DenseMapInfo<
clang::clangd::dex::Trigram> {
97 return Trigram(Trigram::Sentinel::Tombstone);
103 X *= uint32_t{0x85ebca6b};
105 X *= uint32_t{0xc2b2ae35};
115 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANGD_INDEX_DEX_TRIGRAM_H