LLVM: include/llvm/Support/VersionTuple.h Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

13

14#ifndef LLVM_SUPPORT_VERSIONTUPLE_H

15#define LLVM_SUPPORT_VERSIONTUPLE_H

16

20#include

21#include

22#include

23

24namespace llvm {

25template <typename HasherT, llvm::endianness Endianness> class HashBuilder;

28

29

31 unsigned Major : 32;

32

33 unsigned Minor : 31;

34 unsigned HasMinor : 1;

35

36 unsigned Subminor : 31;

37 unsigned HasSubminor : 1;

38

39 unsigned Build : 31;

40 unsigned HasBuild : 1;

41

42public:

44 : Major(0), Minor(0), HasMinor(false), Subminor(0), HasSubminor(false),

45 Build(0), HasBuild(false) {}

46

48 : Major(Major), Minor(0), HasMinor(false), Subminor(0),

49 HasSubminor(false), Build(0), HasBuild(false) {}

50

51 explicit constexpr VersionTuple(unsigned Major, unsigned Minor)

52 : Major(Major), Minor(Minor), HasMinor(true), Subminor(0),

53 HasSubminor(false), Build(0), HasBuild(false) {}

54

55 explicit constexpr VersionTuple(unsigned Major, unsigned Minor,

56 unsigned Subminor)

57 : Major(Major), Minor(Minor), HasMinor(true), Subminor(Subminor),

58 HasSubminor(true), Build(0), HasBuild(false) {}

59

60 explicit constexpr VersionTuple(unsigned Major, unsigned Minor,

61 unsigned Subminor, unsigned Build)

62 : Major(Major), Minor(Minor), HasMinor(true), Subminor(Subminor),

63 HasSubminor(true), Build(Build), HasBuild(true) {}

64

65

66

68 return Major == 0 && Minor == 0 && Subminor == 0 && Build == 0;

69 }

70

71

72 unsigned getMajor() const { return Major; }

73

74

75 std::optional getMinor() const {

76 if (!HasMinor)

77 return std::nullopt;

78 return Minor;

79 }

80

81

83 if (!HasSubminor)

84 return std::nullopt;

85 return Subminor;

86 }

87

88

89 std::optional getBuild() const {

90 if (!HasBuild)

91 return std::nullopt;

92 return Build;

93 }

94

95

97 if (HasBuild)

99 return *this;

100 }

101

102

103

105

106

109 if (Result.Build == 0) {

110 Result.HasBuild = false;

111 if (Result.Subminor == 0) {

112 Result.HasSubminor = false;

113 if (Result.Minor == 0)

114 Result.HasMinor = false;

115 }

116 }

117 return Result;

118 }

119

120

121

123 return X.Major == Y.Major && X.Minor == Y.Minor &&

124 X.Subminor == Y.Subminor && X.Build == Y.Build;

125 }

126

127

128

129

130

132 return !(X == Y);

133 }

134

135

136

137

138

140 return std::tie(X.Major, X.Minor, X.Subminor, X.Build) <

141 std::tie(Y.Major, Y.Minor, Y.Subminor, Y.Build);

142 }

143

144

145

146

147

151

152

153

154

155

156

158 return !(Y < X);

159 }

160

161

162

163

164

165

167 return !(X < Y);

168 }

169

171 return hash_combine(VT.Major, VT.Minor, VT.Subminor, VT.Build);

172 }

173

174 template <typename HasherT, llvm::endianness Endianness>

177 HBuilder.add(VT.Major, VT.Minor, VT.Subminor, VT.Build);

178 }

179

180

182

183

184

185

187};

188

189

190LLVM_ABI raw_ostream &operator<<(raw_ostream &Out, const VersionTuple &V);

191

192

199 unsigned Result = Value.getMajor();

200 if (auto Minor = Value.getMinor())

202 if (auto Subminor = Value.getSubminor())

204 if (auto Build = Value.getBuild())

206

207 return Result;

208 }

209

213};

214

215}

216#endif

This file defines DenseMapInfo traits for DenseMap.

static TableGen::Emitter::Opt Y("gen-skeleton-entry", EmitSkeleton, "Generate example skeleton entry")

