Home | History | Annotate | Download | only in src
      1 /*
      2  * Copyright (C) 2012 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
      5  * use this file except in compliance with the License. You may obtain a copy of
      6  * the License at
      7  *
      8  * http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
     12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
     13  * License for the specific language governing permissions and limitations under
     14  * the License.
     15  */
     16 
     17 #include <stdio.h>
     18 #include <stdarg.h>
     19 #include <stdlib.h>
     20 
     21 #include "Log.h"
     22 #include "StringUtil.h"
     23 
     24 std::vector<android::String8>* StringUtil::split(const android::String8& str, char delimiter)
     25 {
     26     std::vector<android::String8>* tokens = new std::vector<android::String8>();
     27     unsigned int lastTokenEnd = 0;
     28     for (unsigned int i = 0; i < str.length(); i++) {
     29         if (str[i] == delimiter) {
     30             if ((i - lastTokenEnd) > 0) {
     31                 tokens->push_back(substr(str, lastTokenEnd, i - lastTokenEnd));
     32             }
     33             lastTokenEnd = i + 1; // 1 for skipping delimiter
     34         }
     35     }
     36     if (lastTokenEnd < str.length()) {
     37         tokens->push_back(substr(str, lastTokenEnd, str.length() - lastTokenEnd));
     38     }
     39     return tokens;
     40 }
     41 
     42 android::String8 StringUtil::substr(const android::String8& str, size_t pos, size_t n)
     43 {
     44     size_t l = str.length();
     45 
     46     if (pos >= l) {
     47         android::String8 resultDummy;
     48         return resultDummy;
     49     }
     50     if ((pos + n) > l) {
     51         n = l - pos;
     52     }
     53     android::String8 result(str.string() + pos, n);
     54     return result;
     55 }
     56 
     57 int StringUtil::compare(const android::String8& str, const char* other)
     58 {
     59     return strcmp(str.string(), other);
     60 }
     61 
     62 bool StringUtil::endsWith(const android::String8& str, const char* other)
     63 {
     64     size_t l1 = str.length();
     65     size_t l2 = strlen(other);
     66     const char* data = str.string();
     67     if (l2 > l1) {
     68         return false;
     69     }
     70     size_t iStr = l1 - l2;
     71     size_t iOther = 0;
     72     for(; iStr < l1; iStr++) {
     73         if (data[iStr] != other[iOther]) {
     74             return false;
     75         }
     76         iOther++;
     77     }
     78     return true;
     79 }
     80