1695b41eeSopenharmony_ci// Copyright 2017 Google Inc. All Rights Reserved.
2695b41eeSopenharmony_ci//
3695b41eeSopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License");
4695b41eeSopenharmony_ci// you may not use this file except in compliance with the License.
5695b41eeSopenharmony_ci// You may obtain a copy of the License at
6695b41eeSopenharmony_ci//
7695b41eeSopenharmony_ci//     http://www.apache.org/licenses/LICENSE-2.0
8695b41eeSopenharmony_ci//
9695b41eeSopenharmony_ci// Unless required by applicable law or agreed to in writing, software
10695b41eeSopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS,
11695b41eeSopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12695b41eeSopenharmony_ci// See the License for the specific language governing permissions and
13695b41eeSopenharmony_ci// limitations under the License.
14695b41eeSopenharmony_ci
15695b41eeSopenharmony_ci#include "string_piece_util.h"
16695b41eeSopenharmony_ci
17695b41eeSopenharmony_ci#include <algorithm>
18695b41eeSopenharmony_ci#include <string>
19695b41eeSopenharmony_ci#include <vector>
20695b41eeSopenharmony_ciusing namespace std;
21695b41eeSopenharmony_ci
22695b41eeSopenharmony_civector<StringPiece> SplitStringPiece(StringPiece input, char sep) {
23695b41eeSopenharmony_ci  vector<StringPiece> elems;
24695b41eeSopenharmony_ci  elems.reserve(count(input.begin(), input.end(), sep) + 1);
25695b41eeSopenharmony_ci
26695b41eeSopenharmony_ci  StringPiece::const_iterator pos = input.begin();
27695b41eeSopenharmony_ci
28695b41eeSopenharmony_ci  for (;;) {
29695b41eeSopenharmony_ci    const char* next_pos = find(pos, input.end(), sep);
30695b41eeSopenharmony_ci    if (next_pos == input.end()) {
31695b41eeSopenharmony_ci      elems.push_back(StringPiece(pos, input.end() - pos));
32695b41eeSopenharmony_ci      break;
33695b41eeSopenharmony_ci    }
34695b41eeSopenharmony_ci    elems.push_back(StringPiece(pos, next_pos - pos));
35695b41eeSopenharmony_ci    pos = next_pos + 1;
36695b41eeSopenharmony_ci  }
37695b41eeSopenharmony_ci
38695b41eeSopenharmony_ci  return elems;
39695b41eeSopenharmony_ci}
40695b41eeSopenharmony_ci
41695b41eeSopenharmony_cistring JoinStringPiece(const vector<StringPiece>& list, char sep) {
42695b41eeSopenharmony_ci  if (list.empty()) {
43695b41eeSopenharmony_ci    return "";
44695b41eeSopenharmony_ci  }
45695b41eeSopenharmony_ci
46695b41eeSopenharmony_ci  string ret;
47695b41eeSopenharmony_ci
48695b41eeSopenharmony_ci  {
49695b41eeSopenharmony_ci    size_t cap = list.size() - 1;
50695b41eeSopenharmony_ci    for (size_t i = 0; i < list.size(); ++i) {
51695b41eeSopenharmony_ci      cap += list[i].len_;
52695b41eeSopenharmony_ci    }
53695b41eeSopenharmony_ci    ret.reserve(cap);
54695b41eeSopenharmony_ci  }
55695b41eeSopenharmony_ci
56695b41eeSopenharmony_ci  for (size_t i = 0; i < list.size(); ++i) {
57695b41eeSopenharmony_ci    if (i != 0) {
58695b41eeSopenharmony_ci      ret += sep;
59695b41eeSopenharmony_ci    }
60695b41eeSopenharmony_ci    ret.append(list[i].str_, list[i].len_);
61695b41eeSopenharmony_ci  }
62695b41eeSopenharmony_ci
63695b41eeSopenharmony_ci  return ret;
64695b41eeSopenharmony_ci}
65695b41eeSopenharmony_ci
66695b41eeSopenharmony_cibool EqualsCaseInsensitiveASCII(StringPiece a, StringPiece b) {
67695b41eeSopenharmony_ci  if (a.len_ != b.len_) {
68695b41eeSopenharmony_ci    return false;
69695b41eeSopenharmony_ci  }
70695b41eeSopenharmony_ci
71695b41eeSopenharmony_ci  for (size_t i = 0; i < a.len_; ++i) {
72695b41eeSopenharmony_ci    if (ToLowerASCII(a.str_[i]) != ToLowerASCII(b.str_[i])) {
73695b41eeSopenharmony_ci      return false;
74695b41eeSopenharmony_ci    }
75695b41eeSopenharmony_ci  }
76695b41eeSopenharmony_ci
77695b41eeSopenharmony_ci  return true;
78695b41eeSopenharmony_ci}
79