diff options
author | rvargas@google.com <rvargas@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-22 22:11:08 +0000 |
---|---|---|
committer | rvargas@google.com <rvargas@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-22 22:11:08 +0000 |
commit | f53121d2c69801353feb2531446a1b1b93e576d4 (patch) | |
tree | ed081a0331dcb0df724fab00d043a1e5837e0857 /base/string_util.h | |
parent | a75573d945926b844f7b1932b11088dd3956577d (diff) | |
download | chromium_src-f53121d2c69801353feb2531446a1b1b93e576d4.zip chromium_src-f53121d2c69801353feb2531446a1b1b93e576d4.tar.gz chromium_src-f53121d2c69801353feb2531446a1b1b93e576d4.tar.bz2 |
Base: First pass at having base.dll: definition of
BASE_API and a few files that use it.
BUG=76996
TEST=none
Review URL: http://codereview.chromium.org/6725001
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@79056 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/string_util.h')
-rw-r--r-- | base/string_util.h | 307 |
1 files changed, 157 insertions, 150 deletions
diff --git a/base/string_util.h b/base/string_util.h index ed7adec..81d31d3 100644 --- a/base/string_util.h +++ b/base/string_util.h @@ -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 @@ namespace base { // 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 @@ inline int swprintf(wchar_t* buffer, size_t size, const wchar_t* format, ...) { // 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 @@ size_t wcslcpy(wchar_t* dst, const wchar_t* src, size_t dst_size); // 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 @@ template<typename Char> struct CaseInsensitiveCompareASCII { // 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 @@ extern const char kUtf8ByteOrderMark[]; // 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 @@ enum TrimPositions { 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 @@ TrimPositions TrimWhitespace(const std::string& input, // (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 @@ bool WideToLatin1(const std::wstring& wide, std::string* latin1); // 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 @@ template <class str> inline str StringToUpperASCII(const str& s) { // 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 @@ enum DataUnits { // 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 @@ void ReplaceFirstSubstringAfterOffset(std::string* str, // 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 @@ inline typename string_type::value_type* WriteInto(string_type* str, // 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 |