Commit f330bc23 authored by Nathan Bronson's avatar Nathan Bronson Committed by Facebook Github Bot

rename Range template arg for increased readability

Summary:
Parameterizing Range by the template arg T is potentially
confusing because it violates the typical container pattern of T being
the value type.  This diff uses Range<Iter> consistently in Range.h when
the template arg refers to a fully general iterator.

Reviewed By: yfeldblum

Differential Revision: D4635270

fbshipit-source-id: f70bb2e3e23ab9875fba3dbf7b11492613a037b8
parent 512aa175
...@@ -61,7 +61,7 @@ ...@@ -61,7 +61,7 @@
namespace folly { namespace folly {
template <class T> class Range; template <class Iter> class Range;
/** /**
* Finds the first occurrence of needle in haystack. The algorithm is on * Finds the first occurrence of needle in haystack. The algorithm is on
...@@ -69,9 +69,10 @@ template <class T> class Range; ...@@ -69,9 +69,10 @@ template <class T> class Range;
* as Boyer-Moore. On the upside, it does not do any upfront * as Boyer-Moore. On the upside, it does not do any upfront
* preprocessing and does not allocate memory. * preprocessing and does not allocate memory.
*/ */
template <class T, class Comp = std::equal_to<typename Range<T>::value_type>> template <class Iter,
inline size_t qfind(const Range<T> & haystack, class Comp = std::equal_to<typename Range<Iter>::value_type>>
const Range<T> & needle, inline size_t qfind(const Range<Iter> & haystack,
const Range<Iter> & needle,
Comp eq = Comp()); Comp eq = Comp());
/** /**
...@@ -79,27 +80,27 @@ inline size_t qfind(const Range<T> & haystack, ...@@ -79,27 +80,27 @@ inline size_t qfind(const Range<T> & haystack,
* offset reported to the beginning of haystack, or string::npos if * offset reported to the beginning of haystack, or string::npos if
* needle wasn't found. * needle wasn't found.
*/ */
template <class T> template <class Iter>
size_t qfind(const Range<T> & haystack, size_t qfind(const Range<Iter> & haystack,
const typename Range<T>::value_type& needle); const typename Range<Iter>::value_type& needle);
/** /**
* Finds the last occurrence of needle in haystack. The result is the * Finds the last occurrence of needle in haystack. The result is the
* offset reported to the beginning of haystack, or string::npos if * offset reported to the beginning of haystack, or string::npos if
* needle wasn't found. * needle wasn't found.
*/ */
template <class T> template <class Iter>
size_t rfind(const Range<T> & haystack, size_t rfind(const Range<Iter> & haystack,
const typename Range<T>::value_type& needle); const typename Range<Iter>::value_type& needle);
/** /**
* Finds the first occurrence of any element of needle in * Finds the first occurrence of any element of needle in
* haystack. The algorithm is O(haystack.size() * needle.size()). * haystack. The algorithm is O(haystack.size() * needle.size()).
*/ */
template <class T> template <class Iter>
inline size_t qfind_first_of(const Range<T> & haystack, inline size_t qfind_first_of(const Range<Iter> & haystack,
const Range<T> & needle); const Range<Iter> & needle);
/** /**
* Small internal helper - returns the value just before an iterator. * Small internal helper - returns the value just before an iterator.
...@@ -918,8 +919,8 @@ private: ...@@ -918,8 +919,8 @@ private:
template <class Iter> template <class Iter>
const typename Range<Iter>::size_type Range<Iter>::npos = std::string::npos; const typename Range<Iter>::size_type Range<Iter>::npos = std::string::npos;
template <class T> template <class Iter>
void swap(Range<T>& lhs, Range<T>& rhs) { void swap(Range<Iter>& lhs, Range<Iter>& rhs) {
lhs.swap(rhs); lhs.swap(rhs);
} }
...@@ -974,13 +975,13 @@ inline std::ostream& operator<<(std::ostream& os, ...@@ -974,13 +975,13 @@ inline std::ostream& operator<<(std::ostream& os,
* Templated comparison operators * Templated comparison operators
*/ */
template <class T> template <class Iter>
inline bool operator==(const Range<T>& lhs, const Range<T>& rhs) { inline bool operator==(const Range<Iter>& lhs, const Range<Iter>& rhs) {
return lhs.size() == rhs.size() && lhs.compare(rhs) == 0; return lhs.size() == rhs.size() && lhs.compare(rhs) == 0;
} }
template <class T> template <class Iter>
inline bool operator<(const Range<T>& lhs, const Range<T>& rhs) { inline bool operator<(const Range<Iter>& lhs, const Range<Iter>& rhs) {
return lhs.compare(rhs) < 0; return lhs.compare(rhs) < 0;
} }
...@@ -1057,9 +1058,9 @@ operator>=(const T& lhs, const U& rhs) { ...@@ -1057,9 +1058,9 @@ operator>=(const T& lhs, const U& rhs) {
/** /**
* Finds substrings faster than brute force by borrowing from Boyer-Moore * Finds substrings faster than brute force by borrowing from Boyer-Moore
*/ */
template <class T, class Comp> template <class Iter, class Comp>
size_t qfind(const Range<T>& haystack, size_t qfind(const Range<Iter>& haystack,
const Range<T>& needle, const Range<Iter>& needle,
Comp eq) { Comp eq) {
// Don't use std::search, use a Boyer-Moore-like trick by comparing // Don't use std::search, use a Boyer-Moore-like trick by comparing
// the last characters first // the last characters first
...@@ -1125,9 +1126,9 @@ inline size_t qfind_first_byte_of(const StringPiece haystack, ...@@ -1125,9 +1126,9 @@ inline size_t qfind_first_byte_of(const StringPiece haystack,
} // namespace detail } // namespace detail
template <class T, class Comp> template <class Iter, class Comp>
size_t qfind_first_of(const Range<T> & haystack, size_t qfind_first_of(const Range<Iter> & haystack,
const Range<T> & needles, const Range<Iter> & needles,
Comp eq) { Comp eq) {
auto ret = std::find_first_of(haystack.begin(), haystack.end(), auto ret = std::find_first_of(haystack.begin(), haystack.end(),
needles.begin(), needles.end(), needles.begin(), needles.end(),
...@@ -1156,16 +1157,16 @@ struct AsciiCaseInsensitive { ...@@ -1156,16 +1157,16 @@ struct AsciiCaseInsensitive {
} }
}; };
template <class T> template <class Iter>
size_t qfind(const Range<T>& haystack, size_t qfind(const Range<Iter>& haystack,
const typename Range<T>::value_type& needle) { const typename Range<Iter>::value_type& needle) {
auto pos = std::find(haystack.begin(), haystack.end(), needle); auto pos = std::find(haystack.begin(), haystack.end(), needle);
return pos == haystack.end() ? std::string::npos : pos - haystack.data(); return pos == haystack.end() ? std::string::npos : pos - haystack.data();
} }
template <class T> template <class Iter>
size_t rfind(const Range<T>& haystack, size_t rfind(const Range<Iter>& haystack,
const typename Range<T>::value_type& needle) { const typename Range<Iter>::value_type& needle) {
for (auto i = haystack.size(); i-- > 0; ) { for (auto i = haystack.size(); i-- > 0; ) {
if (haystack[i] == needle) { if (haystack[i] == needle) {
return i; return i;
...@@ -1222,9 +1223,9 @@ inline size_t rfind(const Range<const unsigned char*>& haystack, ...@@ -1222,9 +1223,9 @@ inline size_t rfind(const Range<const unsigned char*>& haystack,
return pos == nullptr ? std::string::npos : pos - haystack.data(); return pos == nullptr ? std::string::npos : pos - haystack.data();
} }
template <class T> template <class Iter>
size_t qfind_first_of(const Range<T>& haystack, size_t qfind_first_of(const Range<Iter>& haystack,
const Range<T>& needles) { const Range<Iter>& needles) {
return qfind_first_of(haystack, needles, AsciiCaseSensitive()); return qfind_first_of(haystack, needles, AsciiCaseSensitive());
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment