LLVM: include/llvm/ADT/DenseMapInfoVariant.h Source File (original) (raw)
Go to the documentation of this file.
1
2
3
4
5
6
7
8
9
10
11
12
13
14#ifndef LLVM_ADT_DENSEMAPINFOVARIANT_H
15#define LLVM_ADT_DENSEMAPINFOVARIANT_H
16
18#include
19#include
20
21namespace llvm {
22
23
24template <typename... Ts> struct DenseMapInfo<std::variant<Ts...>> {
25 using Variant = std::variant<Ts...>;
26 using FirstT = std::variant_alternative_t<0, Variant>;
27
31
33 return Variant(std::in_place_index<0>,
35 }
36
38 return std::visit(
39 [&Val](auto &&Alternative) {
40 using T = std::decay_t<decltype(Alternative)>;
41
42
44 Val.index(), Alternative);
45 },
46 Val);
47 }
48
50 if (LHS.index() != RHS.index())
51 return false;
52 if (LHS.valueless_by_exception())
53 return true;
54
55
56
57 const void *ErasedLHS =
58 std::visit([](const auto &LHS) -> const void * { return &LHS; }, LHS);
59 return std::visit(
60 [&](const auto &RHS) -> bool {
61 using T = std::remove_cv_t<std::remove_reference_t<decltype(RHS)>>;
64 },
66 }
67};
68
69}
70
71#endif
This file defines DenseMapInfo traits for DenseMap.
This is an optimization pass for GlobalISel generic memory operations.
Implement std::hash so that hash_code can be used in STL containers.
static Variant getEmptyKey()
Definition DenseMapInfoVariant.h:28
std::variant< Ts... > Variant
Definition DenseMapInfoVariant.h:25
static unsigned getHashValue(const Variant &Val)
Definition DenseMapInfoVariant.h:37
static bool isEqual(const Variant &LHS, const Variant &RHS)
Definition DenseMapInfoVariant.h:49
std::variant_alternative_t< 0, Variant > FirstT
Definition DenseMapInfoVariant.h:26
static Variant getTombstoneKey()
Definition DenseMapInfoVariant.h:32
An information struct used to provide DenseMap with the various necessary components for a given valu...