23 #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_DEX_TRIGRAM_H
24 #define LLVM_CLANG_TOOLS_EXTRA_CLANGD_DEX_TRIGRAM_H
27 #include "llvm/ADT/bit.h"
38 std::array<char, 4> Data;
40 enum class Sentinel { Tombstone = 4,
Empty = 5 };
41 Trigram(Sentinel S) : Data{0, 0, 0, static_cast<char>(S)} {}
42 uint32_t id()
const {
return llvm::bit_cast<uint32_t>(Data); }
47 Trigram(
char A,
char B) : Data{A, B, 0, 2} {}
48 Trigram(
char A,
char B,
char C) : Data{A, B, C, 3} {}
49 std::string
str()
const {
return std::string(Data.data(), Data[3]); }
50 friend struct ::llvm::DenseMapInfo<Trigram>;
72 std::vector<Trigram> &
Out);
90 template <>
struct DenseMapInfo<
clang::clangd::dex::Trigram> {
96 return Trigram(Trigram::Sentinel::Tombstone);
102 X *= uint32_t{0x85ebca6b};
104 X *= uint32_t{0xc2b2ae35};
114 #endif // LLVM_CLANG_TOOLS_EXTRA_CLANGD_DEX_TRIGRAM_H