| Index: third_party/libphonenumber/cpp/src/stringutil.cc
|
| ===================================================================
|
| --- third_party/libphonenumber/cpp/src/stringutil.cc (revision 84008)
|
| +++ third_party/libphonenumber/cpp/src/stringutil.cc (working copy)
|
| @@ -1,273 +0,0 @@
|
| -// Copyright (C) 2011 Google Inc.
|
| -//
|
| -// Licensed under the Apache License, Version 2.0 (the "License");
|
| -// you may not use this file except in compliance with the License.
|
| -// You may obtain a copy of the License at
|
| -//
|
| -// http://www.apache.org/licenses/LICENSE-2.0
|
| -//
|
| -// Unless required by applicable law or agreed to in writing, software
|
| -// distributed under the License is distributed on an "AS IS" BASIS,
|
| -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| -// See the License for the specific language governing permissions and
|
| -// limitations under the License.
|
| -
|
| -// Author: Philippe Liard
|
| -
|
| -#include <cassert>
|
| -#include <cstring>
|
| -#include <sstream>
|
| -
|
| -#include "stringutil.h"
|
| -
|
| -namespace i18n {
|
| -namespace phonenumbers {
|
| -
|
| -using std::stringstream;
|
| -
|
| -string operator+(const string& s, int n) {
|
| - stringstream stream;
|
| -
|
| - stream << s << n;
|
| - string result;
|
| - stream >> result;
|
| -
|
| - return result;
|
| -}
|
| -
|
| -template <typename T>
|
| -string GenericSimpleItoa(const T& n) {
|
| - stringstream stream;
|
| -
|
| - stream << n;
|
| - string result;
|
| - stream >> result;
|
| -
|
| - return result;
|
| -}
|
| -
|
| -string SimpleItoa(int n) {
|
| - return GenericSimpleItoa(n);
|
| -}
|
| -
|
| -string SimpleItoa(uint64 n) {
|
| - return GenericSimpleItoa(n);
|
| -}
|
| -
|
| -void StripString(string* s, const char* remove, char replacewith) {
|
| - const char* str_start = s->c_str();
|
| - const char* str = str_start;
|
| - for (str = strpbrk(str, remove);
|
| - str != NULL;
|
| - str = strpbrk(str + 1, remove)) {
|
| - (*s)[str - str_start] = replacewith;
|
| - }
|
| -}
|
| -
|
| -bool TryStripPrefixString(const string& in, const string& prefix, string* out) {
|
| - assert(out);
|
| - const bool has_prefix = in.compare(0, prefix.length(), prefix) == 0;
|
| - out->assign(has_prefix ? in.substr(prefix.length()) : in);
|
| -
|
| - return has_prefix;
|
| -}
|
| -
|
| -bool HasSuffixString(const string& s, const string& suffix) {
|
| - if (s.length() < suffix.length()) {
|
| - return false;
|
| - }
|
| - return s.compare(s.length() - suffix.length(), suffix.length(), suffix) == 0;
|
| -}
|
| -
|
| -template <typename T>
|
| -void GenericAtoi(const string& s, T* out) {
|
| - stringstream stream;
|
| - stream << s;
|
| - stream >> *out;
|
| -}
|
| -
|
| -void safe_strto32(const string& s, int32 *n) {
|
| - GenericAtoi(s, n);
|
| -}
|
| -
|
| -void safe_strtou64(const string& s, uint64 *n) {
|
| - GenericAtoi(s, n);
|
| -}
|
| -
|
| -void strrmm(string* s, const string& chars) {
|
| - for (string::iterator it = s->begin(); it != s->end(); ) {
|
| - const char current_char = *it;
|
| - if (chars.find(current_char) != string::npos) {
|
| - it = s->erase(it);
|
| - } else {
|
| - ++it;
|
| - }
|
| - }
|
| -}
|
| -
|
| -// StringHolder class
|
| -
|
| -StringHolder::StringHolder(const string& s) :
|
| - string_(&s),
|
| - cstring_(NULL),
|
| - len_(s.size())
|
| -{}
|
| -
|
| -StringHolder::StringHolder(const char* s) :
|
| - string_(NULL),
|
| - cstring_(s),
|
| - len_(std::strlen(s))
|
| -{}
|
| -
|
| -StringHolder::StringHolder(uint64 n) :
|
| - converted_string_(SimpleItoa(n)),
|
| - string_(&converted_string_),
|
| - cstring_(NULL),
|
| - len_(converted_string_.length())
|
| -{}
|
| -
|
| -StringHolder::~StringHolder() {}
|
| -
|
| -// StrCat
|
| -
|
| -// Implements s += sh; (s: string, sh: StringHolder)
|
| -string& operator+=(string& lhs, const StringHolder& rhs) {
|
| - const string* const s = rhs.GetString();
|
| - if (s) {
|
| - lhs += *s;
|
| - } else {
|
| - const char* const cs = rhs.GetCString();
|
| - if (cs)
|
| - lhs.append(cs, rhs.Length());
|
| - }
|
| - return lhs;
|
| -}
|
| -
|
| -string StrCat(const StringHolder& s1, const StringHolder& s2) {
|
| - string result;
|
| - result.reserve(s1.Length() + s2.Length() + 1);
|
| -
|
| - result += s1;
|
| - result += s2;
|
| -
|
| - return result;
|
| -}
|
| -
|
| -string StrCat(const StringHolder& s1, const StringHolder& s2,
|
| - const StringHolder& s3) {
|
| - string result;
|
| - result.reserve(s1.Length() + s2.Length() + s3.Length() + 1);
|
| -
|
| - result += s1;
|
| - result += s2;
|
| - result += s3;
|
| -
|
| - return result;
|
| -}
|
| -
|
| -string StrCat(const StringHolder& s1, const StringHolder& s2,
|
| - const StringHolder& s3, const StringHolder& s4) {
|
| - string result;
|
| - result.reserve(s1.Length() + s2.Length() + s3.Length() + s4.Length() + 1);
|
| -
|
| - result += s1;
|
| - result += s2;
|
| - result += s3;
|
| - result += s4;
|
| -
|
| - return result;
|
| -}
|
| -
|
| -string StrCat(const StringHolder& s1, const StringHolder& s2,
|
| - const StringHolder& s3, const StringHolder& s4,
|
| - const StringHolder& s5) {
|
| - string result;
|
| - result.reserve(s1.Length() + s2.Length() + s3.Length() + s4.Length() +
|
| - s5.Length() + 1);
|
| - result += s1;
|
| - result += s2;
|
| - result += s3;
|
| - result += s4;
|
| - result += s5;
|
| -
|
| - return result;
|
| -}
|
| -
|
| -string StrCat(const StringHolder& s1, const StringHolder& s2,
|
| - const StringHolder& s3, const StringHolder& s4,
|
| - const StringHolder& s5, const StringHolder& s6) {
|
| - string result;
|
| - result.reserve(s1.Length() + s2.Length() + s3.Length() + s4.Length() +
|
| - s5.Length() + s6.Length() + 1);
|
| - result += s1;
|
| - result += s2;
|
| - result += s3;
|
| - result += s4;
|
| - result += s5;
|
| - result += s6;
|
| -
|
| - return result;
|
| -}
|
| -
|
| -string StrCat(const StringHolder& s1, const StringHolder& s2,
|
| - const StringHolder& s3, const StringHolder& s4,
|
| - const StringHolder& s5, const StringHolder& s6,
|
| - const StringHolder& s7) {
|
| - string result;
|
| - result.reserve(s1.Length() + s2.Length() + s3.Length() + s4.Length() +
|
| - s5.Length() + s6.Length() + s7.Length() + 1);
|
| - result += s1;
|
| - result += s2;
|
| - result += s3;
|
| - result += s4;
|
| - result += s5;
|
| - result += s6;
|
| - result += s7;
|
| -
|
| - return result;
|
| -}
|
| -
|
| -string StrCat(const StringHolder& s1, const StringHolder& s2,
|
| - const StringHolder& s3, const StringHolder& s4,
|
| - const StringHolder& s5, const StringHolder& s6,
|
| - const StringHolder& s7, const StringHolder& s8,
|
| - const StringHolder& s9, const StringHolder& s10,
|
| - const StringHolder& s11) {
|
| - string result;
|
| - result.reserve(s1.Length() + s2.Length() + s3.Length() + s4.Length() +
|
| - s5.Length() + s6.Length() + s7.Length() + s8.Length() +
|
| - s9.Length() + s10.Length() + s11.Length());
|
| - result += s1;
|
| - result += s2;
|
| - result += s3;
|
| - result += s4;
|
| - result += s5;
|
| - result += s6;
|
| - result += s7;
|
| - result += s8;
|
| - result += s9;
|
| - result += s10;
|
| - result += s11;
|
| -
|
| - return result;
|
| -}
|
| -
|
| -// StrAppend
|
| -
|
| -void StrAppend(string* dest, const StringHolder& s1) {
|
| - assert(dest);
|
| -
|
| - dest->reserve(dest->length() + s1.Length() + 1);
|
| - *dest += s1;
|
| -}
|
| -
|
| -void StrAppend(string* dest, const StringHolder& s1, const StringHolder& s2) {
|
| - assert(dest);
|
| -
|
| - dest->reserve(dest->length() + s1.Length() + s2.Length() + 1);
|
| - *dest += s1;
|
| - *dest += s2;
|
| -}
|
| -
|
| -} // namespace phonenumbers
|
| -} // namespace i18n
|
|
|