Skip to content

Commit 37f8719

Browse files
authored
[ADT] Implement ArrayRef::operator< and other comparisons (llvm#147277)
Order ArrayRefs using std::lexicographical_compare, just like std::vector and SmallVector.
1 parent 18f7655 commit 37f8719

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

llvm/include/llvm/ADT/ArrayRef.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -565,6 +565,27 @@ namespace llvm {
565565
return !(LHS == RHS);
566566
}
567567

568+
template <typename T>
569+
inline bool operator<(ArrayRef<T> LHS, ArrayRef<T> RHS) {
570+
return std::lexicographical_compare(LHS.begin(), LHS.end(), RHS.begin(),
571+
RHS.end());
572+
}
573+
574+
template <typename T>
575+
inline bool operator>(ArrayRef<T> LHS, ArrayRef<T> RHS) {
576+
return RHS < LHS;
577+
}
578+
579+
template <typename T>
580+
inline bool operator<=(ArrayRef<T> LHS, ArrayRef<T> RHS) {
581+
return !(LHS > RHS);
582+
}
583+
584+
template <typename T>
585+
inline bool operator>=(ArrayRef<T> LHS, ArrayRef<T> RHS) {
586+
return !(LHS < RHS);
587+
}
588+
568589
/// @}
569590

570591
template <typename T> hash_code hash_value(ArrayRef<T> S) {

llvm/unittests/ADT/ArrayRefTest.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,27 @@ TEST(ArrayRefTest, EmptyEquals) {
231231
EXPECT_TRUE(ArrayRef<unsigned>() == ArrayRef<unsigned>());
232232
}
233233

234+
TEST(ArrayRefTest, Compare) {
235+
ArrayRef<char> Ban("Ban");
236+
ArrayRef<char> Banana("Banana");
237+
ArrayRef<char> Band("Band");
238+
239+
EXPECT_TRUE(Ban < Banana);
240+
EXPECT_TRUE(Ban <= Banana);
241+
EXPECT_FALSE(Ban > Banana);
242+
EXPECT_FALSE(Ban >= Banana);
243+
244+
EXPECT_FALSE(Banana < Banana);
245+
EXPECT_TRUE(Banana <= Banana);
246+
EXPECT_FALSE(Banana > Banana);
247+
EXPECT_TRUE(Banana >= Banana);
248+
249+
EXPECT_TRUE(Banana < Band);
250+
EXPECT_TRUE(Banana <= Band);
251+
EXPECT_FALSE(Banana > Band);
252+
EXPECT_FALSE(Banana >= Band);
253+
}
254+
234255
TEST(ArrayRefTest, ConstConvert) {
235256
int buf[4];
236257
for (int i = 0; i < 4; ++i)

0 commit comments

Comments
 (0)