static TableGen::Emitter::OptClass< SkeletonEmitter > X("gen-skeleton-class", "Generate example skeleton class")

Interface to help hash various types through a hasher type.

std::enable_if_t< hashbuilder_detail::IsHashableData< T >::value, HashBuilder & > add(T Value)

Implement hashing for hashable data types, e.g. integral or enum values.

StringRef - Represent a constant reference to a string, i.e.

LLVM Value Representation.

Represents a version number in the form major[.minor[.subminor[.build]]].

Definition VersionTuple.h:30

constexpr VersionTuple(unsigned Major)

Definition VersionTuple.h:47

friend bool operator<=(const VersionTuple &X, const VersionTuple &Y)

Determine whether one version number precedes or is equivalent to another.

Definition VersionTuple.h:157

std::optional< unsigned > getBuild() const

Retrieve the build version number, if provided.

Definition VersionTuple.h:89

constexpr VersionTuple(unsigned Major, unsigned Minor, unsigned Subminor, unsigned Build)

Definition VersionTuple.h:60

constexpr VersionTuple(unsigned Major, unsigned Minor, unsigned Subminor)

Definition VersionTuple.h:55

friend bool operator!=(const VersionTuple &X, const VersionTuple &Y)

Determine if two version numbers are not equivalent.

Definition VersionTuple.h:131

friend bool operator<(const VersionTuple &X, const VersionTuple &Y)

Determine whether one version number precedes another.

Definition VersionTuple.h:139

friend bool operator>=(const VersionTuple &X, const VersionTuple &Y)

Determine whether one version number follows or is equivalent to another.

Definition VersionTuple.h:166

constexpr VersionTuple(unsigned Major, unsigned Minor)

Definition VersionTuple.h:51

unsigned getMajor() const

Retrieve the major version number.

Definition VersionTuple.h:72

friend hash_code hash_value(const VersionTuple &VT)

Definition VersionTuple.h:170

LLVM_ABI bool tryParse(StringRef string)

Try to parse the given string as a version number.

LLVM_ABI std::string getAsString() const

Retrieve a string representation of the version number.

LLVM_ABI VersionTuple withMajorReplaced(unsigned NewMajor) const

Return a version tuple that contains a different major version but everything else is the same.

VersionTuple normalize() const

Return a version tuple that contains only components that are non-zero.

Definition VersionTuple.h:107

std::optional< unsigned > getSubminor() const

Retrieve the subminor version number, if provided.

Definition VersionTuple.h:82

constexpr VersionTuple()

Definition VersionTuple.h:43

bool empty() const

Determine whether this version information is empty (e.g., all version components are zero).

Definition VersionTuple.h:67

VersionTuple withoutBuild() const

Return a version tuple that contains only the first 3 version components.

Definition VersionTuple.h:96

friend bool operator==(const VersionTuple &X, const VersionTuple &Y)

Determine if two version numbers are equivalent.

Definition VersionTuple.h:122

std::optional< unsigned > getMinor() const

Retrieve the minor version number, if provided.

Definition VersionTuple.h:75

friend bool operator>(const VersionTuple &X, const VersionTuple &Y)

Determine whether one version number follows another.

Definition VersionTuple.h:148

friend void addHash(HashBuilder< HasherT, Endianness > &HBuilder, const VersionTuple &VT)

Definition VersionTuple.h:175

An opaque object representing a hash code.

This class implements an extremely fast bulk output stream that can only output to a stream.

unsigned combineHashValue(unsigned a, unsigned b)

Simplistic combination of 32-bit hash values into 32-bit hash values.

This is an optimization pass for GlobalISel generic memory operations.

raw_ostream & operator<<(raw_ostream &OS, const APFixedPoint &FX)

hash_code hash_combine(const Ts &...args)

Combine values into a single hash_code.

static VersionTuple getEmptyKey()

Definition VersionTuple.h:194

static bool isEqual(const VersionTuple &LHS, const VersionTuple &RHS)

Definition VersionTuple.h:210

static VersionTuple getTombstoneKey()

Definition VersionTuple.h:195

static unsigned getHashValue(const VersionTuple &Value)

Definition VersionTuple.h:198

An information struct used to provide DenseMap with the various necessary components for a given valu...