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

Side by Side Diff: base/strings/string_util.cc

Issue 80813002: Cleanup: Remove many unused wstring string_utils. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 1 month 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
« no previous file with comments | « base/strings/string_util.h ('k') | base/strings/string_util_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/strings/string_util.h" 5 #include "base/strings/string_util.h"
6 6
7 #include <ctype.h> 7 #include <ctype.h>
8 #include <errno.h> 8 #include <errno.h>
9 #include <math.h> 9 #include <math.h>
10 #include <stdarg.h> 10 #include <stdarg.h>
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 // Trim the whitespace. 186 // Trim the whitespace.
187 *output = 187 *output =
188 input.substr(first_good_char, last_good_char - first_good_char + 1); 188 input.substr(first_good_char, last_good_char - first_good_char + 1);
189 189
190 // Return where we trimmed from. 190 // Return where we trimmed from.
191 return static_cast<TrimPositions>( 191 return static_cast<TrimPositions>(
192 ((first_good_char == 0) ? TRIM_NONE : TRIM_LEADING) | 192 ((first_good_char == 0) ? TRIM_NONE : TRIM_LEADING) |
193 ((last_good_char == last_char) ? TRIM_NONE : TRIM_TRAILING)); 193 ((last_good_char == last_char) ? TRIM_NONE : TRIM_TRAILING));
194 } 194 }
195 195
196 bool TrimString(const std::wstring& input,
197 const wchar_t trim_chars[],
198 std::wstring* output) {
199 return TrimStringT(input, trim_chars, TRIM_ALL, output) != TRIM_NONE;
200 }
201
202 #if !defined(WCHAR_T_IS_UTF16)
203 bool TrimString(const string16& input, 196 bool TrimString(const string16& input,
204 const char16 trim_chars[], 197 const char16 trim_chars[],
205 string16* output) { 198 string16* output) {
206 return TrimStringT(input, trim_chars, TRIM_ALL, output) != TRIM_NONE; 199 return TrimStringT(input, trim_chars, TRIM_ALL, output) != TRIM_NONE;
207 } 200 }
208 #endif
209 201
210 bool TrimString(const std::string& input, 202 bool TrimString(const std::string& input,
211 const char trim_chars[], 203 const char trim_chars[],
212 std::string* output) { 204 std::string* output) {
213 return TrimStringT(input, trim_chars, TRIM_ALL, output) != TRIM_NONE; 205 return TrimStringT(input, trim_chars, TRIM_ALL, output) != TRIM_NONE;
214 } 206 }
215 207
216 void TruncateUTF8ToByteSize(const std::string& input, 208 void TruncateUTF8ToByteSize(const std::string& input,
217 const size_t byte_size, 209 const size_t byte_size,
218 std::string* output) { 210 std::string* output) {
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 296
305 if (in_whitespace && !already_trimmed) { 297 if (in_whitespace && !already_trimmed) {
306 // Any trailing whitespace is eliminated. 298 // Any trailing whitespace is eliminated.
307 --chars_written; 299 --chars_written;
308 } 300 }
309 301
310 result.resize(chars_written); 302 result.resize(chars_written);
311 return result; 303 return result;
312 } 304 }
313 305
314 std::wstring CollapseWhitespace(const std::wstring& text,
315 bool trim_sequences_with_line_breaks) {
316 return CollapseWhitespaceT(text, trim_sequences_with_line_breaks);
317 }
318
319 #if !defined(WCHAR_T_IS_UTF16)
320 string16 CollapseWhitespace(const string16& text, 306 string16 CollapseWhitespace(const string16& text,
321 bool trim_sequences_with_line_breaks) { 307 bool trim_sequences_with_line_breaks) {
322 return CollapseWhitespaceT(text, trim_sequences_with_line_breaks); 308 return CollapseWhitespaceT(text, trim_sequences_with_line_breaks);
323 } 309 }
324 #endif
325 310
326 std::string CollapseWhitespaceASCII(const std::string& text, 311 std::string CollapseWhitespaceASCII(const std::string& text,
327 bool trim_sequences_with_line_breaks) { 312 bool trim_sequences_with_line_breaks) {
328 return CollapseWhitespaceT(text, trim_sequences_with_line_breaks); 313 return CollapseWhitespaceT(text, trim_sequences_with_line_breaks);
329 } 314 }
330 315
331 bool ContainsOnlyWhitespaceASCII(const std::string& str) { 316 bool ContainsOnlyWhitespaceASCII(const std::string& str) {
332 for (std::string::const_iterator i(str.begin()); i != str.end(); ++i) { 317 for (std::string::const_iterator i(str.begin()); i != str.end(); ++i) {
333 if (!IsAsciiWhitespace(*i)) 318 if (!IsAsciiWhitespace(*i))
334 return false; 319 return false;
335 } 320 }
336 return true; 321 return true;
337 } 322 }
338 323
339 bool ContainsOnlyWhitespace(const string16& str) { 324 bool ContainsOnlyWhitespace(const string16& str) {
340 return str.find_first_not_of(kWhitespaceUTF16) == string16::npos; 325 return str.find_first_not_of(kWhitespaceUTF16) == string16::npos;
341 } 326 }
342 327
343 template<typename STR> 328 template<typename STR>
344 static bool ContainsOnlyCharsT(const STR& input, const STR& characters) { 329 static bool ContainsOnlyCharsT(const STR& input, const STR& characters) {
345 for (typename STR::const_iterator iter = input.begin(); 330 for (typename STR::const_iterator iter = input.begin();
346 iter != input.end(); ++iter) { 331 iter != input.end(); ++iter) {
347 if (characters.find(*iter) == STR::npos) 332 if (characters.find(*iter) == STR::npos)
348 return false; 333 return false;
349 } 334 }
350 return true; 335 return true;
351 } 336 }
352 337
353 bool ContainsOnlyChars(const std::wstring& input,
354 const std::wstring& characters) {
355 return ContainsOnlyCharsT(input, characters);
356 }
357
358 #if !defined(WCHAR_T_IS_UTF16)
359 bool ContainsOnlyChars(const string16& input, const string16& characters) { 338 bool ContainsOnlyChars(const string16& input, const string16& characters) {
360 return ContainsOnlyCharsT(input, characters); 339 return ContainsOnlyCharsT(input, characters);
361 } 340 }
362 #endif
363 341
364 bool ContainsOnlyChars(const std::string& input, 342 bool ContainsOnlyChars(const std::string& input,
365 const std::string& characters) { 343 const std::string& characters) {
366 return ContainsOnlyCharsT(input, characters); 344 return ContainsOnlyCharsT(input, characters);
367 } 345 }
368 346
347 #if !defined(WCHAR_T_IS_UTF16)
348 bool IsStringASCII(const std::wstring& str);
349 #endif
350
369 std::string WideToASCII(const std::wstring& wide) { 351 std::string WideToASCII(const std::wstring& wide) {
370 DCHECK(IsStringASCII(wide)) << wide; 352 DCHECK(IsStringASCII(wide)) << wide;
371 return std::string(wide.begin(), wide.end()); 353 return std::string(wide.begin(), wide.end());
372 } 354 }
373 355
374 std::string UTF16ToASCII(const string16& utf16) { 356 std::string UTF16ToASCII(const string16& utf16) {
375 DCHECK(IsStringASCII(utf16)) << utf16; 357 DCHECK(IsStringASCII(utf16)) << utf16;
376 return std::string(utf16.begin(), utf16.end()); 358 return std::string(utf16.begin(), utf16.end());
377 } 359 }
378 360
379 // Latin1 is just the low range of Unicode, so we can copy directly to convert.
380 bool WideToLatin1(const std::wstring& wide, std::string* latin1) {
381 std::string output;
382 output.resize(wide.size());
383 latin1->clear();
384 for (size_t i = 0; i < wide.size(); i++) {
385 if (wide[i] > 255)
386 return false;
387 output[i] = static_cast<char>(wide[i]);
388 }
389 latin1->swap(output);
390 return true;
391 }
392
393 template<class STR> 361 template<class STR>
394 static bool DoIsStringASCII(const STR& str) { 362 static bool DoIsStringASCII(const STR& str) {
395 for (size_t i = 0; i < str.length(); i++) { 363 for (size_t i = 0; i < str.length(); i++) {
396 typename ToUnsigned<typename STR::value_type>::Unsigned c = str[i]; 364 typename ToUnsigned<typename STR::value_type>::Unsigned c = str[i];
397 if (c > 0x7F) 365 if (c > 0x7F)
398 return false; 366 return false;
399 } 367 }
400 return true; 368 return true;
401 } 369 }
402 370
371 #if !defined(WCHAR_T_IS_UTF16)
403 bool IsStringASCII(const std::wstring& str) { 372 bool IsStringASCII(const std::wstring& str) {
404 return DoIsStringASCII(str); 373 return DoIsStringASCII(str);
405 } 374 }
406
407 #if !defined(WCHAR_T_IS_UTF16)
408 bool IsStringASCII(const string16& str) {
409 return DoIsStringASCII(str);
410 }
411 #endif 375 #endif
412 376
377 bool IsStringASCII(const string16& str) {
378 return DoIsStringASCII(str);
379 }
380
413 bool IsStringASCII(const base::StringPiece& str) { 381 bool IsStringASCII(const base::StringPiece& str) {
414 return DoIsStringASCII(str); 382 return DoIsStringASCII(str);
415 } 383 }
416 384
417 bool IsStringUTF8(const std::string& str) { 385 bool IsStringUTF8(const std::string& str) {
418 const char *src = str.data(); 386 const char *src = str.data();
419 int32 src_len = static_cast<int32>(str.length()); 387 int32 src_len = static_cast<int32>(str.length());
420 int32 char_index = 0; 388 int32 char_index = 0;
421 389
422 while (char_index < src_len) { 390 while (char_index < src_len) {
(...skipping 14 matching lines...) Expand all
437 return false; 405 return false;
438 } 406 }
439 return *b == 0; 407 return *b == 0;
440 } 408 }
441 409
442 // Front-ends for LowerCaseEqualsASCII. 410 // Front-ends for LowerCaseEqualsASCII.
443 bool LowerCaseEqualsASCII(const std::string& a, const char* b) { 411 bool LowerCaseEqualsASCII(const std::string& a, const char* b) {
444 return DoLowerCaseEqualsASCII(a.begin(), a.end(), b); 412 return DoLowerCaseEqualsASCII(a.begin(), a.end(), b);
445 } 413 }
446 414
447 bool LowerCaseEqualsASCII(const std::wstring& a, const char* b) { 415 bool LowerCaseEqualsASCII(const string16& a, const char* b) {
448 return DoLowerCaseEqualsASCII(a.begin(), a.end(), b); 416 return DoLowerCaseEqualsASCII(a.begin(), a.end(), b);
449 } 417 }
450 418
451 #if !defined(WCHAR_T_IS_UTF16)
452 bool LowerCaseEqualsASCII(const string16& a, const char* b) {
453 return DoLowerCaseEqualsASCII(a.begin(), a.end(), b);
454 }
455 #endif
456
457 bool LowerCaseEqualsASCII(std::string::const_iterator a_begin, 419 bool LowerCaseEqualsASCII(std::string::const_iterator a_begin,
458 std::string::const_iterator a_end, 420 std::string::const_iterator a_end,
459 const char* b) { 421 const char* b) {
460 return DoLowerCaseEqualsASCII(a_begin, a_end, b); 422 return DoLowerCaseEqualsASCII(a_begin, a_end, b);
461 } 423 }
462 424
463 bool LowerCaseEqualsASCII(std::wstring::const_iterator a_begin,
464 std::wstring::const_iterator a_end,
465 const char* b) {
466 return DoLowerCaseEqualsASCII(a_begin, a_end, b);
467 }
468
469 #if !defined(WCHAR_T_IS_UTF16)
470 bool LowerCaseEqualsASCII(string16::const_iterator a_begin, 425 bool LowerCaseEqualsASCII(string16::const_iterator a_begin,
471 string16::const_iterator a_end, 426 string16::const_iterator a_end,
472 const char* b) { 427 const char* b) {
473 return DoLowerCaseEqualsASCII(a_begin, a_end, b); 428 return DoLowerCaseEqualsASCII(a_begin, a_end, b);
474 } 429 }
475 #endif
476 430
477 // TODO(port): Resolve wchar_t/iterator issues that require OS_ANDROID here. 431 // TODO(port): Resolve wchar_t/iterator issues that require OS_ANDROID here.
478 #if !defined(OS_ANDROID) 432 #if !defined(OS_ANDROID)
479 bool LowerCaseEqualsASCII(const char* a_begin, 433 bool LowerCaseEqualsASCII(const char* a_begin,
480 const char* a_end, 434 const char* a_end,
481 const char* b) { 435 const char* b) {
482 return DoLowerCaseEqualsASCII(a_begin, a_end, b); 436 return DoLowerCaseEqualsASCII(a_begin, a_end, b);
483 } 437 }
484 438
485 bool LowerCaseEqualsASCII(const wchar_t* a_begin,
486 const wchar_t* a_end,
487 const char* b) {
488 return DoLowerCaseEqualsASCII(a_begin, a_end, b);
489 }
490
491 #if !defined(WCHAR_T_IS_UTF16)
492 bool LowerCaseEqualsASCII(const char16* a_begin, 439 bool LowerCaseEqualsASCII(const char16* a_begin,
493 const char16* a_end, 440 const char16* a_end,
494 const char* b) { 441 const char* b) {
495 return DoLowerCaseEqualsASCII(a_begin, a_end, b); 442 return DoLowerCaseEqualsASCII(a_begin, a_end, b);
496 } 443 }
497 #endif
498 444
499 #endif // !defined(OS_ANDROID) 445 #endif // !defined(OS_ANDROID)
500 446
501 bool EqualsASCII(const string16& a, const base::StringPiece& b) { 447 bool EqualsASCII(const string16& a, const base::StringPiece& b) {
502 if (a.length() != b.length()) 448 if (a.length() != b.length())
503 return false; 449 return false;
504 return std::equal(b.begin(), b.end(), a.begin()); 450 return std::equal(b.begin(), b.end(), a.begin());
505 } 451 }
506 452
507 bool StartsWithASCII(const std::string& str, 453 bool StartsWithASCII(const std::string& str,
(...skipping 10 matching lines...) Expand all
518 if (case_sensitive) { 464 if (case_sensitive) {
519 return str.compare(0, search.length(), search) == 0; 465 return str.compare(0, search.length(), search) == 0;
520 } else { 466 } else {
521 if (search.size() > str.size()) 467 if (search.size() > str.size())
522 return false; 468 return false;
523 return std::equal(search.begin(), search.end(), str.begin(), 469 return std::equal(search.begin(), search.end(), str.begin(),
524 base::CaseInsensitiveCompare<typename STR::value_type>()); 470 base::CaseInsensitiveCompare<typename STR::value_type>());
525 } 471 }
526 } 472 }
527 473
528 bool StartsWith(const std::wstring& str, const std::wstring& search, 474 bool StartsWith(const string16& str, const string16& search,
529 bool case_sensitive) { 475 bool case_sensitive) {
530 return StartsWithT(str, search, case_sensitive); 476 return StartsWithT(str, search, case_sensitive);
531 } 477 }
532 478
533 #if !defined(WCHAR_T_IS_UTF16)
534 bool StartsWith(const string16& str, const string16& search,
535 bool case_sensitive) {
536 return StartsWithT(str, search, case_sensitive);
537 }
538 #endif
539
540 template <typename STR> 479 template <typename STR>
541 bool EndsWithT(const STR& str, const STR& search, bool case_sensitive) { 480 bool EndsWithT(const STR& str, const STR& search, bool case_sensitive) {
542 typename STR::size_type str_length = str.length(); 481 typename STR::size_type str_length = str.length();
543 typename STR::size_type search_length = search.length(); 482 typename STR::size_type search_length = search.length();
544 if (search_length > str_length) 483 if (search_length > str_length)
545 return false; 484 return false;
546 if (case_sensitive) { 485 if (case_sensitive) {
547 return str.compare(str_length - search_length, search_length, search) == 0; 486 return str.compare(str_length - search_length, search_length, search) == 0;
548 } else { 487 } else {
549 return std::equal(search.begin(), search.end(), 488 return std::equal(search.begin(), search.end(),
550 str.begin() + (str_length - search_length), 489 str.begin() + (str_length - search_length),
551 base::CaseInsensitiveCompare<typename STR::value_type>()); 490 base::CaseInsensitiveCompare<typename STR::value_type>());
552 } 491 }
553 } 492 }
554 493
555 bool EndsWith(const std::string& str, const std::string& search, 494 bool EndsWith(const std::string& str, const std::string& search,
556 bool case_sensitive) { 495 bool case_sensitive) {
557 return EndsWithT(str, search, case_sensitive); 496 return EndsWithT(str, search, case_sensitive);
558 } 497 }
559 498
560 bool EndsWith(const std::wstring& str, const std::wstring& search, 499 bool EndsWith(const string16& str, const string16& search,
561 bool case_sensitive) { 500 bool case_sensitive) {
562 return EndsWithT(str, search, case_sensitive); 501 return EndsWithT(str, search, case_sensitive);
563 } 502 }
564 503
565 #if !defined(WCHAR_T_IS_UTF16)
566 bool EndsWith(const string16& str, const string16& search,
567 bool case_sensitive) {
568 return EndsWithT(str, search, case_sensitive);
569 }
570 #endif
571
572 static const char* const kByteStringsUnlocalized[] = { 504 static const char* const kByteStringsUnlocalized[] = {
573 " B", 505 " B",
574 " kB", 506 " kB",
575 " MB", 507 " MB",
576 " GB", 508 " GB",
577 " TB", 509 " TB",
578 " PB" 510 " PB"
579 }; 511 };
580 512
581 string16 FormatBytesUnlocalized(int64 bytes) { 513 string16 FormatBytesUnlocalized(int64 bytes) {
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
667 break; 599 break;
668 } else { 600 } else {
669 tokens->push_back(str.substr(start, end - start)); 601 tokens->push_back(str.substr(start, end - start));
670 start = str.find_first_not_of(delimiters, end + 1); 602 start = str.find_first_not_of(delimiters, end + 1);
671 } 603 }
672 } 604 }
673 605
674 return tokens->size(); 606 return tokens->size();
675 } 607 }
676 608
677 size_t Tokenize(const std::wstring& str,
678 const std::wstring& delimiters,
679 std::vector<std::wstring>* tokens) {
680 return TokenizeT(str, delimiters, tokens);
681 }
682
683 #if !defined(WCHAR_T_IS_UTF16)
684 size_t Tokenize(const string16& str, 609 size_t Tokenize(const string16& str,
685 const string16& delimiters, 610 const string16& delimiters,
686 std::vector<string16>* tokens) { 611 std::vector<string16>* tokens) {
687 return TokenizeT(str, delimiters, tokens); 612 return TokenizeT(str, delimiters, tokens);
688 } 613 }
689 #endif
690 614
691 size_t Tokenize(const std::string& str, 615 size_t Tokenize(const std::string& str,
692 const std::string& delimiters, 616 const std::string& delimiters,
693 std::vector<std::string>* tokens) { 617 std::vector<std::string>* tokens) {
694 return TokenizeT(str, delimiters, tokens); 618 return TokenizeT(str, delimiters, tokens);
695 } 619 }
696 620
697 size_t Tokenize(const base::StringPiece& str, 621 size_t Tokenize(const base::StringPiece& str,
698 const base::StringPiece& delimiters, 622 const base::StringPiece& delimiters,
699 std::vector<base::StringPiece>* tokens) { 623 std::vector<base::StringPiece>* tokens) {
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
810 } 734 }
811 735
812 string16 ReplaceStringPlaceholders(const string16& format_string, 736 string16 ReplaceStringPlaceholders(const string16& format_string,
813 const string16& a, 737 const string16& a,
814 size_t* offset) { 738 size_t* offset) {
815 std::vector<size_t> offsets; 739 std::vector<size_t> offsets;
816 std::vector<string16> subst; 740 std::vector<string16> subst;
817 subst.push_back(a); 741 subst.push_back(a);
818 string16 result = ReplaceStringPlaceholders(format_string, subst, &offsets); 742 string16 result = ReplaceStringPlaceholders(format_string, subst, &offsets);
819 743
820 DCHECK(offsets.size() == 1); 744 DCHECK_EQ(1U, offsets.size());
821 if (offset) { 745 if (offset)
822 *offset = offsets[0]; 746 *offset = offsets[0];
823 }
824 return result; 747 return result;
825 } 748 }
826 749
827 static bool IsWildcard(base_icu::UChar32 character) { 750 static bool IsWildcard(base_icu::UChar32 character) {
828 return character == '*' || character == '?'; 751 return character == '*' || character == '?';
829 } 752 }
830 753
831 // Move the strings pointers to the point where they start to differ. 754 // Move the strings pointers to the point where they start to differ.
832 template <typename CHAR, typename NEXT> 755 template <typename CHAR, typename NEXT>
833 static void EatSameChars(const CHAR** pattern, const CHAR* pattern_end, 756 static void EatSameChars(const CHAR** pattern, const CHAR* pattern_end,
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
1002 } 925 }
1003 926
1004 } // namespace 927 } // namespace
1005 928
1006 size_t base::strlcpy(char* dst, const char* src, size_t dst_size) { 929 size_t base::strlcpy(char* dst, const char* src, size_t dst_size) {
1007 return lcpyT<char>(dst, src, dst_size); 930 return lcpyT<char>(dst, src, dst_size);
1008 } 931 }
1009 size_t base::wcslcpy(wchar_t* dst, const wchar_t* src, size_t dst_size) { 932 size_t base::wcslcpy(wchar_t* dst, const wchar_t* src, size_t dst_size) {
1010 return lcpyT<wchar_t>(dst, src, dst_size); 933 return lcpyT<wchar_t>(dst, src, dst_size);
1011 } 934 }
OLDNEW
« no previous file with comments | « base/strings/string_util.h ('k') | base/strings/string_util_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698