1b9056914e2627627ffdd615e078a9b6020ab1cf2philip.liard@gmail.com// Copyright (C) 2011 The Libphonenumber Authors 21ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// 31ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// Licensed under the Apache License, Version 2.0 (the "License"); 41ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// you may not use this file except in compliance with the License. 51ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// You may obtain a copy of the License at 61ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// 71ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// http://www.apache.org/licenses/LICENSE-2.0 81ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// 91ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// Unless required by applicable law or agreed to in writing, software 101ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// distributed under the License is distributed on an "AS IS" BASIS, 111ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 121ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// See the License for the specific language governing permissions and 131ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// limitations under the License. 141ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 151ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// Author: Philippe Liard 161ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 176a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com#include <algorithm> 181ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com#include <cassert> 191ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com#include <cstring> 201ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com#include <sstream> 211ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 221ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com#include "phonenumbers/stringutil.h" 231ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 241ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comnamespace i18n { 251ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comnamespace phonenumbers { 261ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 276a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.comusing std::equal; 281ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comusing std::stringstream; 291ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 30c1b63c89b2a1bd6d58893f860c2899b4d3dc375cphilip.liard@gmail.comstring operator+(const string& s, int n) { // NOLINT(runtime/string) 311ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com stringstream stream; 321ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 331ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com stream << s << n; 341ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com string result; 351ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com stream >> result; 361ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 371ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com return result; 381ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} 391ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 401ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comtemplate <typename T> 411ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comstring GenericSimpleItoa(const T& n) { 421ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com stringstream stream; 431ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 441ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com stream << n; 451ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com string result; 461ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com stream >> result; 471ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 481ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com return result; 491ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} 501ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 511ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comstring SimpleItoa(int n) { 521ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com return GenericSimpleItoa(n); 531ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} 541ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 551ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comstring SimpleItoa(uint64 n) { 561ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com return GenericSimpleItoa(n); 571ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} 581ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 592dbe1d8526f8d057898bc02ed3185a84f82cbb9aphilip.liard@gmail.comstring SimpleItoa(int64 n) { 602dbe1d8526f8d057898bc02ed3185a84f82cbb9aphilip.liard@gmail.com return GenericSimpleItoa(n); 612dbe1d8526f8d057898bc02ed3185a84f82cbb9aphilip.liard@gmail.com} 622dbe1d8526f8d057898bc02ed3185a84f82cbb9aphilip.liard@gmail.com 636a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.combool HasPrefixString(const string& s, const string& prefix) { 646a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com return s.size() >= prefix.size() && 656a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com equal(s.begin(), s.begin() + prefix.size(), prefix.begin()); 666a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com} 676a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com 686a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.comsize_t FindNth(const string& s, char c, int n) { 696a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com size_t pos = string::npos; 706a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com 716a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com for (int i = 0; i < n; ++i) { 726a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com pos = s.find_first_of(c, pos + 1); 736a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com if (pos == string::npos) { 746a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com break; 756a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com } 766a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com } 776a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com return pos; 786a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com} 796a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com 806a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.comvoid SplitStringUsing(const string& s, const string& delimiter, 816a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com vector<string>* result) { 826a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com assert(result); 836a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com size_t start_pos = 0; 846a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com size_t find_pos = string::npos; 856a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com if (delimiter.empty()) { 866a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com return; 876a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com } 886a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com while ((find_pos = s.find(delimiter, start_pos)) != string::npos) { 896a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com const string substring = s.substr(start_pos, find_pos - start_pos); 906a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com if (!substring.empty()) { 916a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com result->push_back(substring); 926a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com } 936a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com start_pos = find_pos + delimiter.length(); 946a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com } 956a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com if (start_pos != s.length()) { 966a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com result->push_back(s.substr(start_pos)); 976a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com } 986a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com} 996a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com 1001ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comvoid StripString(string* s, const char* remove, char replacewith) { 1011ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com const char* str_start = s->c_str(); 1021ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com const char* str = str_start; 1031ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com for (str = strpbrk(str, remove); 1041ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com str != NULL; 1051ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com str = strpbrk(str + 1, remove)) { 1061ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com (*s)[str - str_start] = replacewith; 1071ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com } 1081ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} 1091ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 1101ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.combool TryStripPrefixString(const string& in, const string& prefix, string* out) { 1111ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com assert(out); 1121ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com const bool has_prefix = in.compare(0, prefix.length(), prefix) == 0; 1131ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com out->assign(has_prefix ? in.substr(prefix.length()) : in); 1141ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 1151ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com return has_prefix; 1161ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} 1171ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 1181ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.combool HasSuffixString(const string& s, const string& suffix) { 1191ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com if (s.length() < suffix.length()) { 1201ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com return false; 1211ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com } 1221ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com return s.compare(s.length() - suffix.length(), suffix.length(), suffix) == 0; 1231ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} 1241ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 1251ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comtemplate <typename T> 1261ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comvoid GenericAtoi(const string& s, T* out) { 1271ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com stringstream stream; 1281ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com stream << s; 1291ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com stream >> *out; 1301ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} 1311ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 1321ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comvoid safe_strto32(const string& s, int32 *n) { 1331ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com GenericAtoi(s, n); 1341ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} 1351ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 1361ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comvoid safe_strtou64(const string& s, uint64 *n) { 1371ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com GenericAtoi(s, n); 1381ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} 1391ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 1402dbe1d8526f8d057898bc02ed3185a84f82cbb9aphilip.liard@gmail.comvoid safe_strto64(const string& s, int64* n) { 1412dbe1d8526f8d057898bc02ed3185a84f82cbb9aphilip.liard@gmail.com GenericAtoi(s, n); 1422dbe1d8526f8d057898bc02ed3185a84f82cbb9aphilip.liard@gmail.com} 1432dbe1d8526f8d057898bc02ed3185a84f82cbb9aphilip.liard@gmail.com 1441ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comvoid strrmm(string* s, const string& chars) { 1451ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com for (string::iterator it = s->begin(); it != s->end(); ) { 1461ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com const char current_char = *it; 1471ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com if (chars.find(current_char) != string::npos) { 1481ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com it = s->erase(it); 1491ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com } else { 1501ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com ++it; 1511ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com } 1521ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com } 1531ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} 1541ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 1551ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comint GlobalReplaceSubstring(const string& substring, 1561ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com const string& replacement, 1571ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com string* s) { 1581ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com assert(s != NULL); 1591ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com if (s->empty() || substring.empty()) 1601ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com return 0; 1611ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com string tmp; 1621ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com int num_replacements = 0; 1631ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com int pos = 0; 1641ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com for (size_t match_pos = s->find(substring.data(), pos, substring.length()); 1651ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com match_pos != string::npos; 1661ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com pos = match_pos + substring.length(), 1671ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com match_pos = s->find(substring.data(), pos, substring.length())) { 1681ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com ++num_replacements; 1691ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com // Append the original content before the match. 1701ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com tmp.append(*s, pos, match_pos - pos); 1711ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com // Append the replacement for the match. 1721ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com tmp.append(replacement.begin(), replacement.end()); 1731ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com } 1741ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com // Append the content after the last match. 1751ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com tmp.append(*s, pos, s->length() - pos); 1761ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com s->swap(tmp); 1771ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com return num_replacements; 1781ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} 1791ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 1801ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// StringHolder class 1811ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 182c1b63c89b2a1bd6d58893f860c2899b4d3dc375cphilip.liard@gmail.comStringHolder::StringHolder(const string& s) 183c1b63c89b2a1bd6d58893f860c2899b4d3dc375cphilip.liard@gmail.com : string_(&s), 184c1b63c89b2a1bd6d58893f860c2899b4d3dc375cphilip.liard@gmail.com cstring_(NULL), 185c1b63c89b2a1bd6d58893f860c2899b4d3dc375cphilip.liard@gmail.com len_(s.size()) 1861ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com{} 1871ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 188c1b63c89b2a1bd6d58893f860c2899b4d3dc375cphilip.liard@gmail.comStringHolder::StringHolder(const char* s) 189c1b63c89b2a1bd6d58893f860c2899b4d3dc375cphilip.liard@gmail.com : string_(NULL), 190c1b63c89b2a1bd6d58893f860c2899b4d3dc375cphilip.liard@gmail.com cstring_(s), 191c1b63c89b2a1bd6d58893f860c2899b4d3dc375cphilip.liard@gmail.com len_(std::strlen(s)) 1921ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com{} 1931ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 194c1b63c89b2a1bd6d58893f860c2899b4d3dc375cphilip.liard@gmail.comStringHolder::StringHolder(uint64 n) 195c1b63c89b2a1bd6d58893f860c2899b4d3dc375cphilip.liard@gmail.com : converted_string_(SimpleItoa(n)), 196c1b63c89b2a1bd6d58893f860c2899b4d3dc375cphilip.liard@gmail.com string_(&converted_string_), 197c1b63c89b2a1bd6d58893f860c2899b4d3dc375cphilip.liard@gmail.com cstring_(NULL), 198c1b63c89b2a1bd6d58893f860c2899b4d3dc375cphilip.liard@gmail.com len_(converted_string_.length()) 1991ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com{} 2001ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 2011ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comStringHolder::~StringHolder() {} 2021ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 2031ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// StrCat 2041ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 2051ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// Implements s += sh; (s: string, sh: StringHolder) 2061ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comstring& operator+=(string& lhs, const StringHolder& rhs) { 2071ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com const string* const s = rhs.GetString(); 2081ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com if (s) { 2091ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com lhs += *s; 2101ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com } else { 2111ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com const char* const cs = rhs.GetCString(); 2121ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com if (cs) 2131ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com lhs.append(cs, rhs.Length()); 2141ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com } 2151ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com return lhs; 2161ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} 2171ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 2181ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comstring StrCat(const StringHolder& s1, const StringHolder& s2) { 2191ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com string result; 2201ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result.reserve(s1.Length() + s2.Length() + 1); 2211ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 2221ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s1; 2231ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s2; 2241ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 2251ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com return result; 2261ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} 2271ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 2281ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comstring StrCat(const StringHolder& s1, const StringHolder& s2, 2291ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com const StringHolder& s3) { 2301ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com string result; 2311ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result.reserve(s1.Length() + s2.Length() + s3.Length() + 1); 2321ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 2331ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s1; 2341ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s2; 2351ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s3; 2361ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 2371ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com return result; 2381ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} 2391ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 2401ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comstring StrCat(const StringHolder& s1, const StringHolder& s2, 2411ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com const StringHolder& s3, const StringHolder& s4) { 2421ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com string result; 2431ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result.reserve(s1.Length() + s2.Length() + s3.Length() + s4.Length() + 1); 2441ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 2451ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s1; 2461ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s2; 2471ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s3; 2481ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s4; 2491ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 2501ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com return result; 2511ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} 2521ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 2531ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comstring StrCat(const StringHolder& s1, const StringHolder& s2, 2541ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com const StringHolder& s3, const StringHolder& s4, 2551ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com const StringHolder& s5) { 2561ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com string result; 2571ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result.reserve(s1.Length() + s2.Length() + s3.Length() + s4.Length() + 2581ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com s5.Length() + 1); 2591ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s1; 2601ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s2; 2611ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s3; 2621ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s4; 2631ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s5; 2641ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 2651ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com return result; 2661ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} 2671ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 2681ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comstring StrCat(const StringHolder& s1, const StringHolder& s2, 2691ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com const StringHolder& s3, const StringHolder& s4, 2701ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com const StringHolder& s5, const StringHolder& s6) { 2711ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com string result; 2721ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result.reserve(s1.Length() + s2.Length() + s3.Length() + s4.Length() + 2731ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com s5.Length() + s6.Length() + 1); 2741ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s1; 2751ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s2; 2761ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s3; 2771ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s4; 2781ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s5; 2791ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s6; 2801ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 2811ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com return result; 2821ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} 2831ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 2841ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comstring StrCat(const StringHolder& s1, const StringHolder& s2, 2851ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com const StringHolder& s3, const StringHolder& s4, 2861ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com const StringHolder& s5, const StringHolder& s6, 2871ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com const StringHolder& s7) { 2881ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com string result; 2891ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result.reserve(s1.Length() + s2.Length() + s3.Length() + s4.Length() + 2901ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com s5.Length() + s6.Length() + s7.Length() + 1); 2911ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s1; 2921ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s2; 2931ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s3; 2941ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s4; 2951ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s5; 2961ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s6; 2971ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s7; 2981ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 2991ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com return result; 3001ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} 3011ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 3021ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comstring StrCat(const StringHolder& s1, const StringHolder& s2, 3031ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com const StringHolder& s3, const StringHolder& s4, 3041ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com const StringHolder& s5, const StringHolder& s6, 3056a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com const StringHolder& s7, const StringHolder& s8) { 3066a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com string result; 3076a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com result.reserve(s1.Length() + s2.Length() + s3.Length() + s4.Length() + 3086a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com s5.Length() + s6.Length() + s7.Length() + s8.Length() + 1); 3096a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com result += s1; 3106a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com result += s2; 3116a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com result += s3; 3126a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com result += s4; 3136a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com result += s5; 3146a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com result += s6; 3156a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com result += s7; 3166a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com result += s8; 3176a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com 3186a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com return result; 3196a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com} 3206a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com 3216a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.comstring StrCat(const StringHolder& s1, const StringHolder& s2, 3226a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com const StringHolder& s3, const StringHolder& s4, 3236a0a07f4f0066eba2dc9bb81465f4e67d670c7b6philip.liard@gmail.com const StringHolder& s5, const StringHolder& s6, 3244784d0d0f3a84cdac8d7a6b99b72fbb6b1a98ca5philip.liard@gmail.com const StringHolder& s7, const StringHolder& s8, 3254784d0d0f3a84cdac8d7a6b99b72fbb6b1a98ca5philip.liard@gmail.com const StringHolder& s9) { 3264784d0d0f3a84cdac8d7a6b99b72fbb6b1a98ca5philip.liard@gmail.com string result; 3274784d0d0f3a84cdac8d7a6b99b72fbb6b1a98ca5philip.liard@gmail.com result.reserve(s1.Length() + s2.Length() + s3.Length() + s4.Length() + 3284784d0d0f3a84cdac8d7a6b99b72fbb6b1a98ca5philip.liard@gmail.com s5.Length() + s6.Length() + s7.Length() + s8.Length() + 3294784d0d0f3a84cdac8d7a6b99b72fbb6b1a98ca5philip.liard@gmail.com s9.Length() + 1); 3304784d0d0f3a84cdac8d7a6b99b72fbb6b1a98ca5philip.liard@gmail.com result += s1; 3314784d0d0f3a84cdac8d7a6b99b72fbb6b1a98ca5philip.liard@gmail.com result += s2; 3324784d0d0f3a84cdac8d7a6b99b72fbb6b1a98ca5philip.liard@gmail.com result += s3; 3334784d0d0f3a84cdac8d7a6b99b72fbb6b1a98ca5philip.liard@gmail.com result += s4; 3344784d0d0f3a84cdac8d7a6b99b72fbb6b1a98ca5philip.liard@gmail.com result += s5; 3354784d0d0f3a84cdac8d7a6b99b72fbb6b1a98ca5philip.liard@gmail.com result += s6; 3364784d0d0f3a84cdac8d7a6b99b72fbb6b1a98ca5philip.liard@gmail.com result += s7; 3374784d0d0f3a84cdac8d7a6b99b72fbb6b1a98ca5philip.liard@gmail.com result += s8; 3384784d0d0f3a84cdac8d7a6b99b72fbb6b1a98ca5philip.liard@gmail.com result += s9; 3394784d0d0f3a84cdac8d7a6b99b72fbb6b1a98ca5philip.liard@gmail.com 3404784d0d0f3a84cdac8d7a6b99b72fbb6b1a98ca5philip.liard@gmail.com return result; 3414784d0d0f3a84cdac8d7a6b99b72fbb6b1a98ca5philip.liard@gmail.com} 3424784d0d0f3a84cdac8d7a6b99b72fbb6b1a98ca5philip.liard@gmail.com 3434784d0d0f3a84cdac8d7a6b99b72fbb6b1a98ca5philip.liard@gmail.comstring StrCat(const StringHolder& s1, const StringHolder& s2, 3444784d0d0f3a84cdac8d7a6b99b72fbb6b1a98ca5philip.liard@gmail.com const StringHolder& s3, const StringHolder& s4, 3454784d0d0f3a84cdac8d7a6b99b72fbb6b1a98ca5philip.liard@gmail.com const StringHolder& s5, const StringHolder& s6, 3461ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com const StringHolder& s7, const StringHolder& s8, 3471ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com const StringHolder& s9, const StringHolder& s10, 3481ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com const StringHolder& s11) { 3491ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com string result; 3501ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result.reserve(s1.Length() + s2.Length() + s3.Length() + s4.Length() + 3511ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com s5.Length() + s6.Length() + s7.Length() + s8.Length() + 3521ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com s9.Length() + s10.Length() + s11.Length()); 3531ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s1; 3541ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s2; 3551ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s3; 3561ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s4; 3571ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s5; 3581ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s6; 3591ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s7; 3601ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s8; 3611ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s9; 3621ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s10; 3631ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com result += s11; 3641ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 3651ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com return result; 3661ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} 3671ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 36835bd393fb78215a9c6dbeb158913def01eb58985lararennie@google.comstring StrCat(const StringHolder& s1, const StringHolder& s2, 36935bd393fb78215a9c6dbeb158913def01eb58985lararennie@google.com const StringHolder& s3, const StringHolder& s4, 37035bd393fb78215a9c6dbeb158913def01eb58985lararennie@google.com const StringHolder& s5, const StringHolder& s6, 37135bd393fb78215a9c6dbeb158913def01eb58985lararennie@google.com const StringHolder& s7, const StringHolder& s8, 37235bd393fb78215a9c6dbeb158913def01eb58985lararennie@google.com const StringHolder& s9, const StringHolder& s10, 37335bd393fb78215a9c6dbeb158913def01eb58985lararennie@google.com const StringHolder& s11, const StringHolder& s12) { 37435bd393fb78215a9c6dbeb158913def01eb58985lararennie@google.com string result; 37535bd393fb78215a9c6dbeb158913def01eb58985lararennie@google.com result.reserve(s1.Length() + s2.Length() + s3.Length() + s4.Length() + 37635bd393fb78215a9c6dbeb158913def01eb58985lararennie@google.com s5.Length() + s6.Length() + s7.Length() + s8.Length() + 37735bd393fb78215a9c6dbeb158913def01eb58985lararennie@google.com s9.Length() + s10.Length() + s11.Length() + s12.Length()); 37835bd393fb78215a9c6dbeb158913def01eb58985lararennie@google.com result += s1; 37935bd393fb78215a9c6dbeb158913def01eb58985lararennie@google.com result += s2; 38035bd393fb78215a9c6dbeb158913def01eb58985lararennie@google.com result += s3; 38135bd393fb78215a9c6dbeb158913def01eb58985lararennie@google.com result += s4; 38235bd393fb78215a9c6dbeb158913def01eb58985lararennie@google.com result += s5; 38335bd393fb78215a9c6dbeb158913def01eb58985lararennie@google.com result += s6; 38435bd393fb78215a9c6dbeb158913def01eb58985lararennie@google.com result += s7; 38535bd393fb78215a9c6dbeb158913def01eb58985lararennie@google.com result += s8; 38635bd393fb78215a9c6dbeb158913def01eb58985lararennie@google.com result += s9; 38735bd393fb78215a9c6dbeb158913def01eb58985lararennie@google.com result += s10; 38835bd393fb78215a9c6dbeb158913def01eb58985lararennie@google.com result += s11; 38935bd393fb78215a9c6dbeb158913def01eb58985lararennie@google.com result += s12; 39035bd393fb78215a9c6dbeb158913def01eb58985lararennie@google.com 39135bd393fb78215a9c6dbeb158913def01eb58985lararennie@google.com return result; 39235bd393fb78215a9c6dbeb158913def01eb58985lararennie@google.com} 39335bd393fb78215a9c6dbeb158913def01eb58985lararennie@google.com 3941ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// StrAppend 3951ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 3961ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comvoid StrAppend(string* dest, const StringHolder& s1) { 3971ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com assert(dest); 3981ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 3991ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com dest->reserve(dest->length() + s1.Length() + 1); 4001ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com *dest += s1; 4011ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} 4021ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 4031ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comvoid StrAppend(string* dest, const StringHolder& s1, const StringHolder& s2) { 4041ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com assert(dest); 4051ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 4061ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com dest->reserve(dest->length() + s1.Length() + s2.Length() + 1); 4071ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com *dest += s1; 4081ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com *dest += s2; 4091ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} 4101ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 411cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.comvoid StrAppend(string* dest, const StringHolder& s1, const StringHolder& s2, 412cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com const StringHolder& s3) { 413cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com assert(dest); 414cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com 415cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com dest->reserve(dest->length() + s1.Length() + s2.Length() + s3.Length() + 1); 416cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com *dest += s1; 417cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com *dest += s2; 418cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com *dest += s3; 419cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com} 420cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com 421cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.comvoid StrAppend(string* dest, const StringHolder& s1, const StringHolder& s2, 422cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com const StringHolder& s3, const StringHolder& s4) { 423cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com assert(dest); 424cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com 425cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com dest->reserve(dest->length() + s1.Length() + s2.Length() + s3.Length() + 426cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com s4.Length() + 1); 427cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com *dest += s1; 428cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com *dest += s2; 429cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com *dest += s3; 430cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com *dest += s4; 431cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com} 432cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com 433cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.comvoid StrAppend(string* dest, const StringHolder& s1, const StringHolder& s2, 434cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com const StringHolder& s3, const StringHolder& s4, 435cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com const StringHolder& s5) { 436cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com assert(dest); 437cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com 438cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com dest->reserve(dest->length() + s1.Length() + s2.Length() + s3.Length() + 439cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com s4.Length() + s5.Length() + 1); 440cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com *dest += s1; 441cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com *dest += s2; 442cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com *dest += s3; 443cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com *dest += s4; 444cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com *dest += s5; 445cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com} 446cbc255f39ceade5fc9d653e320c511a5f9c51e77philip.liard@gmail.com 4471ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} // namespace phonenumbers 4481ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} // namespace i18n 449