Commit f718ea52 authored by mercury233's avatar mercury233 Committed by GitHub

update DataManager::GetSetCodes (#2990)

parent 192cb6b7
...@@ -242,16 +242,30 @@ const wchar_t* DataManager::GetSetName(uint32_t code) const { ...@@ -242,16 +242,30 @@ const wchar_t* DataManager::GetSetName(uint32_t code) const {
std::vector<uint32_t> DataManager::GetSetCodes(std::wstring setname) const { std::vector<uint32_t> DataManager::GetSetCodes(std::wstring setname) const {
std::vector<uint32_t> matchingCodes; std::vector<uint32_t> matchingCodes;
for(auto csit = _setnameStrings.begin(); csit != _setnameStrings.end(); ++csit) { for(auto csit = _setnameStrings.begin(); csit != _setnameStrings.end(); ++csit) {
auto xpos = csit->second.find_first_of(L'|');//setname|another setname or extra info const std::wstring& setnameString = csit->second;
if(setname.size() < 2) { size_t start = 0;
if(csit->second.compare(0, xpos, setname) == 0 while(start < setnameString.size()) { // handle "setname|another setname"
|| csit->second.compare(xpos + 1, csit->second.length(), setname) == 0) auto pos = setnameString.find(L'|', start);
matchingCodes.push_back(csit->first); std::wstring token;
} else { if(pos == std::wstring::npos)
if(csit->second.substr(0, xpos).find(setname) != std::wstring::npos token = setnameString.substr(start);
|| csit->second.substr(xpos + 1).find(setname) != std::wstring::npos) { else
matchingCodes.push_back(csit->first); token = setnameString.substr(start, pos - start);
if(setname.size() < 2) {
// exact match for short set names to avoid too many results
if(token == setname) {
matchingCodes.push_back(csit->first);
break;
}
} else {
if(token.find(setname) != std::wstring::npos) {
matchingCodes.push_back(csit->first);
break;
}
} }
if(pos == std::wstring::npos)
break;
start = pos + 1;
} }
} }
return matchingCodes; return matchingCodes;
......
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