#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