| Joe Onorato | 6c9547d | 2016-09-07 18:43:49 -0700 | [diff] [blame] | 1 |  | 
|  | 2 | #include "string_utils.h" | 
|  | 3 | #include <iostream> | 
|  | 4 |  | 
|  | 5 | namespace android { | 
| Yi Jin | 0473f88b | 2017-10-09 11:21:40 -0700 | [diff] [blame] | 6 | namespace stream_proto { | 
| Joe Onorato | 6c9547d | 2016-09-07 18:43:49 -0700 | [diff] [blame] | 7 |  | 
|  | 8 | using namespace std; | 
|  | 9 |  | 
|  | 10 | string | 
|  | 11 | to_camel_case(const string& str) | 
|  | 12 | { | 
|  | 13 | string result; | 
|  | 14 | const int N = str.size(); | 
|  | 15 | result.reserve(N); | 
|  | 16 | bool capitalize_next = true; | 
|  | 17 | for (int i=0; i<N; i++) { | 
|  | 18 | char c = str[i]; | 
|  | 19 | if (c == '_') { | 
|  | 20 | capitalize_next = true; | 
|  | 21 | } else { | 
|  | 22 | if (capitalize_next && c >= 'a' && c <= 'z') { | 
|  | 23 | c = 'A' + c - 'a'; | 
|  | 24 | capitalize_next = false; | 
|  | 25 | } else if (c >= 'A' && c <= 'Z') { | 
|  | 26 | capitalize_next = false; | 
|  | 27 | } else if (c >= '0' && c <= '9') { | 
|  | 28 | capitalize_next = true; | 
|  | 29 | } else { | 
|  | 30 | // All other characters (e.g. non-latin) count as capital. | 
|  | 31 | capitalize_next = false; | 
|  | 32 | } | 
|  | 33 | result += c; | 
|  | 34 | } | 
|  | 35 | } | 
|  | 36 | return result; | 
|  | 37 | } | 
|  | 38 |  | 
|  | 39 | string | 
|  | 40 | make_constant_name(const string& str) | 
|  | 41 | { | 
|  | 42 | string result; | 
|  | 43 | const int N = str.size(); | 
|  | 44 | bool underscore_next = false; | 
|  | 45 | for (int i=0; i<N; i++) { | 
|  | 46 | char c = str[i]; | 
|  | 47 | if (c >= 'A' && c <= 'Z') { | 
|  | 48 | if (underscore_next) { | 
|  | 49 | result += '_'; | 
|  | 50 | underscore_next = false; | 
|  | 51 | } | 
|  | 52 | } else if (c >= 'a' && c <= 'z') { | 
|  | 53 | c = 'A' + c - 'a'; | 
|  | 54 | underscore_next = true; | 
|  | 55 | } else if (c == '_') { | 
|  | 56 | underscore_next = false; | 
|  | 57 | } | 
|  | 58 | result += c; | 
|  | 59 | } | 
|  | 60 | return result; | 
|  | 61 | } | 
|  | 62 |  | 
|  | 63 | string | 
|  | 64 | file_base_name(const string& str) | 
|  | 65 | { | 
|  | 66 | size_t start = str.rfind('/'); | 
|  | 67 | if (start == string::npos) { | 
|  | 68 | start = 0; | 
|  | 69 | } else { | 
|  | 70 | start++; | 
|  | 71 | } | 
|  | 72 | size_t end = str.find('.', start); | 
|  | 73 | if (end == string::npos) { | 
|  | 74 | end = str.size(); | 
|  | 75 | } | 
|  | 76 | return str.substr(start, end-start); | 
|  | 77 | } | 
|  | 78 |  | 
|  | 79 | string | 
|  | 80 | replace_string(const string& str, const char replace, const char with) | 
|  | 81 | { | 
|  | 82 | string result(str); | 
|  | 83 | const int N = result.size(); | 
|  | 84 | for (int i=0; i<N; i++) { | 
|  | 85 | if (result[i] == replace) { | 
|  | 86 | result[i] = with; | 
|  | 87 | } | 
|  | 88 | } | 
|  | 89 | return result; | 
|  | 90 | } | 
|  | 91 |  | 
| Yi Jin | 0473f88b | 2017-10-09 11:21:40 -0700 | [diff] [blame] | 92 | vector<string> | 
|  | 93 | split(const string& str, const char delimiter) | 
|  | 94 | { | 
|  | 95 | vector<string> result; | 
|  | 96 | size_t base = 0, found = 0; | 
|  | 97 | while (true) { | 
|  | 98 | found = str.find_first_of(delimiter, base); | 
|  | 99 | if (found != base) { | 
|  | 100 | string part = str.substr(base, found - base); | 
|  | 101 | if (!part.empty()) { | 
|  | 102 | result.push_back(part); | 
|  | 103 | } | 
|  | 104 | } | 
|  | 105 | if (found == str.npos) break; | 
|  | 106 | base = found + 1; | 
|  | 107 | } | 
|  | 108 | return result; | 
|  | 109 | } | 
|  | 110 |  | 
| Yi Jin | e2f7f79 | 2017-11-01 17:08:27 -0700 | [diff] [blame] | 111 | string | 
|  | 112 | stripPrefix(const string& str, const string& prefix) | 
|  | 113 | { | 
|  | 114 | if (str.size() <= prefix.size()) return str; | 
|  | 115 | size_t i = 0, len = prefix.size(); | 
|  | 116 | for (; i<len; i++) { | 
|  | 117 | if (str[i] != prefix[i]) return str; | 
|  | 118 | } | 
|  | 119 | return str.substr(i); | 
|  | 120 | } | 
|  | 121 |  | 
| Yi Jin | 0473f88b | 2017-10-09 11:21:40 -0700 | [diff] [blame] | 122 | } // namespace stream_proto | 
| Joe Onorato | 6c9547d | 2016-09-07 18:43:49 -0700 | [diff] [blame] | 123 | } // namespace android | 
|  | 124 |  | 
|  | 125 |  |