Skip to content

Commit 7d65be3

Browse files
committed
support multiword refs
#feat
1 parent 52c934d commit 7d65be3

File tree

2 files changed

+235
-175
lines changed

2 files changed

+235
-175
lines changed

include/mrdocs/Support/Algorithm.hpp

+25
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,31 @@ contains_n(Range const& range, El const& el, std::size_t n)
9090
return false;
9191
}
9292

93+
/** Find the last element in a range that matches an element in the specified range.
94+
@param range The range to search.
95+
@param els The elements to search for.
96+
@return An iterator to the last element found, or range.end() if not found.
97+
*/
98+
template <std::ranges::range Range, std::ranges::range Els>
99+
requires std::equality_comparable_with<std::ranges::range_value_t<Els>, std::ranges::range_value_t<Range>>
100+
auto
101+
find_last_of(Range&& range, Els&& els)
102+
{
103+
if (std::ranges::empty(range))
104+
{
105+
return std::ranges::end(range);
106+
}
107+
auto it = std::ranges::end(range);
108+
do {
109+
--it;
110+
if (contains(els, *it))
111+
{
112+
return it;
113+
}
114+
} while (it != std::ranges::begin(range));
115+
return std::ranges::end(range);
116+
}
117+
93118
} // clang::mrdocs
94119

95120
#endif

0 commit comments

Comments
 (0)