1d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)// found in the LICENSE file.
4d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)//
5d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)// The original source code is from:
6d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)// http://src.chromium.org/viewvc/chrome/trunk/src/base/strings/string_split.cc?revision=216633
7d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)
8d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)#include "string_split.h"
9d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)
10d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)#include <cassert>
11d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)#include <cstddef>
12d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)#include <string>
13d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)#include <vector>
14d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)
15d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)namespace i18n {
16d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)namespace addressinput {
17d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)
18d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)void SplitString(const std::string& str, char s, std::vector<std::string>* r) {
19d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  assert(r != NULL);
20d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  r->clear();
21d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  size_t last = 0;
22d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  size_t c = str.size();
23d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  for (size_t i = 0; i <= c; ++i) {
24d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)    if (i == c || str[i] == s) {
25d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)      std::string tmp(str, last, i - last);
26d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)      // Avoid converting an empty or all-whitespace source string into a vector
27d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)      // of one empty string.
28d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)      if (i != c || !r->empty() || !tmp.empty()) {
29d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)        r->push_back(tmp);
30d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)      }
31d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)      last = i + 1;
32d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)    }
33d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)  }
34d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)}
35d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)
36d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)}  // namespace addressinput
37d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)}  // namespace i18n
38