OLD | NEW |
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 _FX_STRING_H_ | 7 #ifndef _FX_STRING_H_ |
8 #define _FX_STRING_H_ | 8 #define _FX_STRING_H_ |
9 | 9 |
10 #include <stdint.h> // For intptr_t. | 10 #include <stdint.h> // For intptr_t. |
(...skipping 493 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
504 | 504 |
505 CFX_WideStringC& operator = (const CFX_WideStringC& src) | 505 CFX_WideStringC& operator = (const CFX_WideStringC& src) |
506 { | 506 { |
507 m_Ptr = src.m_Ptr; | 507 m_Ptr = src.m_Ptr; |
508 m_Length = src.m_Length; | 508 m_Length = src.m_Length; |
509 return *this; | 509 return *this; |
510 } | 510 } |
511 | 511 |
512 CFX_WideStringC& operator = (const CFX_WideString& src); | 512 CFX_WideStringC& operator = (const CFX_WideString& src); |
513 | 513 |
514 bool» » » operator == (const CFX_WideStringC& str) const | 514 bool operator== (const wchar_t* ptr) const { |
515 { | 515 return FXSYS_wcslen(ptr) == m_Length && |
516 return »str.m_Length == m_Length && FXSYS_memcmp32(str.m_Ptr, m_Ptr, m_L
ength * sizeof(FX_WCHAR)) == 0; | 516 wmemcmp(ptr, m_Ptr, m_Length) == 0; |
517 } | 517 } |
518 | 518 bool operator== (const CFX_WideStringC& str) const { |
519 bool» » » operator != (const CFX_WideStringC& str) const | 519 return str.m_Length == m_Length && |
520 { | 520 wmemcmp(str.m_Ptr, m_Ptr, m_Length) == 0; |
521 return »str.m_Length != m_Length || FXSYS_memcmp32(str.m_Ptr, m_Ptr, m_L
ength * sizeof(FX_WCHAR)) != 0; | 521 } |
| 522 bool operator!= (const wchar_t* ptr) const { return !(*this == ptr); } |
| 523 bool operator!= (const CFX_WideStringC& str) const { |
| 524 return !(*this == str); |
522 } | 525 } |
523 | 526 |
524 FX_LPCWSTR GetPtr() const | 527 FX_LPCWSTR GetPtr() const |
525 { | 528 { |
526 return m_Ptr; | 529 return m_Ptr; |
527 } | 530 } |
528 | 531 |
529 FX_STRSIZE GetLength() const | 532 FX_STRSIZE GetLength() const |
530 { | 533 { |
531 return m_Length; | 534 return m_Length; |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
591 protected: | 594 protected: |
592 FX_LPCWSTR m_Ptr; | 595 FX_LPCWSTR m_Ptr; |
593 FX_STRSIZE m_Length; | 596 FX_STRSIZE m_Length; |
594 | 597 |
595 private: | 598 private: |
596 void* operator new (size_t) throw() | 599 void* operator new (size_t) throw() |
597 { | 600 { |
598 return NULL; | 601 return NULL; |
599 } | 602 } |
600 }; | 603 }; |
| 604 inline bool operator== (const wchar_t* lhs, const CFX_WideStringC& rhs) { |
| 605 return rhs == lhs; |
| 606 } |
| 607 inline bool operator!= (const wchar_t* lhs, const CFX_WideStringC& rhs) { |
| 608 return rhs != lhs; |
| 609 } |
601 typedef const CFX_WideStringC& FX_WSTR; | 610 typedef const CFX_WideStringC& FX_WSTR; |
602 #define FX_WSTRC(wstr) CFX_WideStringC(wstr, FX_ArraySize(wstr) - 1) | 611 #define FX_WSTRC(wstr) CFX_WideStringC(wstr, FX_ArraySize(wstr) - 1) |
| 612 |
603 struct CFX_StringDataW { | 613 struct CFX_StringDataW { |
604 intptr_t m_nRefs; // Would prefer ssize_t, but no windows support. | 614 intptr_t m_nRefs; // Would prefer ssize_t, but no windows support. |
605 FX_STRSIZE m_nDataLength; | 615 FX_STRSIZE m_nDataLength; |
606 FX_STRSIZE m_nAllocLength; | 616 FX_STRSIZE m_nAllocLength; |
607 FX_WCHAR m_String[1]; | 617 FX_WCHAR m_String[1]; |
608 }; | 618 }; |
609 | 619 |
610 // A mutable string with shared buffers using copy-on-write semantics that | 620 // A mutable string with shared buffers using copy-on-write semantics that |
611 // avoids the cost of std::string's iterator stability guarantees. | 621 // avoids the cost of std::string's iterator stability guarantees. |
612 class CFX_WideString | 622 class CFX_WideString |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
674 const CFX_WideString& operator =(const CFX_WideStringC& stringSrc); | 684 const CFX_WideString& operator =(const CFX_WideStringC& stringSrc); |
675 | 685 |
676 const CFX_WideString& operator += (FX_LPCWSTR str); | 686 const CFX_WideString& operator += (FX_LPCWSTR str); |
677 | 687 |
678 const CFX_WideString& operator += (FX_WCHAR ch); | 688 const CFX_WideString& operator += (FX_WCHAR ch); |
679 | 689 |
680 const CFX_WideString& operator += (const CFX_WideString& str); | 690 const CFX_WideString& operator += (const CFX_WideString& str); |
681 | 691 |
682 const CFX_WideString& operator += (const CFX_WideStringC& str); | 692 const CFX_WideString& operator += (const CFX_WideStringC& str); |
683 | 693 |
| 694 bool operator== (const wchar_t* ptr) const { return Equal(ptr); } |
| 695 bool operator== (const CFX_WideStringC& str) const { return Equal(str); } |
| 696 bool operator== (const CFX_WideString& other) const { return Equal(other); } |
| 697 |
| 698 bool operator!= (const wchar_t* ptr) const { return !(*this == ptr); } |
| 699 bool operator!= (const CFX_WideStringC& str) const { |
| 700 return !(*this == str); |
| 701 } |
| 702 bool operator!= (const CFX_WideString& other) const { |
| 703 return !(*this == other); |
| 704 } |
| 705 |
684 bool operator< (const CFX_WideString& str) const { | 706 bool operator< (const CFX_WideString& str) const { |
685 int result = wmemcmp(c_str(), str.c_str(), std::min(GetLength(), str.Get
Length())); | 707 int result = wmemcmp(c_str(), str.c_str(), std::min(GetLength(), str.Get
Length())); |
686 return result < 0 || (result == 0 && GetLength() < str.GetLength()); | 708 return result < 0 || (result == 0 && GetLength() < str.GetLength()); |
687 } | 709 } |
688 | 710 |
689 FX_WCHAR GetAt(FX_STRSIZE nIndex) const | 711 FX_WCHAR GetAt(FX_STRSIZE nIndex) const |
690 { | 712 { |
691 return m_pData ? m_pData->m_String[nIndex] : 0; | 713 return m_pData ? m_pData->m_String[nIndex] : 0; |
692 } | 714 } |
693 | 715 |
694 FX_WCHAR operator[](FX_STRSIZE nIndex) const | 716 FX_WCHAR operator[](FX_STRSIZE nIndex) const |
695 { | 717 { |
696 return m_pData ? m_pData->m_String[nIndex] : 0; | 718 return m_pData ? m_pData->m_String[nIndex] : 0; |
697 } | 719 } |
698 | 720 |
699 void SetAt(FX_STRSIZE nIndex, FX_WCHA
R ch); | 721 void SetAt(FX_STRSIZE nIndex, FX_WCHA
R ch); |
700 | 722 |
701 int Compare(FX_LPCWSTR str) const; | 723 int Compare(FX_LPCWSTR str) const; |
702 | 724 |
703 int Compare(const CFX_WideString& st
r) const; | 725 int Compare(const CFX_WideString& st
r) const; |
704 | 726 |
705 int CompareNoCase(FX_LPCWSTR str) co
nst; | 727 int CompareNoCase(FX_LPCWSTR str) co
nst; |
706 | 728 |
707 bool» » » » » Equal(const CFX_WideStringC& str
) const; | 729 bool Equal(const wchar_t* ptr) const; |
| 730 bool Equal(const CFX_WideStringC& str) const; |
| 731 bool Equal(const CFX_WideString& other) const; |
708 | 732 |
709 CFX_WideString Mid(FX_STRSIZE first) const; | 733 CFX_WideString Mid(FX_STRSIZE first) const; |
710 | 734 |
711 CFX_WideString Mid(FX_STRSIZE first, FX_STRSIZE count)
const; | 735 CFX_WideString Mid(FX_STRSIZE first, FX_STRSIZE count)
const; |
712 | 736 |
713 CFX_WideString Left(FX_STRSIZE count) const; | 737 CFX_WideString Left(FX_STRSIZE count) const; |
714 | 738 |
715 CFX_WideString Right(FX_STRSIZE count) const; | 739 CFX_WideString Right(FX_STRSIZE count) const; |
716 | 740 |
717 FX_STRSIZE Insert(FX_STRSIZE index, FX_WCHAR ch); | 741 FX_STRSIZE Insert(FX_STRSIZE index, FX_WCHAR ch); |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
825 return CFX_WideString(str1, str2); | 849 return CFX_WideString(str1, str2); |
826 } | 850 } |
827 inline CFX_WideString operator + (const CFX_WideString& str1, const CFX_WideStri
ngC& str2) | 851 inline CFX_WideString operator + (const CFX_WideString& str1, const CFX_WideStri
ngC& str2) |
828 { | 852 { |
829 return CFX_WideString(str1, str2); | 853 return CFX_WideString(str1, str2); |
830 } | 854 } |
831 inline CFX_WideString operator + (const CFX_WideStringC& str1, const CFX_WideStr
ing& str2) | 855 inline CFX_WideString operator + (const CFX_WideStringC& str1, const CFX_WideStr
ing& str2) |
832 { | 856 { |
833 return CFX_WideString(str1, str2); | 857 return CFX_WideString(str1, str2); |
834 } | 858 } |
835 | 859 inline bool operator== (const wchar_t* lhs, const CFX_WideString& rhs) { |
836 bool operator==(const CFX_WideString& s1, const CFX_WideString& s2); | 860 return rhs == lhs; |
837 bool operator==(const CFX_WideString& s1, const CFX_WideStringC& s2); | 861 } |
838 bool operator==(const CFX_WideStringC& s1, const CFX_WideString& s2); | 862 inline bool operator== (const CFX_WideStringC& lhs, const CFX_WideString& rhs) { |
839 bool operator== (const CFX_WideString& s1, FX_LPCWSTR s2); | 863 return rhs == lhs; |
840 bool operator==(FX_LPCWSTR s1, const CFX_WideString& s2); | 864 } |
841 bool operator!=(const CFX_WideString& s1, const CFX_WideString& s2); | 865 inline bool operator!= (const wchar_t* lhs, const CFX_WideString& rhs) { |
842 bool operator!=(const CFX_WideString& s1, const CFX_WideStringC& s2); | 866 return rhs != lhs; |
843 bool operator!=(const CFX_WideStringC& s1, const CFX_WideString& s2); | 867 } |
844 bool operator!= (const CFX_WideString& s1, FX_LPCWSTR s2); | 868 inline bool operator!= (const CFX_WideStringC& lhs, const CFX_WideString& rhs) { |
845 bool operator!=(FX_LPCWSTR s1, const CFX_WideString& s2); | 869 return rhs != lhs; |
| 870 } |
846 FX_FLOAT FX_atof(FX_BSTR str); | 871 FX_FLOAT FX_atof(FX_BSTR str); |
847 void FX_atonum(FX_BSTR str, FX_BOOL& bInteger, void* pData); | 872 void FX_atonum(FX_BSTR str, FX_BOOL& bInteger, void* pData); |
848 FX_STRSIZE FX_ftoa(FX_FLOAT f, FX_LPSTR buf); | 873 FX_STRSIZE FX_ftoa(FX_FLOAT f, FX_LPSTR buf); |
849 CFX_ByteString FX_UTF8Encode(FX_LPCWSTR pwsStr, FX_STRSIZE len); | 874 CFX_ByteString FX_UTF8Encode(FX_LPCWSTR pwsStr, FX_STRSIZE len); |
850 inline CFX_ByteString FX_UTF8Encode(FX_WSTR wsStr) | 875 inline CFX_ByteString FX_UTF8Encode(FX_WSTR wsStr) |
851 { | 876 { |
852 return FX_UTF8Encode(wsStr.GetPtr(), wsStr.GetLength()); | 877 return FX_UTF8Encode(wsStr.GetPtr(), wsStr.GetLength()); |
853 } | 878 } |
854 inline CFX_ByteString FX_UTF8Encode(const CFX_WideString &wsStr) | 879 inline CFX_ByteString FX_UTF8Encode(const CFX_WideString &wsStr) |
855 { | 880 { |
856 return FX_UTF8Encode(wsStr.c_str(), wsStr.GetLength()); | 881 return FX_UTF8Encode(wsStr.c_str(), wsStr.GetLength()); |
857 } | 882 } |
858 #endif | 883 #endif |
OLD | NEW |