Home | History | Annotate | Download | only in streaming_proto
      1 
      2 #include "string_utils.h"
      3 #include <iostream>
      4 
      5 namespace android {
      6 namespace stream_proto {
      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 
     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 
    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 
    122 } // namespace stream_proto
    123 } // namespace android
    124 
    125 
    126