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
8namespace android {
9namespace dvr {
10
11// Trims whitespace from the left side of |subject| and returns the result as a
12// new string.
13inline 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.
22inline 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.
32inline 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