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

Side by Side Diff: core/fxcrt/include/fx_string.h

Issue 2060913003: Make code compile with clang_use_chrome_plugin (part II) (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: base Created 4 years, 6 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium 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 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #ifndef CORE_FXCRT_INCLUDE_FX_STRING_H_ 7 #ifndef CORE_FXCRT_INCLUDE_FX_STRING_H_
8 #define CORE_FXCRT_INCLUDE_FX_STRING_H_ 8 #define CORE_FXCRT_INCLUDE_FX_STRING_H_
9 9
10 #include <stdint.h> // For intptr_t. 10 #include <stdint.h> // For intptr_t.
(...skipping 16 matching lines...) Expand all
27 ((uint32_t)c4)) 27 ((uint32_t)c4))
28 28
29 #define FX_WSTRC(wstr) CFX_WideStringC(wstr, FX_ArraySize(wstr) - 1) 29 #define FX_WSTRC(wstr) CFX_WideStringC(wstr, FX_ArraySize(wstr) - 1)
30 30
31 // A mutable string with shared buffers using copy-on-write semantics that 31 // A mutable string with shared buffers using copy-on-write semantics that
32 // avoids the cost of std::string's iterator stability guarantees. 32 // avoids the cost of std::string's iterator stability guarantees.
33 class CFX_ByteString { 33 class CFX_ByteString {
34 public: 34 public:
35 using CharType = FX_CHAR; 35 using CharType = FX_CHAR;
36 36
37 CFX_ByteString() {} 37 CFX_ByteString();
38 CFX_ByteString(const CFX_ByteString& other) : m_pData(other.m_pData) {} 38 CFX_ByteString(const CFX_ByteString& other);
39 CFX_ByteString(CFX_ByteString&& other) { m_pData.Swap(other.m_pData); } 39 CFX_ByteString(CFX_ByteString&& other);
40 40
41 // Deliberately implicit to avoid calling on every string literal. 41 // Deliberately implicit to avoid calling on every string literal.
42 CFX_ByteString(char ch); 42 CFX_ByteString(char ch);
43 CFX_ByteString(const FX_CHAR* ptr) 43 CFX_ByteString(const FX_CHAR* ptr);
44 : CFX_ByteString(ptr, ptr ? FXSYS_strlen(ptr) : 0) {}
45 44
46 CFX_ByteString(const FX_CHAR* ptr, FX_STRSIZE len); 45 CFX_ByteString(const FX_CHAR* ptr, FX_STRSIZE len);
47 CFX_ByteString(const uint8_t* ptr, FX_STRSIZE len); 46 CFX_ByteString(const uint8_t* ptr, FX_STRSIZE len);
48 47
49 explicit CFX_ByteString(const CFX_ByteStringC& bstrc); 48 explicit CFX_ByteString(const CFX_ByteStringC& bstrc);
50 CFX_ByteString(const CFX_ByteStringC& bstrc1, const CFX_ByteStringC& bstrc2); 49 CFX_ByteString(const CFX_ByteStringC& bstrc1, const CFX_ByteStringC& bstrc2);
51 50
52 ~CFX_ByteString(); 51 ~CFX_ByteString();
53 52
54 void clear() { m_pData.Reset(); } 53 void clear();
55 54
56 static CFX_ByteString FromUnicode(const FX_WCHAR* ptr, FX_STRSIZE len = -1); 55 static CFX_ByteString FromUnicode(const FX_WCHAR* ptr, FX_STRSIZE len = -1);
57 static CFX_ByteString FromUnicode(const CFX_WideString& str); 56 static CFX_ByteString FromUnicode(const CFX_WideString& str);
58 57
59 // Explicit conversion to C-style string. 58 // Explicit conversion to C-style string.
60 // Note: Any subsequent modification of |this| will invalidate the result. 59 // Note: Any subsequent modification of |this| will invalidate the result.
61 const FX_CHAR* c_str() const { return m_pData ? m_pData->m_String : ""; } 60 const FX_CHAR* c_str() const;
62 61
63 // Explicit conversion to uint8_t*. 62 // Explicit conversion to uint8_t*.
64 // Note: Any subsequent modification of |this| will invalidate the result. 63 // Note: Any subsequent modification of |this| will invalidate the result.
65 const uint8_t* raw_str() const { 64 const uint8_t* raw_str() const;
66 return m_pData ? reinterpret_cast<const uint8_t*>(m_pData->m_String)
67 : nullptr;
68 }
69 65
70 // Explicit conversion to CFX_ByteStringC. 66 // Explicit conversion to CFX_ByteStringC.
71 // Note: Any subsequent modification of |this| will invalidate the result. 67 // Note: Any subsequent modification of |this| will invalidate the result.
72 CFX_ByteStringC AsStringC() const { 68 CFX_ByteStringC AsStringC() const;
73 return CFX_ByteStringC(raw_str(), GetLength());
74 }
75 69
76 FX_STRSIZE GetLength() const { return m_pData ? m_pData->m_nDataLength : 0; } 70 FX_STRSIZE GetLength() const;
77 bool IsEmpty() const { return !GetLength(); } 71 bool IsEmpty() const;
78 72
79 int Compare(const CFX_ByteStringC& str) const; 73 int Compare(const CFX_ByteStringC& str) const;
80 bool EqualNoCase(const CFX_ByteStringC& str) const; 74 bool EqualNoCase(const CFX_ByteStringC& str) const;
81 75
82 bool operator==(const char* ptr) const; 76 bool operator==(const char* ptr) const;
83 bool operator==(const CFX_ByteStringC& str) const; 77 bool operator==(const CFX_ByteStringC& str) const;
84 bool operator==(const CFX_ByteString& other) const; 78 bool operator==(const CFX_ByteString& other) const;
85 79
86 bool operator!=(const char* ptr) const { return !(*this == ptr); } 80 bool operator!=(const char* ptr) const;
87 bool operator!=(const CFX_ByteStringC& str) const { return !(*this == str); } 81 bool operator!=(const CFX_ByteStringC& str) const;
88 bool operator!=(const CFX_ByteString& other) const { 82 bool operator!=(const CFX_ByteString& other) const;
89 return !(*this == other);
90 }
91 83
92 bool operator<(const CFX_ByteString& str) const { 84 bool operator<(const CFX_ByteString& str) const;
93 int result = FXSYS_memcmp(c_str(), str.c_str(),
94 std::min(GetLength(), str.GetLength()));
95 return result < 0 || (result == 0 && GetLength() < str.GetLength());
96 }
97 85
98 const CFX_ByteString& operator=(const FX_CHAR* str); 86 const CFX_ByteString& operator=(const FX_CHAR* str);
99 const CFX_ByteString& operator=(const CFX_ByteStringC& bstrc); 87 const CFX_ByteString& operator=(const CFX_ByteStringC& bstrc);
100 const CFX_ByteString& operator=(const CFX_ByteString& stringSrc); 88 const CFX_ByteString& operator=(const CFX_ByteString& stringSrc);
101 89
102 const CFX_ByteString& operator+=(FX_CHAR ch); 90 const CFX_ByteString& operator+=(FX_CHAR ch);
103 const CFX_ByteString& operator+=(const FX_CHAR* str); 91 const CFX_ByteString& operator+=(const FX_CHAR* str);
104 const CFX_ByteString& operator+=(const CFX_ByteString& str); 92 const CFX_ByteString& operator+=(const CFX_ByteString& str);
105 const CFX_ByteString& operator+=(const CFX_ByteStringC& bstrc); 93 const CFX_ByteString& operator+=(const CFX_ByteStringC& bstrc);
106 94
107 uint8_t GetAt(FX_STRSIZE nIndex) const { 95 uint8_t GetAt(FX_STRSIZE nIndex) const;
108 return m_pData ? m_pData->m_String[nIndex] : 0;
109 }
110 96
111 uint8_t operator[](FX_STRSIZE nIndex) const { 97 uint8_t operator[](FX_STRSIZE nIndex) const;
112 return m_pData ? m_pData->m_String[nIndex] : 0;
113 }
114 98
115 void SetAt(FX_STRSIZE nIndex, FX_CHAR ch); 99 void SetAt(FX_STRSIZE nIndex, FX_CHAR ch);
116 FX_STRSIZE Insert(FX_STRSIZE index, FX_CHAR ch); 100 FX_STRSIZE Insert(FX_STRSIZE index, FX_CHAR ch);
117 FX_STRSIZE Delete(FX_STRSIZE index, FX_STRSIZE count = 1); 101 FX_STRSIZE Delete(FX_STRSIZE index, FX_STRSIZE count = 1);
118 102
119 void Format(const FX_CHAR* lpszFormat, ...); 103 void Format(const FX_CHAR* lpszFormat, ...);
120 void FormatV(const FX_CHAR* lpszFormat, va_list argList); 104 void FormatV(const FX_CHAR* lpszFormat, va_list argList);
121 105
122 void Reserve(FX_STRSIZE len); 106 void Reserve(FX_STRSIZE len);
123 FX_CHAR* GetBuffer(FX_STRSIZE len); 107 FX_CHAR* GetBuffer(FX_STRSIZE len);
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 const CFX_ByteString& str2) { 215 const CFX_ByteString& str2) {
232 return CFX_ByteString(str1, str2.AsStringC()); 216 return CFX_ByteString(str1, str2.AsStringC());
233 } 217 }
234 218
235 // A mutable string with shared buffers using copy-on-write semantics that 219 // A mutable string with shared buffers using copy-on-write semantics that
236 // avoids the cost of std::string's iterator stability guarantees. 220 // avoids the cost of std::string's iterator stability guarantees.
237 class CFX_WideString { 221 class CFX_WideString {
238 public: 222 public:
239 using CharType = FX_WCHAR; 223 using CharType = FX_WCHAR;
240 224
241 CFX_WideString() {} 225 CFX_WideString();
242 CFX_WideString(const CFX_WideString& other) : m_pData(other.m_pData) {} 226 CFX_WideString(const CFX_WideString& other);
243 CFX_WideString(CFX_WideString&& other) { m_pData.Swap(other.m_pData); } 227 CFX_WideString(CFX_WideString&& other);
244 228
245 // Deliberately implicit to avoid calling on every string literal. 229 // Deliberately implicit to avoid calling on every string literal.
246 CFX_WideString(FX_WCHAR ch); 230 CFX_WideString(FX_WCHAR ch);
247 CFX_WideString(const FX_WCHAR* ptr) 231 CFX_WideString(const FX_WCHAR* ptr);
248 : CFX_WideString(ptr, ptr ? FXSYS_wcslen(ptr) : 0) {}
249 232
250 CFX_WideString(const FX_WCHAR* ptr, FX_STRSIZE len); 233 CFX_WideString(const FX_WCHAR* ptr, FX_STRSIZE len);
251 234
252 explicit CFX_WideString(const CFX_WideStringC& str); 235 explicit CFX_WideString(const CFX_WideStringC& str);
253 CFX_WideString(const CFX_WideStringC& str1, const CFX_WideStringC& str2); 236 CFX_WideString(const CFX_WideStringC& str1, const CFX_WideStringC& str2);
254 237
255 ~CFX_WideString(); 238 ~CFX_WideString();
256 239
257 static CFX_WideString FromLocal(const CFX_ByteStringC& str); 240 static CFX_WideString FromLocal(const CFX_ByteStringC& str);
258 static CFX_WideString FromCodePage(const CFX_ByteStringC& str, 241 static CFX_WideString FromCodePage(const CFX_ByteStringC& str,
259 uint16_t codepage); 242 uint16_t codepage);
260 243
261 static CFX_WideString FromUTF8(const CFX_ByteStringC& str); 244 static CFX_WideString FromUTF8(const CFX_ByteStringC& str);
262 static CFX_WideString FromUTF16LE(const unsigned short* str, FX_STRSIZE len); 245 static CFX_WideString FromUTF16LE(const unsigned short* str, FX_STRSIZE len);
263 246
264 static FX_STRSIZE WStringLength(const unsigned short* str); 247 static FX_STRSIZE WStringLength(const unsigned short* str);
265 248
266 // Explicit conversion to C-style wide string. 249 // Explicit conversion to C-style wide string.
267 // Note: Any subsequent modification of |this| will invalidate the result. 250 // Note: Any subsequent modification of |this| will invalidate the result.
268 const FX_WCHAR* c_str() const { return m_pData ? m_pData->m_String : L""; } 251 const FX_WCHAR* c_str() const;
269 252
270 // Explicit conversion to CFX_WideStringC. 253 // Explicit conversion to CFX_WideStringC.
271 // Note: Any subsequent modification of |this| will invalidate the result. 254 // Note: Any subsequent modification of |this| will invalidate the result.
272 CFX_WideStringC AsStringC() const { 255 CFX_WideStringC AsStringC() const;
273 return CFX_WideStringC(c_str(), GetLength());
274 }
275 256
276 void clear() { m_pData.Reset(); } 257 void clear();
277 258
278 FX_STRSIZE GetLength() const { return m_pData ? m_pData->m_nDataLength : 0; } 259 FX_STRSIZE GetLength() const;
279 bool IsEmpty() const { return !GetLength(); } 260 bool IsEmpty() const;
280 261
281 const CFX_WideString& operator=(const FX_WCHAR* str); 262 const CFX_WideString& operator=(const FX_WCHAR* str);
282 const CFX_WideString& operator=(const CFX_WideString& stringSrc); 263 const CFX_WideString& operator=(const CFX_WideString& stringSrc);
283 const CFX_WideString& operator=(const CFX_WideStringC& stringSrc); 264 const CFX_WideString& operator=(const CFX_WideStringC& stringSrc);
284 265
285 const CFX_WideString& operator+=(const FX_WCHAR* str); 266 const CFX_WideString& operator+=(const FX_WCHAR* str);
286 const CFX_WideString& operator+=(FX_WCHAR ch); 267 const CFX_WideString& operator+=(FX_WCHAR ch);
287 const CFX_WideString& operator+=(const CFX_WideString& str); 268 const CFX_WideString& operator+=(const CFX_WideString& str);
288 const CFX_WideString& operator+=(const CFX_WideStringC& str); 269 const CFX_WideString& operator+=(const CFX_WideStringC& str);
289 270
290 bool operator==(const wchar_t* ptr) const; 271 bool operator==(const wchar_t* ptr) const;
291 bool operator==(const CFX_WideStringC& str) const; 272 bool operator==(const CFX_WideStringC& str) const;
292 bool operator==(const CFX_WideString& other) const; 273 bool operator==(const CFX_WideString& other) const;
293 274
294 bool operator!=(const wchar_t* ptr) const { return !(*this == ptr); } 275 bool operator!=(const wchar_t* ptr) const;
295 bool operator!=(const CFX_WideStringC& str) const { return !(*this == str); } 276 bool operator!=(const CFX_WideStringC& str) const;
296 bool operator!=(const CFX_WideString& other) const { 277 bool operator!=(const CFX_WideString& other) const;
297 return !(*this == other);
298 }
299 278
300 bool operator<(const CFX_WideString& str) const { 279 bool operator<(const CFX_WideString& str) const;
301 int result =
302 wmemcmp(c_str(), str.c_str(), std::min(GetLength(), str.GetLength()));
303 return result < 0 || (result == 0 && GetLength() < str.GetLength());
304 }
305 280
306 FX_WCHAR GetAt(FX_STRSIZE nIndex) const { 281 FX_WCHAR GetAt(FX_STRSIZE nIndex) const;
307 return m_pData ? m_pData->m_String[nIndex] : 0;
308 }
309 282
310 FX_WCHAR operator[](FX_STRSIZE nIndex) const { 283 FX_WCHAR operator[](FX_STRSIZE nIndex) const;
311 return m_pData ? m_pData->m_String[nIndex] : 0;
312 }
313 284
314 void SetAt(FX_STRSIZE nIndex, FX_WCHAR ch); 285 void SetAt(FX_STRSIZE nIndex, FX_WCHAR ch);
315 286
316 int Compare(const FX_WCHAR* str) const; 287 int Compare(const FX_WCHAR* str) const;
317 int Compare(const CFX_WideString& str) const; 288 int Compare(const CFX_WideString& str) const;
318 int CompareNoCase(const FX_WCHAR* str) const; 289 int CompareNoCase(const FX_WCHAR* str) const;
319 290
320 291
321 CFX_WideString Mid(FX_STRSIZE first) const; 292 CFX_WideString Mid(FX_STRSIZE first) const;
322 CFX_WideString Mid(FX_STRSIZE first, FX_STRSIZE count) const; 293 CFX_WideString Mid(FX_STRSIZE first, FX_STRSIZE count) const;
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
436 } 407 }
437 408
438 FX_FLOAT FX_atof(const CFX_ByteStringC& str); 409 FX_FLOAT FX_atof(const CFX_ByteStringC& str);
439 inline FX_FLOAT FX_atof(const CFX_WideStringC& wsStr) { 410 inline FX_FLOAT FX_atof(const CFX_WideStringC& wsStr) {
440 return FX_atof(FX_UTF8Encode(wsStr.c_str(), wsStr.GetLength()).c_str()); 411 return FX_atof(FX_UTF8Encode(wsStr.c_str(), wsStr.GetLength()).c_str());
441 } 412 }
442 void FX_atonum(const CFX_ByteStringC& str, FX_BOOL& bInteger, void* pData); 413 void FX_atonum(const CFX_ByteStringC& str, FX_BOOL& bInteger, void* pData);
443 FX_STRSIZE FX_ftoa(FX_FLOAT f, FX_CHAR* buf); 414 FX_STRSIZE FX_ftoa(FX_FLOAT f, FX_CHAR* buf);
444 415
445 #endif // CORE_FXCRT_INCLUDE_FX_STRING_H_ 416 #endif // CORE_FXCRT_INCLUDE_FX_STRING_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698