OLD | NEW |
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 #ifndef URL_URL_CANON_INTERNAL_H_ | 5 #ifndef URL_URL_CANON_INTERNAL_H_ |
6 #define URL_URL_CANON_INTERNAL_H_ | 6 #define URL_URL_CANON_INTERNAL_H_ |
7 | 7 |
8 // This file is intended to be included in another C++ file where the character | 8 // This file is intended to be included in another C++ file where the character |
9 // types are defined. This allows us to write mostly generic code, but not have | 9 // types are defined. This allows us to write mostly generic code, but not have |
10 // templace bloat because everything is inlined when anybody calls any of our | 10 // templace bloat because everything is inlined when anybody calls any of our |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
141 // UTF-8 functions ------------------------------------------------------------ | 141 // UTF-8 functions ------------------------------------------------------------ |
142 | 142 |
143 // Reads one character in UTF-8 starting at |*begin| in |str| and places | 143 // Reads one character in UTF-8 starting at |*begin| in |str| and places |
144 // the decoded value into |*code_point|. If the character is valid, we will | 144 // the decoded value into |*code_point|. If the character is valid, we will |
145 // return true. If invalid, we'll return false and put the | 145 // return true. If invalid, we'll return false and put the |
146 // kUnicodeReplacementCharacter into |*code_point|. | 146 // kUnicodeReplacementCharacter into |*code_point|. |
147 // | 147 // |
148 // |*begin| will be updated to point to the last character consumed so it | 148 // |*begin| will be updated to point to the last character consumed so it |
149 // can be incremented in a loop and will be ready for the next character. | 149 // can be incremented in a loop and will be ready for the next character. |
150 // (for a single-byte ASCII character, it will not be changed). | 150 // (for a single-byte ASCII character, it will not be changed). |
151 // | |
152 // Implementation is in url_canon_icu.cc. | |
153 URL_EXPORT bool ReadUTFChar(const char* str, int* begin, int length, | 151 URL_EXPORT bool ReadUTFChar(const char* str, int* begin, int length, |
154 unsigned* code_point_out); | 152 unsigned* code_point_out); |
155 | 153 |
156 // Generic To-UTF-8 converter. This will call the given append method for each | 154 // Generic To-UTF-8 converter. This will call the given append method for each |
157 // character that should be appended, with the given output method. Wrappers | 155 // character that should be appended, with the given output method. Wrappers |
158 // are provided below for escaped and non-escaped versions of this. | 156 // are provided below for escaped and non-escaped versions of this. |
159 // | 157 // |
160 // The char_value must have already been checked that it's a valid Unicode | 158 // The char_value must have already been checked that it's a valid Unicode |
161 // character. | 159 // character. |
162 template<class Output, void Appender(unsigned char, Output*)> | 160 template<class Output, void Appender(unsigned char, Output*)> |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
218 // UTF-16 functions ----------------------------------------------------------- | 216 // UTF-16 functions ----------------------------------------------------------- |
219 | 217 |
220 // Reads one character in UTF-16 starting at |*begin| in |str| and places | 218 // Reads one character in UTF-16 starting at |*begin| in |str| and places |
221 // the decoded value into |*code_point|. If the character is valid, we will | 219 // the decoded value into |*code_point|. If the character is valid, we will |
222 // return true. If invalid, we'll return false and put the | 220 // return true. If invalid, we'll return false and put the |
223 // kUnicodeReplacementCharacter into |*code_point|. | 221 // kUnicodeReplacementCharacter into |*code_point|. |
224 // | 222 // |
225 // |*begin| will be updated to point to the last character consumed so it | 223 // |*begin| will be updated to point to the last character consumed so it |
226 // can be incremented in a loop and will be ready for the next character. | 224 // can be incremented in a loop and will be ready for the next character. |
227 // (for a single-16-bit-word character, it will not be changed). | 225 // (for a single-16-bit-word character, it will not be changed). |
228 // | |
229 // Implementation is in url_canon_icu.cc. | |
230 URL_EXPORT bool ReadUTFChar(const base::char16* str, int* begin, int length, | 226 URL_EXPORT bool ReadUTFChar(const base::char16* str, int* begin, int length, |
231 unsigned* code_point); | 227 unsigned* code_point_out); |
232 | 228 |
233 // Equivalent to U16_APPEND_UNSAFE in ICU but uses our output method. | 229 // Equivalent to U16_APPEND_UNSAFE in ICU but uses our output method. |
234 inline void AppendUTF16Value(unsigned code_point, | 230 inline void AppendUTF16Value(unsigned code_point, |
235 CanonOutputT<base::char16>* output) { | 231 CanonOutputT<base::char16>* output) { |
236 if (code_point > 0xffff) { | 232 if (code_point > 0xffff) { |
237 output->push_back(static_cast<base::char16>((code_point >> 10) + 0xd7c0)); | 233 output->push_back(static_cast<base::char16>((code_point >> 10) + 0xd7c0)); |
238 output->push_back(static_cast<base::char16>((code_point & 0x3ff) | 0xdc00)); | 234 output->push_back(static_cast<base::char16>((code_point & 0x3ff) | 0xdc00)); |
239 } else { | 235 } else { |
240 output->push_back(static_cast<base::char16>(code_point)); | 236 output->push_back(static_cast<base::char16>(code_point)); |
241 } | 237 } |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
428 inline unsigned long long _strtoui64(const char* nptr, | 424 inline unsigned long long _strtoui64(const char* nptr, |
429 char** endptr, int base) { | 425 char** endptr, int base) { |
430 return strtoull(nptr, endptr, base); | 426 return strtoull(nptr, endptr, base); |
431 } | 427 } |
432 | 428 |
433 #endif // WIN32 | 429 #endif // WIN32 |
434 | 430 |
435 } // namespace url | 431 } // namespace url |
436 | 432 |
437 #endif // URL_URL_CANON_INTERNAL_H_ | 433 #endif // URL_URL_CANON_INTERNAL_H_ |
OLD | NEW |