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...