| |
| #include "string_utils.h" |
| #include <iostream> |
| |
| namespace android { |
| namespace stream_proto { |
| |
| using namespace std; |
| |
| string |
| to_camel_case(const string& str) |
| { |
| string result; |
| const int N = str.size(); |
| result.reserve(N); |
| bool capitalize_next = true; |
| for (int i=0; i<N; i++) { |
| char c = str[i]; |
| if (c == '_') { |
| capitalize_next = true; |
| } else { |
| if (capitalize_next && c >= 'a' && c <= 'z') { |
| c = 'A' + c - 'a'; |
| capitalize_next = false; |
| } else if (c >= 'A' && c <= 'Z') { |
| capitalize_next = false; |
| } else if (c >= '0' && c <= '9') { |
| capitalize_next = true; |
| } else { |
| // All other characters (e.g. non-latin) count as capital. |
| capitalize_next = false; |
| } |
| result += c; |
| } |
| } |
| return result; |
| } |
| |
| string |
| make_constant_name(const string& str) |
| { |
| string result; |
| const int N = str.size(); |
| bool underscore_next = false; |
| for (int i=0; i<N; i++) { |
| char c = str[i]; |
| if (c >= 'A' && c <= 'Z') { |
| if (underscore_next) { |
| result += '_'; |
| underscore_next = false; |
| } |
| } else if (c >= 'a' && c <= 'z') { |
| c = 'A' + c - 'a'; |
| underscore_next = true; |
| } else if (c == '_') { |
| underscore_next = false; |
| } |
| result += c; |
| } |
| return result; |
| } |
| |
| string |
| file_base_name(const string& str) |
| { |
| size_t start = str.rfind('/'); |
| if (start == string::npos) { |
| start = 0; |
| } else { |
| start++; |
| } |
| size_t end = str.find('.', start); |
| if (end == string::npos) { |
| end = str.size(); |
| } |
| return str.substr(start, end-start); |
| } |
| |
| string |
| replace_string(const string& str, const char replace, const char with) |
| { |
| string result(str); |
| const int N = result.size(); |
| for (int i=0; i<N; i++) { |
| if (result[i] == replace) { |
| result[i] = with; |
| } |
| } |
| return result; |
| } |
| |
| vector<string> |
| split(const string& str, const char delimiter) |
| { |
| vector<string> result; |
| size_t base = 0, found = 0; |
| while (true) { |
| found = str.find_first_of(delimiter, base); |
| if (found != base) { |
| string part = str.substr(base, found - base); |
| if (!part.empty()) { |
| result.push_back(part); |
| } |
| } |
| if (found == str.npos) break; |
| base = found + 1; |
| } |
| return result; |
| } |
| |
| string |
| stripPrefix(const string& str, const string& prefix) |
| { |
| if (str.size() <= prefix.size()) return str; |
| size_t i = 0, len = prefix.size(); |
| for (; i<len; i++) { |
| if (str[i] != prefix[i]) return str; |
| } |
| return str.substr(i); |
| } |
| |
| } // namespace stream_proto |
| } // namespace android |
| |
| |