11767c5feSopenharmony_ci// Copyright (C) 2011 The Libphonenumber Authors 21767c5feSopenharmony_ci// 31767c5feSopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License"); 41767c5feSopenharmony_ci// you may not use this file except in compliance with the License. 51767c5feSopenharmony_ci// You may obtain a copy of the License at 61767c5feSopenharmony_ci// 71767c5feSopenharmony_ci// http://www.apache.org/licenses/LICENSE-2.0 81767c5feSopenharmony_ci// 91767c5feSopenharmony_ci// Unless required by applicable law or agreed to in writing, software 101767c5feSopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS, 111767c5feSopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 121767c5feSopenharmony_ci// See the License for the specific language governing permissions and 131767c5feSopenharmony_ci// limitations under the License. 141767c5feSopenharmony_ci 151767c5feSopenharmony_ci// Author: Philippe Liard 161767c5feSopenharmony_ci 171767c5feSopenharmony_ci#ifndef I18N_PHONENUMBERS_STRINGUTIL_H_ 181767c5feSopenharmony_ci#define I18N_PHONENUMBERS_STRINGUTIL_H_ 191767c5feSopenharmony_ci 201767c5feSopenharmony_ci#include <cstddef> 211767c5feSopenharmony_ci#include <string> 221767c5feSopenharmony_ci#include <vector> 231767c5feSopenharmony_ci 241767c5feSopenharmony_ci#include "phonenumbers/base/basictypes.h" 251767c5feSopenharmony_ci#include "absl/strings/string_view.h" 261767c5feSopenharmony_ci#include "absl/strings/str_cat.h" 271767c5feSopenharmony_ci 281767c5feSopenharmony_cinamespace i18n { 291767c5feSopenharmony_cinamespace phonenumbers { 301767c5feSopenharmony_ci 311767c5feSopenharmony_ciusing std::string; 321767c5feSopenharmony_ciusing std::vector; 331767c5feSopenharmony_ci 341767c5feSopenharmony_ci// Supports string("hello") + 10. 351767c5feSopenharmony_cistring operator+(const string& s, int n); // NOLINT(runtime/string) 361767c5feSopenharmony_ci 371767c5feSopenharmony_ci// Converts integer to string. 381767c5feSopenharmony_cistring SimpleItoa(uint64_t n); 391767c5feSopenharmony_cistring SimpleItoa(int64_t n); 401767c5feSopenharmony_cistring SimpleItoa(int n); 411767c5feSopenharmony_ci 421767c5feSopenharmony_ci// Returns whether the provided string starts with the supplied prefix. 431767c5feSopenharmony_cibool HasPrefixString(const string& s, const string& prefix); 441767c5feSopenharmony_ci 451767c5feSopenharmony_ci// Returns the index of the nth occurence of c in s or string::npos if less than 461767c5feSopenharmony_ci// n occurrences are present. 471767c5feSopenharmony_cisize_t FindNth(const string& s, char c, int n); 481767c5feSopenharmony_ci 491767c5feSopenharmony_ci// Splits a string using a character delimiter. Appends the components to the 501767c5feSopenharmony_ci// provided vector. Note that empty tokens are ignored. 511767c5feSopenharmony_civoid SplitStringUsing(const string& s, char delimiter, 521767c5feSopenharmony_ci vector<string>* result); 531767c5feSopenharmony_ci 541767c5feSopenharmony_ci// Returns true if 'in' starts with 'prefix' and writes 'in' minus 'prefix' into 551767c5feSopenharmony_ci// 'out'. 561767c5feSopenharmony_cibool TryStripPrefixString(const string& in, const string& prefix, string* out); 571767c5feSopenharmony_ci 581767c5feSopenharmony_ci// Returns true if 's' ends with 'suffix'. 591767c5feSopenharmony_cibool HasSuffixString(const string& s, const string& suffix); 601767c5feSopenharmony_ci 611767c5feSopenharmony_ci// Converts string to int32_t. 621767c5feSopenharmony_civoid safe_strto32(const string& s, int32_t *n); 631767c5feSopenharmony_ci 641767c5feSopenharmony_ci// Converts string to uint64_t. 651767c5feSopenharmony_civoid safe_strtou64(const string& s, uint64_t *n); 661767c5feSopenharmony_ci 671767c5feSopenharmony_ci// Converts string to int64_t. 681767c5feSopenharmony_civoid safe_strto64(const string& s, int64_t* n); 691767c5feSopenharmony_ci 701767c5feSopenharmony_ci// Remove all occurrences of a given set of characters from a string. 711767c5feSopenharmony_civoid strrmm(string* s, const string& chars); 721767c5feSopenharmony_ci 731767c5feSopenharmony_ci// Replaces all instances of 'substring' in 's' with 'replacement'. Returns the 741767c5feSopenharmony_ci// number of instances replaced. Replacements are not subject to re-matching. 751767c5feSopenharmony_ciint GlobalReplaceSubstring(const string& substring, const string& replacement, 761767c5feSopenharmony_ci string* s); 771767c5feSopenharmony_ci 781767c5feSopenharmony_ci// An abstract to absl::AlphaNum type; AlphaNum has more accomidating 791767c5feSopenharmony_ci// constructors for more types. 801767c5feSopenharmony_ciclass StringHolder: public absl::AlphaNum { 811767c5feSopenharmony_ci public: 821767c5feSopenharmony_ci // Don't make the constructors explicit to make the StrCat usage convenient. 831767c5feSopenharmony_ci StringHolder(const string& s); // NOLINT(runtime/explicit) 841767c5feSopenharmony_ci StringHolder(const char* s); // NOLINT(runtime/explicit) 851767c5feSopenharmony_ci StringHolder(uint64_t n); // NOLINT(runtime/explicit) 861767c5feSopenharmony_ci ~StringHolder(); 871767c5feSopenharmony_ci 881767c5feSopenharmony_ci const absl::string_view GetString() const { 891767c5feSopenharmony_ci return Piece(); 901767c5feSopenharmony_ci } 911767c5feSopenharmony_ci 921767c5feSopenharmony_ci const char* GetCString() const { 931767c5feSopenharmony_ci return data(); 941767c5feSopenharmony_ci } 951767c5feSopenharmony_ci 961767c5feSopenharmony_ci size_t Length() const { 971767c5feSopenharmony_ci return size(); 981767c5feSopenharmony_ci } 991767c5feSopenharmony_ci}; 1001767c5feSopenharmony_ci 1011767c5feSopenharmony_cistring& operator+=(string& lhs, const StringHolder& rhs); 1021767c5feSopenharmony_ci 1031767c5feSopenharmony_ci// Efficient string concatenation. 1041767c5feSopenharmony_ci 1051767c5feSopenharmony_cistring StrCat(const StringHolder& s1, const StringHolder& s2); 1061767c5feSopenharmony_ci 1071767c5feSopenharmony_cistring StrCat(const StringHolder& s1, const StringHolder& s2, 1081767c5feSopenharmony_ci const StringHolder& s3); 1091767c5feSopenharmony_ci 1101767c5feSopenharmony_cistring StrCat(const StringHolder& s1, const StringHolder& s2, 1111767c5feSopenharmony_ci const StringHolder& s3, const StringHolder& s4); 1121767c5feSopenharmony_ci 1131767c5feSopenharmony_cistring StrCat(const StringHolder& s1, const StringHolder& s2, 1141767c5feSopenharmony_ci const StringHolder& s3, const StringHolder& s4, 1151767c5feSopenharmony_ci const StringHolder& s5); 1161767c5feSopenharmony_ci 1171767c5feSopenharmony_cistring StrCat(const StringHolder& s1, const StringHolder& s2, 1181767c5feSopenharmony_ci const StringHolder& s3, const StringHolder& s4, 1191767c5feSopenharmony_ci const StringHolder& s5, const StringHolder& s6); 1201767c5feSopenharmony_ci 1211767c5feSopenharmony_cistring StrCat(const StringHolder& s1, const StringHolder& s2, 1221767c5feSopenharmony_ci const StringHolder& s3, const StringHolder& s4, 1231767c5feSopenharmony_ci const StringHolder& s5, const StringHolder& s6, 1241767c5feSopenharmony_ci const StringHolder& s7); 1251767c5feSopenharmony_ci 1261767c5feSopenharmony_cistring StrCat(const StringHolder& s1, const StringHolder& s2, 1271767c5feSopenharmony_ci const StringHolder& s3, const StringHolder& s4, 1281767c5feSopenharmony_ci const StringHolder& s5, const StringHolder& s6, 1291767c5feSopenharmony_ci const StringHolder& s7, const StringHolder& s8); 1301767c5feSopenharmony_ci 1311767c5feSopenharmony_cistring StrCat(const StringHolder& s1, const StringHolder& s2, 1321767c5feSopenharmony_ci const StringHolder& s3, const StringHolder& s4, 1331767c5feSopenharmony_ci const StringHolder& s5, const StringHolder& s6, 1341767c5feSopenharmony_ci const StringHolder& s7, const StringHolder& s8, 1351767c5feSopenharmony_ci const StringHolder& s9); 1361767c5feSopenharmony_ci 1371767c5feSopenharmony_cistring StrCat(const StringHolder& s1, const StringHolder& s2, 1381767c5feSopenharmony_ci const StringHolder& s3, const StringHolder& s4, 1391767c5feSopenharmony_ci const StringHolder& s5, const StringHolder& s6, 1401767c5feSopenharmony_ci const StringHolder& s7, const StringHolder& s8, 1411767c5feSopenharmony_ci const StringHolder& s9, const StringHolder& s10, 1421767c5feSopenharmony_ci const StringHolder& s11); 1431767c5feSopenharmony_ci 1441767c5feSopenharmony_cistring StrCat(const StringHolder& s1, const StringHolder& s2, 1451767c5feSopenharmony_ci const StringHolder& s3, const StringHolder& s4, 1461767c5feSopenharmony_ci const StringHolder& s5, const StringHolder& s6, 1471767c5feSopenharmony_ci const StringHolder& s7, const StringHolder& s8, 1481767c5feSopenharmony_ci const StringHolder& s9, const StringHolder& s10, 1491767c5feSopenharmony_ci const StringHolder& s11, const StringHolder& s12); 1501767c5feSopenharmony_ci 1511767c5feSopenharmony_cistring StrCat(const StringHolder& s1, const StringHolder& s2, 1521767c5feSopenharmony_ci const StringHolder& s3, const StringHolder& s4, 1531767c5feSopenharmony_ci const StringHolder& s5, const StringHolder& s6, 1541767c5feSopenharmony_ci const StringHolder& s7, const StringHolder& s8, 1551767c5feSopenharmony_ci const StringHolder& s9, const StringHolder& s10, 1561767c5feSopenharmony_ci const StringHolder& s11, const StringHolder& s12, 1571767c5feSopenharmony_ci const StringHolder& s13); 1581767c5feSopenharmony_ci 1591767c5feSopenharmony_cistring StrCat(const StringHolder& s1, const StringHolder& s2, 1601767c5feSopenharmony_ci const StringHolder& s3, const StringHolder& s4, 1611767c5feSopenharmony_ci const StringHolder& s5, const StringHolder& s6, 1621767c5feSopenharmony_ci const StringHolder& s7, const StringHolder& s8, 1631767c5feSopenharmony_ci const StringHolder& s9, const StringHolder& s10, 1641767c5feSopenharmony_ci const StringHolder& s11, const StringHolder& s12, 1651767c5feSopenharmony_ci const StringHolder& s13, const StringHolder& s14); 1661767c5feSopenharmony_ci 1671767c5feSopenharmony_cistring StrCat(const StringHolder& s1, const StringHolder& s2, 1681767c5feSopenharmony_ci const StringHolder& s3, const StringHolder& s4, 1691767c5feSopenharmony_ci const StringHolder& s5, const StringHolder& s6, 1701767c5feSopenharmony_ci const StringHolder& s7, const StringHolder& s8, 1711767c5feSopenharmony_ci const StringHolder& s9, const StringHolder& s10, 1721767c5feSopenharmony_ci const StringHolder& s11, const StringHolder& s12, 1731767c5feSopenharmony_ci const StringHolder& s13, const StringHolder& s14, 1741767c5feSopenharmony_ci const StringHolder& s15); 1751767c5feSopenharmony_ci 1761767c5feSopenharmony_cistring StrCat(const StringHolder& s1, const StringHolder& s2, 1771767c5feSopenharmony_ci const StringHolder& s3, const StringHolder& s4, 1781767c5feSopenharmony_ci const StringHolder& s5, const StringHolder& s6, 1791767c5feSopenharmony_ci const StringHolder& s7, const StringHolder& s8, 1801767c5feSopenharmony_ci const StringHolder& s9, const StringHolder& s10, 1811767c5feSopenharmony_ci const StringHolder& s11, const StringHolder& s12, 1821767c5feSopenharmony_ci const StringHolder& s13, const StringHolder& s14, 1831767c5feSopenharmony_ci const StringHolder& s15, const StringHolder& s16); 1841767c5feSopenharmony_ci 1851767c5feSopenharmony_civoid StrAppend(string* dest, const StringHolder& s1); 1861767c5feSopenharmony_ci 1871767c5feSopenharmony_civoid StrAppend(string* dest, const StringHolder& s1, const StringHolder& s2); 1881767c5feSopenharmony_ci 1891767c5feSopenharmony_civoid StrAppend(string* dest, const StringHolder& s1, const StringHolder& s2, 1901767c5feSopenharmony_ci const StringHolder& s3); 1911767c5feSopenharmony_ci 1921767c5feSopenharmony_civoid StrAppend(string* dest, const StringHolder& s1, const StringHolder& s2, 1931767c5feSopenharmony_ci const StringHolder& s3, const StringHolder& s4); 1941767c5feSopenharmony_ci 1951767c5feSopenharmony_civoid StrAppend(string* dest, const StringHolder& s1, const StringHolder& s2, 1961767c5feSopenharmony_ci const StringHolder& s3, const StringHolder& s4, 1971767c5feSopenharmony_ci const StringHolder& s5); 1981767c5feSopenharmony_ci 1991767c5feSopenharmony_ci} // namespace phonenumbers 2001767c5feSopenharmony_ci} // namespace i18n 2011767c5feSopenharmony_ci 2021767c5feSopenharmony_ci#endif // I18N_PHONENUMBERS_STRINGUTIL_H_ 203