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

Unified Diff: base/string_util.h

Issue 6725001: Base: First pass at having base.dll: definition of (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 9 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 side-by-side diff with in-line comments
Download patch
Index: base/string_util.h
===================================================================
--- base/string_util.h (revision 78949)
+++ base/string_util.h (working copy)
@@ -13,6 +13,7 @@
#include <string>
#include <vector>
+#include "base/base_api.h"
#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "base/string16.h"
@@ -35,28 +36,30 @@
// Compares the two strings s1 and s2 without regard to case using
// the current locale; returns 0 if they are equal, 1 if s1 > s2, and -1 if
// s2 > s1 according to a lexicographic comparison.
-int strcasecmp(const char* s1, const char* s2);
+BASE_API int strcasecmp(const char* s1, const char* s2);
// Compares up to count characters of s1 and s2 without regard to case using
// the current locale; returns 0 if they are equal, 1 if s1 > s2, and -1 if
// s2 > s1 according to a lexicographic comparison.
-int strncasecmp(const char* s1, const char* s2, size_t count);
+BASE_API int strncasecmp(const char* s1, const char* s2, size_t count);
// Same as strncmp but for char16 strings.
-int strncmp16(const char16* s1, const char16* s2, size_t count);
+BASE_API int strncmp16(const char16* s1, const char16* s2, size_t count);
// Wrapper for vsnprintf that always null-terminates and always returns the
// number of characters that would be in an untruncated formatted
// string, even when truncation occurs.
-int vsnprintf(char* buffer, size_t size, const char* format, va_list arguments)
+BASE_API int vsnprintf(char* buffer, size_t size, const char* format,
+ va_list arguments)
PRINTF_FORMAT(3, 0);
// vswprintf always null-terminates, but when truncation occurs, it will either
// return -1 or the number of characters that would be in an untruncated
// formatted string. The actual return value depends on the underlying
// C library's vswprintf implementation.
-int vswprintf(wchar_t* buffer, size_t size,
- const wchar_t* format, va_list arguments) WPRINTF_FORMAT(3, 0);
+BASE_API int vswprintf(wchar_t* buffer, size_t size,
+ const wchar_t* format, va_list arguments)
+ WPRINTF_FORMAT(3, 0);
// Some of these implementations need to be inlined.
@@ -90,8 +93,8 @@
// long as |dst_size| is not 0. Returns the length of |src| in characters.
// If the return value is >= dst_size, then the output was truncated.
// NOTE: All sizes are in number of characters, NOT in bytes.
-size_t strlcpy(char* dst, const char* src, size_t dst_size);
-size_t wcslcpy(wchar_t* dst, const wchar_t* src, size_t dst_size);
+BASE_API size_t strlcpy(char* dst, const char* src, size_t dst_size);
+BASE_API size_t wcslcpy(wchar_t* dst, const wchar_t* src, size_t dst_size);
// Scan a wprintf format string to determine whether it's portable across a
// variety of systems. This function only checks that the conversion
@@ -114,7 +117,7 @@
// working with wprintf.
//
// This function is intended to be called from base::vswprintf.
-bool IsWprintfFormatPortable(const wchar_t* format);
+BASE_API bool IsWprintfFormatPortable(const wchar_t* format);
// ASCII-specific tolower. The standard library's tolower is locale sensitive,
// so we don't want to use it here.
@@ -165,9 +168,9 @@
// have an empty string to use (e.g. in an error case). These should not be
// used as initializers, function arguments, or return values for functions
// which return by value or outparam.
-const std::string& EmptyString();
-const std::wstring& EmptyWString();
-const string16& EmptyString16();
+BASE_API const std::string& EmptyString();
+BASE_API const std::wstring& EmptyWString();
+BASE_API const string16& EmptyString16();
extern const wchar_t kWhitespaceWide[];
extern const char16 kWhitespaceUTF16[];
@@ -178,33 +181,33 @@
// Removes characters in remove_chars from anywhere in input. Returns true if
// any characters were removed.
// NOTE: Safe to use the same variable for both input and output.
-bool RemoveChars(const std::wstring& input,
- const wchar_t remove_chars[],
- std::wstring* output);
-bool RemoveChars(const string16& input,
- const char16 remove_chars[],
- string16* output);
-bool RemoveChars(const std::string& input,
- const char remove_chars[],
- std::string* output);
+BASE_API bool RemoveChars(const std::wstring& input,
+ const wchar_t remove_chars[],
+ std::wstring* output);
+BASE_API bool RemoveChars(const string16& input,
+ const char16 remove_chars[],
+ string16* output);
+BASE_API bool RemoveChars(const std::string& input,
+ const char remove_chars[],
+ std::string* output);
// Removes characters in trim_chars from the beginning and end of input.
// NOTE: Safe to use the same variable for both input and output.
-bool TrimString(const std::wstring& input,
- const wchar_t trim_chars[],
- std::wstring* output);
-bool TrimString(const string16& input,
- const char16 trim_chars[],
- string16* output);
-bool TrimString(const std::string& input,
- const char trim_chars[],
- std::string* output);
+BASE_API bool TrimString(const std::wstring& input,
+ const wchar_t trim_chars[],
+ std::wstring* output);
+BASE_API bool TrimString(const string16& input,
+ const char16 trim_chars[],
+ string16* output);
+BASE_API bool TrimString(const std::string& input,
+ const char trim_chars[],
+ std::string* output);
// Truncates a string to the nearest UTF-8 character that will leave
// the string less than or equal to the specified byte size.
-void TruncateUTF8ToByteSize(const std::string& input,
- const size_t byte_size,
- std::string* output);
+BASE_API void TruncateUTF8ToByteSize(const std::string& input,
+ const size_t byte_size,
+ std::string* output);
// Trims any whitespace from either end of the input string. Returns where
// whitespace was found.
@@ -219,21 +222,21 @@
TRIM_TRAILING = 1 << 1,
TRIM_ALL = TRIM_LEADING | TRIM_TRAILING,
};
-TrimPositions TrimWhitespace(const std::wstring& input,
- TrimPositions positions,
- std::wstring* output);
-TrimPositions TrimWhitespace(const string16& input,
- TrimPositions positions,
- string16* output);
-TrimPositions TrimWhitespaceASCII(const std::string& input,
- TrimPositions positions,
- std::string* output);
+BASE_API TrimPositions TrimWhitespace(const std::wstring& input,
+ TrimPositions positions,
+ std::wstring* output);
+BASE_API TrimPositions TrimWhitespace(const string16& input,
+ TrimPositions positions,
+ string16* output);
+BASE_API TrimPositions TrimWhitespaceASCII(const std::string& input,
+ TrimPositions positions,
+ std::string* output);
// Deprecated. This function is only for backward compatibility and calls
// TrimWhitespaceASCII().
-TrimPositions TrimWhitespace(const std::string& input,
- TrimPositions positions,
- std::string* output);
+BASE_API TrimPositions TrimWhitespace(const std::string& input,
+ TrimPositions positions,
+ std::string* output);
// Searches for CR or LF characters. Removes all contiguous whitespace
// strings that contain them. This is useful when trying to deal with text
@@ -243,33 +246,35 @@
// (2) If |trim_sequences_with_line_breaks| is true, any other whitespace
// sequences containing a CR or LF are trimmed.
// (3) All other whitespace sequences are converted to single spaces.
-std::wstring CollapseWhitespace(const std::wstring& text,
- bool trim_sequences_with_line_breaks);
-string16 CollapseWhitespace(const string16& text,
- bool trim_sequences_with_line_breaks);
-std::string CollapseWhitespaceASCII(const std::string& text,
- bool trim_sequences_with_line_breaks);
+BASE_API std::wstring CollapseWhitespace(const std::wstring& text,
+ bool trim_sequences_with_line_breaks);
+BASE_API string16 CollapseWhitespace(const string16& text,
+ bool trim_sequences_with_line_breaks);
+BASE_API std::string CollapseWhitespaceASCII(
+ const std::string& text, bool trim_sequences_with_line_breaks);
// Returns true if the passed string is empty or contains only white-space
// characters.
-bool ContainsOnlyWhitespaceASCII(const std::string& str);
-bool ContainsOnlyWhitespace(const string16& str);
+BASE_API bool ContainsOnlyWhitespaceASCII(const std::string& str);
+BASE_API bool ContainsOnlyWhitespace(const string16& str);
// Returns true if |input| is empty or contains only characters found in
// |characters|.
-bool ContainsOnlyChars(const std::wstring& input,
- const std::wstring& characters);
-bool ContainsOnlyChars(const string16& input, const string16& characters);
-bool ContainsOnlyChars(const std::string& input, const std::string& characters);
+BASE_API bool ContainsOnlyChars(const std::wstring& input,
+ const std::wstring& characters);
+BASE_API bool ContainsOnlyChars(const string16& input,
+ const string16& characters);
+BASE_API bool ContainsOnlyChars(const std::string& input,
+ const std::string& characters);
// Converts to 7-bit ASCII by truncating. The result must be known to be ASCII
// beforehand.
-std::string WideToASCII(const std::wstring& wide);
-std::string UTF16ToASCII(const string16& utf16);
+BASE_API std::string WideToASCII(const std::wstring& wide);
+BASE_API std::string UTF16ToASCII(const string16& utf16);
// Converts the given wide string to the corresponding Latin1. This will fail
// (return false) if any characters are more than 255.
-bool WideToLatin1(const std::wstring& wide, std::string* latin1);
+BASE_API bool WideToLatin1(const std::wstring& wide, std::string* latin1);
// Returns true if the specified string matches the criteria. How can a wide
// string be 8-bit or UTF8? It contains only characters that are < 256 (in the
@@ -282,10 +287,10 @@
// to have the maximum 'discriminating' power from other encodings. If
// there's a use case for just checking the structural validity, we have to
// add a new function for that.
-bool IsStringUTF8(const std::string& str);
-bool IsStringASCII(const std::wstring& str);
-bool IsStringASCII(const base::StringPiece& str);
-bool IsStringASCII(const string16& str);
+BASE_API bool IsStringUTF8(const std::string& str);
+BASE_API bool IsStringASCII(const std::wstring& str);
+BASE_API bool IsStringASCII(const base::StringPiece& str);
+BASE_API bool IsStringASCII(const string16& str);
// Converts the elements of the given string. This version uses a pointer to
// clearly differentiate it from the non-pointer variant.
@@ -319,55 +324,55 @@
// string. This is useful for doing checking if an input string matches some
// token, and it is optimized to avoid intermediate string copies. This API is
// borrowed from the equivalent APIs in Mozilla.
-bool LowerCaseEqualsASCII(const std::string& a, const char* b);
-bool LowerCaseEqualsASCII(const std::wstring& a, const char* b);
-bool LowerCaseEqualsASCII(const string16& a, const char* b);
+BASE_API bool LowerCaseEqualsASCII(const std::string& a, const char* b);
+BASE_API bool LowerCaseEqualsASCII(const std::wstring& a, const char* b);
+BASE_API bool LowerCaseEqualsASCII(const string16& a, const char* b);
// Same thing, but with string iterators instead.
-bool LowerCaseEqualsASCII(std::string::const_iterator a_begin,
- std::string::const_iterator a_end,
- const char* b);
-bool LowerCaseEqualsASCII(std::wstring::const_iterator a_begin,
- std::wstring::const_iterator a_end,
- const char* b);
-bool LowerCaseEqualsASCII(string16::const_iterator a_begin,
- string16::const_iterator a_end,
- const char* b);
-bool LowerCaseEqualsASCII(const char* a_begin,
- const char* a_end,
- const char* b);
-bool LowerCaseEqualsASCII(const wchar_t* a_begin,
- const wchar_t* a_end,
- const char* b);
-bool LowerCaseEqualsASCII(const char16* a_begin,
- const char16* a_end,
- const char* b);
+BASE_API bool LowerCaseEqualsASCII(std::string::const_iterator a_begin,
+ std::string::const_iterator a_end,
+ const char* b);
+BASE_API bool LowerCaseEqualsASCII(std::wstring::const_iterator a_begin,
+ std::wstring::const_iterator a_end,
+ const char* b);
+BASE_API bool LowerCaseEqualsASCII(string16::const_iterator a_begin,
+ string16::const_iterator a_end,
+ const char* b);
+BASE_API bool LowerCaseEqualsASCII(const char* a_begin,
+ const char* a_end,
+ const char* b);
+BASE_API bool LowerCaseEqualsASCII(const wchar_t* a_begin,
+ const wchar_t* a_end,
+ const char* b);
+BASE_API bool LowerCaseEqualsASCII(const char16* a_begin,
+ const char16* a_end,
+ const char* b);
// Performs a case-sensitive string compare. The behavior is undefined if both
// strings are not ASCII.
-bool EqualsASCII(const string16& a, const base::StringPiece& b);
+BASE_API bool EqualsASCII(const string16& a, const base::StringPiece& b);
// Returns true if str starts with search, or false otherwise.
-bool StartsWithASCII(const std::string& str,
- const std::string& search,
- bool case_sensitive);
-bool StartsWith(const std::wstring& str,
- const std::wstring& search,
- bool case_sensitive);
-bool StartsWith(const string16& str,
- const string16& search,
- bool case_sensitive);
+BASE_API bool StartsWithASCII(const std::string& str,
+ const std::string& search,
+ bool case_sensitive);
+BASE_API bool StartsWith(const std::wstring& str,
+ const std::wstring& search,
+ bool case_sensitive);
+BASE_API bool StartsWith(const string16& str,
+ const string16& search,
+ bool case_sensitive);
// Returns true if str ends with search, or false otherwise.
-bool EndsWith(const std::string& str,
- const std::string& search,
- bool case_sensitive);
-bool EndsWith(const std::wstring& str,
- const std::wstring& search,
- bool case_sensitive);
-bool EndsWith(const string16& str,
- const string16& search,
- bool case_sensitive);
+BASE_API bool EndsWith(const std::string& str,
+ const std::string& search,
+ bool case_sensitive);
+BASE_API bool EndsWith(const std::wstring& str,
+ const std::wstring& search,
+ bool case_sensitive);
+BASE_API bool EndsWith(const string16& str,
+ const string16& search,
+ bool case_sensitive);
// Determines the type of ASCII character, independent of locale (the C
@@ -418,33 +423,34 @@
// Return the unit type that is appropriate for displaying the amount of bytes
// passed in.
-DataUnits GetByteDisplayUnits(int64 bytes);
+BASE_API DataUnits GetByteDisplayUnits(int64 bytes);
// Return a byte string in human-readable format, displayed in units appropriate
// specified by 'units', with an optional unit suffix.
// Ex: FormatBytes(512, DATA_UNITS_KIBIBYTE, true) => "0.5 KB"
// Ex: FormatBytes(10*1024, DATA_UNITS_MEBIBYTE, false) => "0.1"
-string16 FormatBytes(int64 bytes, DataUnits units, bool show_units);
+BASE_API string16 FormatBytes(int64 bytes, DataUnits units, bool show_units);
// As above, but with "/s" units.
// Ex: FormatSpeed(512, DATA_UNITS_KIBIBYTE, true) => "0.5 KB/s"
// Ex: FormatSpeed(10*1024, DATA_UNITS_MEBIBYTE, false) => "0.1"
-string16 FormatSpeed(int64 bytes, DataUnits units, bool show_units);
+BASE_API string16 FormatSpeed(int64 bytes, DataUnits units, bool show_units);
// Return a number formated with separators in the user's locale way.
// Ex: FormatNumber(1234567) => 1,234,567
-string16 FormatNumber(int64 number);
+BASE_API string16 FormatNumber(int64 number);
// Starting at |start_offset| (usually 0), replace the first instance of
// |find_this| with |replace_with|.
-void ReplaceFirstSubstringAfterOffset(string16* str,
- string16::size_type start_offset,
- const string16& find_this,
- const string16& replace_with);
-void ReplaceFirstSubstringAfterOffset(std::string* str,
- std::string::size_type start_offset,
- const std::string& find_this,
- const std::string& replace_with);
+BASE_API void ReplaceFirstSubstringAfterOffset(string16* str,
+ string16::size_type start_offset,
+ const string16& find_this,
+ const string16& replace_with);
+BASE_API void ReplaceFirstSubstringAfterOffset(
+ std::string* str,
+ std::string::size_type start_offset,
+ const std::string& find_this,
+ const std::string& replace_with);
// Starting at |start_offset| (usually 0), look through |str| and replace all
// instances of |find_this| with |replace_with|.
@@ -452,14 +458,14 @@
// This does entire substrings; use std::replace in <algorithm> for single
// characters, for example:
// std::replace(str.begin(), str.end(), 'a', 'b');
-void ReplaceSubstringsAfterOffset(string16* str,
- string16::size_type start_offset,
- const string16& find_this,
- const string16& replace_with);
-void ReplaceSubstringsAfterOffset(std::string* str,
- std::string::size_type start_offset,
- const std::string& find_this,
- const std::string& replace_with);
+BASE_API void ReplaceSubstringsAfterOffset(string16* str,
+ string16::size_type start_offset,
+ const string16& find_this,
+ const string16& replace_with);
+BASE_API void ReplaceSubstringsAfterOffset(std::string* str,
+ std::string::size_type start_offset,
+ const std::string& find_this,
+ const std::string& replace_with);
// This is mpcomplete's pattern for saving a string copy when dealing with
// a function that writes results into a wchar_t[] and wanting the result to
@@ -489,48 +495,49 @@
// Splits a string into its fields delimited by any of the characters in
// |delimiters|. Each field is added to the |tokens| vector. Returns the
// number of tokens found.
-size_t Tokenize(const std::wstring& str,
- const std::wstring& delimiters,
- std::vector<std::wstring>* tokens);
-size_t Tokenize(const string16& str,
- const string16& delimiters,
- std::vector<string16>* tokens);
-size_t Tokenize(const std::string& str,
- const std::string& delimiters,
- std::vector<std::string>* tokens);
-size_t Tokenize(const base::StringPiece& str,
- const base::StringPiece& delimiters,
- std::vector<base::StringPiece>* tokens);
+BASE_API size_t Tokenize(const std::wstring& str,
+ const std::wstring& delimiters,
+ std::vector<std::wstring>* tokens);
+BASE_API size_t Tokenize(const string16& str,
+ const string16& delimiters,
+ std::vector<string16>* tokens);
+BASE_API size_t Tokenize(const std::string& str,
+ const std::string& delimiters,
+ std::vector<std::string>* tokens);
+BASE_API size_t Tokenize(const base::StringPiece& str,
+ const base::StringPiece& delimiters,
+ std::vector<base::StringPiece>* tokens);
// Does the opposite of SplitString().
-string16 JoinString(const std::vector<string16>& parts, char16 s);
-std::string JoinString(const std::vector<std::string>& parts, char s);
+BASE_API string16 JoinString(const std::vector<string16>& parts, char16 s);
+BASE_API std::string JoinString(const std::vector<std::string>& parts, char s);
// Replace $1-$2-$3..$9 in the format string with |a|-|b|-|c|..|i| respectively.
// Additionally, any number of consecutive '$' characters is replaced by that
// number less one. Eg $$->$, $$$->$$, etc. The offsets parameter here can be
// NULL. This only allows you to use up to nine replacements.
-string16 ReplaceStringPlaceholders(const string16& format_string,
- const std::vector<string16>& subst,
- std::vector<size_t>* offsets);
+BASE_API string16 ReplaceStringPlaceholders(const string16& format_string,
+ const std::vector<string16>& subst,
+ std::vector<size_t>* offsets);
-std::string ReplaceStringPlaceholders(const base::StringPiece& format_string,
- const std::vector<std::string>& subst,
- std::vector<size_t>* offsets);
+BASE_API std::string ReplaceStringPlaceholders(
+ const base::StringPiece& format_string,
+ const std::vector<std::string>& subst,
+ std::vector<size_t>* offsets);
// Single-string shortcut for ReplaceStringHolders. |offset| may be NULL.
-string16 ReplaceStringPlaceholders(const string16& format_string,
- const string16& a,
- size_t* offset);
+BASE_API string16 ReplaceStringPlaceholders(const string16& format_string,
+ const string16& a,
+ size_t* offset);
// Returns true if the string passed in matches the pattern. The pattern
// string can contain wildcards like * and ?
// The backslash character (\) is an escape character for * and ?
// We limit the patterns to having a max of 16 * or ? characters.
// ? matches 0 or 1 character, while * matches 0 or more characters.
-bool MatchPattern(const base::StringPiece& string,
- const base::StringPiece& pattern);
-bool MatchPattern(const string16& string, const string16& pattern);
+BASE_API bool MatchPattern(const base::StringPiece& string,
+ const base::StringPiece& pattern);
+BASE_API bool MatchPattern(const string16& string, const string16& pattern);
// Hack to convert any char-like type to its unsigned counterpart.
// For example, it will convert char, signed char and unsigned char to unsigned

Powered by Google App Engine
This is Rietveld 408576698