Skip to content

Commit ab00172

Browse files
[ADT] Simplify isEqualImpl in DenseMapInfo.h (NFC) (#159508)
This patch replaces the recursive implementation of isEqualImpl with a C++17 fold expression.
1 parent 5b2af16 commit ab00172

File tree

1 file changed

+7
-11
lines changed

1 file changed

+7
-11
lines changed

llvm/include/llvm/ADT/DenseMapInfo.h

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -194,20 +194,16 @@ template <typename... Ts> struct DenseMapInfo<std::tuple<Ts...>> {
194194
return getHashValueImpl<0>(values);
195195
}
196196

197-
template <unsigned I>
198-
static bool isEqualImpl(const Tuple &lhs, const Tuple &rhs) {
199-
if constexpr (I == sizeof...(Ts)) {
200-
return true;
201-
} else {
202-
using EltType = std::tuple_element_t<I, Tuple>;
203-
return DenseMapInfo<EltType>::isEqual(std::get<I>(lhs),
204-
std::get<I>(rhs)) &&
205-
isEqualImpl<I + 1>(lhs, rhs);
206-
}
197+
template <std::size_t... Is>
198+
static bool isEqualImpl(const Tuple &lhs, const Tuple &rhs,
199+
std::index_sequence<Is...>) {
200+
return (DenseMapInfo<std::tuple_element_t<Is, Tuple>>::isEqual(
201+
std::get<Is>(lhs), std::get<Is>(rhs)) &&
202+
...);
207203
}
208204

209205
static bool isEqual(const Tuple &lhs, const Tuple &rhs) {
210-
return isEqualImpl<0>(lhs, rhs);
206+
return isEqualImpl(lhs, rhs, std::index_sequence_for<Ts...>{});
211207
}
212208
};
213209

0 commit comments

Comments
 (0)