1 #ifndef ANDROID_DVR_PERFORMANCED_STRING_TRIM_H_
2 #define ANDROID_DVR_PERFORMANCED_STRING_TRIM_H_
3 
4 #include <functional>
5 #include <locale>
6 #include <string>
7 
8 namespace android {
9 namespace dvr {
10 
11 // Trims whitespace from the left side of |subject| and returns the result as a
12 // new string.
LeftTrim(std::string subject)13 inline std::string LeftTrim(std::string subject) {
14   subject.erase(subject.begin(),
15                 std::find_if(subject.begin(), subject.end(),
16                              std::not1(std::ptr_fun<int, int>(std::isspace))));
17   return subject;
18 }
19 
20 // Trims whitespace from the right side of |subject| and returns the result as a
21 // new string.
RightTrim(std::string subject)22 inline std::string RightTrim(std::string subject) {
23   subject.erase(std::find_if(subject.rbegin(), subject.rend(),
24                              std::not1(std::ptr_fun<int, int>(std::isspace)))
25                     .base(),
26                 subject.end());
27   return subject;
28 }
29 
30 // Trims whitespace from the both sides of |subject| and returns the result as a
31 // new string.
Trim(std::string subject)32 inline std::string Trim(std::string subject) {
33   subject.erase(subject.begin(),
34                 std::find_if(subject.begin(), subject.end(),
35                              std::not1(std::ptr_fun<int, int>(std::isspace))));
36   subject.erase(std::find_if(subject.rbegin(), subject.rend(),
37                              std::not1(std::ptr_fun<int, int>(std::isspace)))
38                     .base(),
39                 subject.end());
40   return subject;
41 }
42 
43 }  // namespace dvr
44 }  // namespace android
45 
46 #endif  // ANDROID_DVR_PERFORMANCED_STRING_TRIM_H_
47