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 |