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