1 #include "StringUtil.h"
2 #include "no_warning_algorithm"
3 #include "no_warning_sstream"
4 
5 using namespace std;
6 
7 namespace opencollada
8 {
StartsWith(const std::string & str,const std::string & start)9 	bool String::StartsWith(const std::string & str, const std::string & start)
10 	{
11 		return str.substr(0, start.length()) == start;
12 	}
13 
EndsWith(const string & str,const string & end)14 	bool String::EndsWith(const string & str, const string & end)
15 	{
16 		if (end.length() > str.length())
17 			return false;
18 		return equal(end.rbegin(), end.rend(), str.rbegin());
19 	}
20 
21 	// Split string by whitespace
Split(const string & s)22 	vector<string> String::Split(const string & s)
23 	{
24 		if (s.empty())
25 			return vector<string>();
26 
27 		vector<string> parts;
28 		istringstream iss(s);
29 		while (iss && !iss.eof())
30 		{
31 			string sub;
32 			iss >> sub;
33 			parts.emplace_back(sub);
34 		}
35 		return parts;
36 	}
37 
Lower(const string & str)38 	string String::Lower(const string & str)
39 	{
40 		string res = str;
41 		transform(res.begin(), res.end(), res.begin(), [](const string::value_type & c) { return static_cast<string::value_type>(::tolower(c)); });
42 		return res;
43 	}
44 
Replace(const string & str,const string & search_str,const string & replace_str)45 	string String::Replace(const string & str, const string & search_str, const string & replace_str)
46 	{
47 		if (str.empty() && search_str.empty())
48 			return replace_str;
49 
50 		if (search_str.empty())
51 			return str;
52 
53 		string res(str);
54 
55 		size_t search_len = search_str.length();
56 		size_t replace_len = replace_str.length();
57 
58 		for (size_t found = res.find(search_str); found != string::npos; found = res.find(search_str, found + replace_len))
59 			res.replace(found, search_len, replace_str);
60 
61 		return res;
62 	}
63 
Replace(string & str,char a,char b)64 	size_t String::Replace(string & str, char a, char b)
65 	{
66 		size_t count = 0;
67 		for (auto pos = str.find(a); pos != string::npos; pos = str.find(a, pos + 1))
68 		{
69 			str[pos] = b;
70 			++count;
71 		}
72 		return count;
73 	}
74 }