Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(43)

Side by Side Diff: third_party/libphonenumber/cpp/src/stringutil.cc

Issue 6930013: Re-committing http://codereview.chromium.org/6803005/ after fixing multi-dll build: (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 9 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 // Copyright (C) 2011 Google Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14
15 // Author: Philippe Liard
16
17 #include <cassert>
18 #include <cstring>
19 #include <sstream>
20
21 #include "stringutil.h"
22
23 namespace i18n {
24 namespace phonenumbers {
25
26 using std::stringstream;
27
28 string operator+(const string& s, int n) {
29 stringstream stream;
30
31 stream << s << n;
32 string result;
33 stream >> result;
34
35 return result;
36 }
37
38 template <typename T>
39 string GenericSimpleItoa(const T& n) {
40 stringstream stream;
41
42 stream << n;
43 string result;
44 stream >> result;
45
46 return result;
47 }
48
49 string SimpleItoa(int n) {
50 return GenericSimpleItoa(n);
51 }
52
53 string SimpleItoa(uint64 n) {
54 return GenericSimpleItoa(n);
55 }
56
57 void StripString(string* s, const char* remove, char replacewith) {
58 const char* str_start = s->c_str();
59 const char* str = str_start;
60 for (str = strpbrk(str, remove);
61 str != NULL;
62 str = strpbrk(str + 1, remove)) {
63 (*s)[str - str_start] = replacewith;
64 }
65 }
66
67 bool TryStripPrefixString(const string& in, const string& prefix, string* out) {
68 assert(out);
69 const bool has_prefix = in.compare(0, prefix.length(), prefix) == 0;
70 out->assign(has_prefix ? in.substr(prefix.length()) : in);
71
72 return has_prefix;
73 }
74
75 bool HasSuffixString(const string& s, const string& suffix) {
76 if (s.length() < suffix.length()) {
77 return false;
78 }
79 return s.compare(s.length() - suffix.length(), suffix.length(), suffix) == 0;
80 }
81
82 template <typename T>
83 void GenericAtoi(const string& s, T* out) {
84 stringstream stream;
85 stream << s;
86 stream >> *out;
87 }
88
89 void safe_strto32(const string& s, int32 *n) {
90 GenericAtoi(s, n);
91 }
92
93 void safe_strtou64(const string& s, uint64 *n) {
94 GenericAtoi(s, n);
95 }
96
97 void strrmm(string* s, const string& chars) {
98 for (string::iterator it = s->begin(); it != s->end(); ) {
99 const char current_char = *it;
100 if (chars.find(current_char) != string::npos) {
101 it = s->erase(it);
102 } else {
103 ++it;
104 }
105 }
106 }
107
108 // StringHolder class
109
110 StringHolder::StringHolder(const string& s) :
111 string_(&s),
112 cstring_(NULL),
113 len_(s.size())
114 {}
115
116 StringHolder::StringHolder(const char* s) :
117 string_(NULL),
118 cstring_(s),
119 len_(std::strlen(s))
120 {}
121
122 StringHolder::StringHolder(uint64 n) :
123 converted_string_(SimpleItoa(n)),
124 string_(&converted_string_),
125 cstring_(NULL),
126 len_(converted_string_.length())
127 {}
128
129 StringHolder::~StringHolder() {}
130
131 // StrCat
132
133 // Implements s += sh; (s: string, sh: StringHolder)
134 string& operator+=(string& lhs, const StringHolder& rhs) {
135 const string* const s = rhs.GetString();
136 if (s) {
137 lhs += *s;
138 } else {
139 const char* const cs = rhs.GetCString();
140 if (cs)
141 lhs.append(cs, rhs.Length());
142 }
143 return lhs;
144 }
145
146 string StrCat(const StringHolder& s1, const StringHolder& s2) {
147 string result;
148 result.reserve(s1.Length() + s2.Length() + 1);
149
150 result += s1;
151 result += s2;
152
153 return result;
154 }
155
156 string StrCat(const StringHolder& s1, const StringHolder& s2,
157 const StringHolder& s3) {
158 string result;
159 result.reserve(s1.Length() + s2.Length() + s3.Length() + 1);
160
161 result += s1;
162 result += s2;
163 result += s3;
164
165 return result;
166 }
167
168 string StrCat(const StringHolder& s1, const StringHolder& s2,
169 const StringHolder& s3, const StringHolder& s4) {
170 string result;
171 result.reserve(s1.Length() + s2.Length() + s3.Length() + s4.Length() + 1);
172
173 result += s1;
174 result += s2;
175 result += s3;
176 result += s4;
177
178 return result;
179 }
180
181 string StrCat(const StringHolder& s1, const StringHolder& s2,
182 const StringHolder& s3, const StringHolder& s4,
183 const StringHolder& s5) {
184 string result;
185 result.reserve(s1.Length() + s2.Length() + s3.Length() + s4.Length() +
186 s5.Length() + 1);
187 result += s1;
188 result += s2;
189 result += s3;
190 result += s4;
191 result += s5;
192
193 return result;
194 }
195
196 string StrCat(const StringHolder& s1, const StringHolder& s2,
197 const StringHolder& s3, const StringHolder& s4,
198 const StringHolder& s5, const StringHolder& s6) {
199 string result;
200 result.reserve(s1.Length() + s2.Length() + s3.Length() + s4.Length() +
201 s5.Length() + s6.Length() + 1);
202 result += s1;
203 result += s2;
204 result += s3;
205 result += s4;
206 result += s5;
207 result += s6;
208
209 return result;
210 }
211
212 string StrCat(const StringHolder& s1, const StringHolder& s2,
213 const StringHolder& s3, const StringHolder& s4,
214 const StringHolder& s5, const StringHolder& s6,
215 const StringHolder& s7) {
216 string result;
217 result.reserve(s1.Length() + s2.Length() + s3.Length() + s4.Length() +
218 s5.Length() + s6.Length() + s7.Length() + 1);
219 result += s1;
220 result += s2;
221 result += s3;
222 result += s4;
223 result += s5;
224 result += s6;
225 result += s7;
226
227 return result;
228 }
229
230 string StrCat(const StringHolder& s1, const StringHolder& s2,
231 const StringHolder& s3, const StringHolder& s4,
232 const StringHolder& s5, const StringHolder& s6,
233 const StringHolder& s7, const StringHolder& s8,
234 const StringHolder& s9, const StringHolder& s10,
235 const StringHolder& s11) {
236 string result;
237 result.reserve(s1.Length() + s2.Length() + s3.Length() + s4.Length() +
238 s5.Length() + s6.Length() + s7.Length() + s8.Length() +
239 s9.Length() + s10.Length() + s11.Length());
240 result += s1;
241 result += s2;
242 result += s3;
243 result += s4;
244 result += s5;
245 result += s6;
246 result += s7;
247 result += s8;
248 result += s9;
249 result += s10;
250 result += s11;
251
252 return result;
253 }
254
255 // StrAppend
256
257 void StrAppend(string* dest, const StringHolder& s1) {
258 assert(dest);
259
260 dest->reserve(dest->length() + s1.Length() + 1);
261 *dest += s1;
262 }
263
264 void StrAppend(string* dest, const StringHolder& s1, const StringHolder& s2) {
265 assert(dest);
266
267 dest->reserve(dest->length() + s1.Length() + s2.Length() + 1);
268 *dest += s1;
269 *dest += s2;
270 }
271
272 } // namespace phonenumbers
273 } // namespace i18n
OLDNEW
« no previous file with comments | « third_party/libphonenumber/cpp/src/stringutil.h ('k') | third_party/libphonenumber/cpp/src/stringutil_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698