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