diff options
Diffstat (limited to 'Swift/Controllers/ContactSuggester.cpp')
| -rw-r--r-- | Swift/Controllers/ContactSuggester.cpp | 14 | 
1 files changed, 9 insertions, 5 deletions
| diff --git a/Swift/Controllers/ContactSuggester.cpp b/Swift/Controllers/ContactSuggester.cpp index 09a1567..42e8308 100644 --- a/Swift/Controllers/ContactSuggester.cpp +++ b/Swift/Controllers/ContactSuggester.cpp @@ -57,21 +57,25 @@ std::vector<Contact::ref> ContactSuggester::getSuggestions(const std::string& se  	results.erase(std::unique(results.begin(), results.end(), Contact::equalityPredicate), results.end());  	results.erase(std::remove_if(results.begin(), results.end(), !lambda::bind(&matchContact, search, lambda::_1)),  		results.end());  	std::sort(results.begin(), results.end(), boost::bind(&Contact::sortPredicate, _1, _2, search));  	return results;  }  bool ContactSuggester::fuzzyMatch(std::string text, std::string match) { -	for (std::string::iterator currentQueryChar = match.begin(); currentQueryChar != match.end(); currentQueryChar++) { -		//size_t result = text.find(*currentQueryChar); -		std::string::iterator result = boost::algorithm::ifind_first(text, std::string(currentQueryChar, currentQueryChar+1)).begin(); -		if (result == text.end()) { +	std::string lowerText = text; +	boost::algorithm::to_lower(lowerText); +	std::string lowerMatch = match; +	boost::algorithm::to_lower(lowerMatch); +	size_t lastMatch = 0; +	for (size_t i = 0; i < lowerMatch.length(); ++i) { +		size_t where = lowerText.find_first_of(lowerMatch[i], lastMatch); +		if (where == std::string::npos) {  			return false;  		} -		text.erase(result); +		lastMatch = where + 1;  	}  	return true;  }  } | 
 Swift
 Swift