#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