00001 //============================================================================= 00002 // filename: RmString.h 00003 // 00004 // ATI Research, Inc. 00005 // 3D Application Research Group 00006 // 00007 // Description: String Class for RenderMonkey. 00008 // 00009 //============================================================================= 00010 // (C) 2004 ATI Research, Inc. All rights reserved. 00011 //============================================================================= 00012 00013 #ifndef _RM_CORE_STRING_H_ 00014 #define _RM_CORE_STRING_H_ 00015 00016 #include <Core/RmTypes.h> 00017 #include <Core/RmLinkedList.h> 00018 00019 //============================================================================= 00027 //============================================================================= 00028 template < class RmCharType > 00029 class RmString 00030 { 00031 private : 00032 00033 //========================================================================== 00035 // 00038 // 00042 // 00049 //========================================================================== 00050 struct StringData 00051 { 00052 RM_INT32 iBufferSize; 00053 RM_INT32 iSize; 00054 00055 }; // End of StringData 00056 00057 //========================================================================== 00060 //========================================================================== 00061 StringData* GetData(); 00062 00063 //========================================================================== 00066 //========================================================================== 00067 const StringData* GetData() const; 00068 00069 public : 00070 00071 //========================================================================== 00073 //========================================================================== 00074 RmString(); 00075 00076 //========================================================================== 00078 //========================================================================== 00079 RmString( /*[in]*/ const RmString<RmCharType> &src ); 00080 00081 //========================================================================== 00083 //========================================================================== 00084 RmString( /*[in]*/ const RmCharType* srcStr ); 00085 00086 //========================================================================== 00088 //========================================================================== 00089 RmString( /*[in]*/ const RM_INT32 reserveSize ); 00090 00091 //========================================================================== 00093 //========================================================================== 00094 ~RmString(); 00095 00096 //========================================================================== 00100 //========================================================================== 00101 RM_INT32 GetLength() const { return GetData()->iSize; }; 00102 00103 //========================================================================== 00107 //========================================================================== 00108 RM_INT32 GetBufferSize() const { return GetData()->iBufferSize; }; 00109 00110 //========================================================================== 00114 //========================================================================== 00115 const RmCharType *GetBuffer() const { return m_pBuffer; }; 00116 00117 //========================================================================== 00118 // Reserve/Clear from memory 00119 //========================================================================== 00120 00121 //========================================================================== 00126 //========================================================================== 00127 void Reserve( /*[in]*/ const RM_INT32 reserveSize ); 00128 00129 //========================================================================== 00133 //========================================================================== 00134 void Clear(); 00135 00136 //========================================================================== 00137 // Comparison 00138 //========================================================================== 00139 00140 //========================================================================== 00150 //========================================================================== 00151 RM_INT32 Compare( /*[in]*/ const RmString<RmCharType> &src, 00152 /*[in]*/ bool bCaseSensitive = true ) const; 00153 00154 //========================================================================== 00164 //========================================================================== 00165 RM_INT32 Compare( /*[in]*/ const RmCharType* srcStr, 00166 /*[in]*/ bool bCaseSensitive = true ) const; 00167 00168 //========================================================================== 00185 //========================================================================== 00186 RM_INT32 Find( /*[in]*/ const RmString<RmCharType> &src, 00187 /*[in]*/ const RM_INT32 startIndex = 0, 00188 /*[in]*/ bool bCaseSensitive = true) const; 00189 00190 //========================================================================== 00207 //========================================================================== 00208 RM_INT32 Find( /*[in]*/ const RmCharType* srcStr, 00209 /*[in]*/ const RM_INT32 startIndex = 0, 00210 /*[in]*/ bool bCaseSensitive = true) const; 00211 00212 //========================================================================== 00229 //========================================================================== 00230 RM_INT32 Find( /*[in]*/ const RmCharType Char, 00231 /*[in]*/ const RM_INT32 startIndex = 0, 00232 /*[in]*/ bool bCaseSensitive = true) const; 00233 00234 //========================================================================== 00251 //========================================================================== 00252 RM_INT32 FindOneOf( /*[in]*/ const RmString<RmCharType> &src, 00253 /*[in]*/ const RM_INT32 startIndex = 0, 00254 /*[in]*/ bool bCaseSensitive = true) const; 00255 00256 //========================================================================== 00273 //========================================================================== 00274 RM_INT32 FindOneOf( /*[in]*/ const RmCharType* srcStr, 00275 /*[in]*/ const RM_INT32 startIndex = 0, 00276 /*[in]*/ bool bCaseSensitive = true) const; 00277 00278 //========================================================================== 00295 //========================================================================== 00296 RM_INT32 FindFromEnd( /*[in]*/ const RmString<RmCharType> &src, 00297 /*[in]*/ const RM_INT32 startIndex = -1, 00298 /*[in]*/ bool bCaseSensitive = true) const; 00299 00300 //========================================================================== 00317 //========================================================================== 00318 RM_INT32 FindFromEnd( /*[in]*/ const RmCharType* srcStr, 00319 /*[in]*/ const RM_INT32 startIndex = -1, 00320 /*[in]*/ bool bCaseSensitive = true) const; 00321 00322 //========================================================================== 00339 //========================================================================== 00340 RM_INT32 FindFromEnd( /*[in]*/ const RmCharType Char, 00341 /*[in]*/ const RM_INT32 startIndex = -1, 00342 /*[in]*/ bool bCaseSensitive = true) const; 00343 00344 //========================================================================== 00352 //========================================================================== 00353 RM_INT32 FindOneOfFromEnd( /*[in]*/ const RmString<RmCharType> &src, 00354 /*[in]*/ const RM_INT32 startIndex = -1, 00355 /*[in]*/ bool bCaseSensitive = true) const; 00356 00357 //========================================================================== 00365 //========================================================================== 00366 RM_INT32 FindOneOfFromEnd( /*[in]*/ const RmCharType* srcStr, 00367 /*[in]*/ const RM_INT32 startIndex = -1, 00368 /*[in]*/ bool bCaseSensitive = true) const; 00369 00370 //========================================================================== 00378 //========================================================================== 00379 RM_INT32 FindWholeWord( /*[in]*/ const RmCharType* srcStr, 00380 /*[in]*/ const RM_INT32 startIndex = 0, 00381 /*[in]*/ bool bCaseSensitive = true) const; 00382 00383 //========================================================================== 00385 //========================================================================== 00386 void RemoveBefore( /*[in]*/ const RM_INT32 nIndex ); 00387 00388 //========================================================================== 00390 //========================================================================== 00391 void RemoveAfter( /*[in]*/ const RM_INT32 nIndex ); 00392 00393 //========================================================================== 00396 // 00401 // 00407 //========================================================================== 00408 void Insert( /*[in]*/ const RM_INT32 destIndex, 00409 /*[in]*/ const RmString<RmCharType> &src, 00410 /*[in]*/ const RM_INT32 srcStartIndex = 0, 00411 /*[in]*/ const RM_INT32 numChars = 0 ); 00412 00413 //========================================================================== 00416 // 00421 // 00427 //========================================================================== 00428 void Insert( /*[in]*/ const RM_INT32 destIndex, 00429 /*[in]*/ const RmCharType* srcStr, 00430 /*[in]*/ const RM_INT32 srcStartIndex = 0, 00431 /*[in]*/ const RM_INT32 numChars = 0 ); 00432 00433 //========================================================================== 00436 // 00441 // 00447 //========================================================================== 00448 void Insert( /*[in]*/ const RM_INT32 destIndex, 00449 /*[in]*/ const RmCharType Char ); 00450 00451 //========================================================================== 00453 // 00455 //========================================================================== 00456 void Copy( /*[in]*/ const RmString<RmCharType> &src, 00457 /*[in]*/ const RM_INT32 srcStartIndex = 0, 00458 /*[in]*/ const RM_INT32 numChars = 0 ); 00459 00460 //========================================================================== 00462 // 00464 //========================================================================== 00465 void Copy( /*[in]*/ const RmCharType* srcStr, 00466 /*[in]*/ const RM_INT32 srcStartIndex = 0, 00467 /*[in]*/ const RM_INT32 numChars = 0 ); 00468 00469 //========================================================================== 00471 //========================================================================== 00472 void Append( /*[in]*/ const RmString<RmCharType> &src, 00473 /*[in]*/ const RM_INT32 srcStartIndex = 0, 00474 /*[in]*/ const RM_INT32 numChars = 0 ); 00475 00476 //========================================================================== 00478 //========================================================================== 00479 void Append( /*[in]*/ const RmCharType* srcStr, 00480 /*[in]*/ const RM_INT32 srcStartIndex = 0, 00481 /*[in]*/ const RM_INT32 numChars = 0 ); 00482 00483 //========================================================================== 00485 //========================================================================== 00486 void Append( /*[in]*/ const RmCharType srcChar ); 00487 00488 //========================================================================== 00490 //========================================================================== 00491 void Prepend( /*[in]*/ const RmString<RmCharType> &src, 00492 /*[in]*/ const RM_INT32 srcStartIndex = 0, 00493 /*[in]*/ const RM_INT32 numChars = 0 ); 00494 00495 //========================================================================== 00497 //========================================================================== 00498 void Prepend( /*[in]*/ const RmCharType* srcStr, 00499 /*[in]*/ const RM_INT32 srcStartIndex = 0, 00500 /*[in]*/ const RM_INT32 numChars = 0 ); 00501 00502 //========================================================================== 00504 //========================================================================== 00505 void Prepend( /*[in]*/ const RmCharType srcChar ); 00506 00507 //========================================================================== 00509 //========================================================================== 00510 void Replace( /*[in]*/ const RmCharType *origStr, 00511 /*[in]*/ const RmCharType *newStr, 00512 /*[in]*/ const RM_INT32 beginScanIndex = 0, 00513 /*[in]*/ const RM_INT32 endScanIndex = 0, 00514 /*[in]*/ bool bCaseSensitive = true, 00515 /*[in]*/ bool bWholeWord = false ); 00516 00517 //========================================================================== 00519 //========================================================================== 00520 void ToUpper(); 00521 00522 //========================================================================== 00524 //========================================================================== 00525 void ToLower(); 00526 00527 //========================================================================== 00529 // 00534 // 00538 //========================================================================== 00539 void Format( /*[in]*/ const RmCharType* szFormat, /*[in]*/ ... ); 00540 00541 //========================================================================== 00543 // 00548 // 00552 //========================================================================== 00553 void AppendFormat( /*[in]*/ const RmCharType* szFormat, /*[in]*/ ... ); 00554 00555 //========================================================================== 00557 // 00559 // 00561 // 00567 //========================================================================== 00568 RmString<RmCharType> GetDirectoryName() const; 00569 00570 RmString<RmCharType> GetFileName( /*[in]*/ const bool bWithExtension=true ) const; 00571 00572 RmString<RmCharType> GetExtensionName() const; 00573 00574 RmLinkedList<RmString<RmCharType> > GetEachDirectories( /*[in]*/ const bool bIncludeLast ) const; 00575 00576 //========================================================================== 00578 00579 RmCharType& operator[] ( /*[in]*/ const RM_INT32 nIndex ); 00580 00581 const RmCharType& operator[] ( /*[in]*/ const RM_INT32 nIndex ) const; 00582 00584 void operator = ( /*[in]*/ const RmString<RmCharType> &src ); 00585 00586 void operator = ( /*[in]*/ const RmCharType* srcStr ); 00587 00588 bool operator == ( /*[in]*/ const RmString<RmCharType> &src ) const; 00589 00590 bool operator == ( /*[in]*/ const RmCharType* srcStr ) const; 00591 00592 bool operator != ( /*[in]*/ const RmString<RmCharType> &src ) const; 00593 00594 bool operator != ( /*[in]*/ const RmCharType* srcStr ) const; 00595 00598 RmString<RmCharType> operator + ( /*[in]*/ const RmString<RmCharType> &src ) const; 00599 00600 RmString<RmCharType> operator + ( /*[in]*/ const RmCharType* srcStr ) const; 00601 00602 RmString<RmCharType> operator + ( /*[in]*/ const RmCharType srcChar ) const; 00603 00606 void operator += ( /*[in]*/ const RmString<RmCharType> &src ); 00607 00608 void operator += ( /*[in]*/ const RmCharType* srcStr ); 00609 00610 void operator += ( /*[in]*/ const RmCharType srcChar ); 00611 00613 // 00616 operator const RmCharType*() const 00617 { 00618 return m_pBuffer; 00619 }; 00620 00621 //========================================================================== 00622 00623 private : 00624 RmCharType *m_pBuffer; //< Buffer 00625 00626 //========================================================================= 00628 //========================================================================= 00629 void AllocBuffer( /*[in]*/ const RM_INT32 iNewSize, 00630 /*[in]*/ const bool bPreserve ); 00631 00632 //========================================================================= 00634 //========================================================================= 00635 void DeallocBuffer(); 00636 00637 //========================================================================= 00639 //========================================================================= 00640 void CopyBuffer( /*[in]*/ const RmCharType* srcStr, 00641 /*[in]*/ const RM_INT32 iSize ); 00642 00643 //========================================================================= 00645 //========================================================================= 00646 void AppendBuffer( /*[in]*/ const RmCharType* srcStr, 00647 /*[in]*/ const RM_INT32 iSize ); 00648 00649 //========================================================================= 00651 //========================================================================= 00652 void PrependBuffer( /*[in]*/ const RmCharType* srcStr, 00653 /*[in]*/ const RM_INT32 iSize ); 00654 00655 //========================================================================= 00657 //========================================================================= 00658 void InsertBuffer( /*[in]*/ const RM_INT32 destIndex, 00659 /*[in]*/ const RmCharType* srcStr, 00660 /*[in]*/ const RM_INT32 iSize ); 00661 00662 //========================================================================= 00664 //========================================================================= 00665 void MoveBuffer( /*[in]*/ const RM_INT32 srcIndex, 00666 /*[in]*/ const RM_INT32 destIndex, 00667 /*[in]*/ const RM_INT32 iSize ); 00668 00669 //========================================================================= 00671 //========================================================================= 00672 RM_INT32 GetStrSize( /*[in]*/ const RmCharType* srcStr ) const; 00673 00674 //========================================================================= 00676 //========================================================================= 00677 bool IsDelimeter( /*[in]*/ RmCharType ch ) const; 00678 }; // End of RmString 00679 00680 00681 //=========================================================================== 00682 // External Operators 00683 //=========================================================================== 00684 template <class RmCharType> 00685 RmString<RmCharType> operator + ( /*[in]*/ const RmCharType* srcStr1, 00686 /*[in]*/ const RmString<RmCharType>& srcStr2 ); 00687 00688 00689 //=========================================================================== 00690 // Inlined implementation 00691 // 00692 // - Actual Implemention of RmString is defined in RmString.inl ( inline ) 00693 //=========================================================================== 00694 #include <Core/RmString.inl> 00695 00696 typedef RmString<RM_CHAR> RmStringA; 00697 typedef RmString<RM_WCHAR> RmStringW; 00698 00699 //..............................................................................................................// 00700 //..............................................................................................................// 00701 //..............................................................................................................// 00702 // Helper Functions 00703 // 00704 // Note : For all function, if numChar == -1, then operation continues until either src or dest terminates 00705 // string with '\0' character. 00706 // 00707 // <String Function Name>A - String function for ASCII string 00708 // <String Function Name>A - String function for Unicode string 00709 // 00710 //..............................................................................................................// 00711 //..............................................................................................................// 00712 //..............................................................................................................// 00713 00714 //============================================================= 00715 // Conversion Functions 00716 // 00717 // - pDest must have enough memory allocated. 00718 // ( at least same length of pSrc ) 00719 //============================================================= 00720 RM_API void RmStrWtoA( RM_CHAR *pDest, const RM_WCHAR *pSrc, int numChar = -1 ); 00721 RM_API void RmStrAtoW( RM_WCHAR *pDest, const RM_CHAR *pSrc, int numChar = -1 ); 00722 RM_API void RmStrAtoA( RM_CHAR *pDest, const RM_CHAR *pSrc, int numChar = -1 ); 00723 RM_API void RmStrWtoW( RM_WCHAR *pDest, const RM_WCHAR *pSrc, int numChar = -1 ); 00724 00725 //============================================================= 00726 // Conversion with allocation 00727 // 00728 // - Allocate string and copy the contents from src then return 00729 // that string. 00730 // User of this function is responsible for calling RmStrFree 00731 // after done using returned string 00732 //============================================================= 00733 RM_API RM_CHAR* RmStrAllocWtoA( const RM_WCHAR *pSrc ); 00734 RM_API RM_CHAR* RmStrAllocAtoA( const RM_CHAR *pSrc ); 00735 00736 RM_API RM_WCHAR* RmStrAllocAtoW( const RM_CHAR *pSrc ); 00737 RM_API RM_WCHAR* RmStrAllocWtoW( const RM_WCHAR *pSrc ); 00738 00739 00740 //============================================================= 00741 // Free string 00742 // 00743 // - Free pointer to characters that is returned by RmStrAllocXXXX 00744 // functions 00745 //============================================================= 00746 RM_API void RmStrFreeA( RM_CHAR *pStr ); 00747 RM_API void RmStrFreeW( RM_WCHAR *pStr ); 00748 00749 //============================================================= 00750 // Duplicate 00751 // 00752 // - Same as strdup or wcsdup ( for unicode ). User of this function 00753 // must call free to destroy the returned pointer. 00754 //============================================================= 00755 RM_API RM_CHAR* RmStrDupA( const RM_CHAR *pStr ); 00756 RM_API RM_WCHAR* RmStrDupW( const RM_WCHAR *pStr ); 00757 00758 //============================================================= 00759 // String Length 00760 //============================================================= 00761 RM_API int RmStrLenA( const RM_CHAR *pSrc ); 00762 RM_API int RmStrLenW( const RM_WCHAR *pSrc ); 00763 00764 //============================================================= 00765 // Find sub string ( or character )inside source string 00766 // 00767 // - Returns NULL, if sub string was not found 00768 //============================================================= 00769 RM_API RM_CHAR* RmStrStrA( const RM_CHAR *pSrc, const RM_CHAR *pFindStr ); 00770 RM_API RM_WCHAR* RmStrStrW( const RM_WCHAR *pSrc, const RM_WCHAR *pFindStr ); 00771 RM_API RM_CHAR* RmStrChrA( const RM_CHAR *pSrc, RM_CHAR ch ); 00772 RM_API RM_WCHAR* RmStrChrW( const RM_WCHAR *pSrc, RM_WCHAR ch ); 00773 RM_API RM_CHAR* RmStrRChrA( const RM_CHAR *pSrc, RM_CHAR ch ); // Find from end 00774 RM_API RM_WCHAR* RmStrRChrW( const RM_WCHAR *pSrc, RM_WCHAR ch ); // Find from end 00775 00776 //============================================================= 00777 // String Copy 00778 //============================================================= 00779 RM_API void RmStrCopyA( RM_CHAR *pDest, const RM_CHAR *pSrc, int numChar = -1 ); 00780 RM_API void RmStrCopyW( RM_WCHAR *pDest, const RM_WCHAR *pSrc, int numChar = -1 ); 00781 00782 //============================================================= 00783 // Concatenation 00784 // 00785 // - Appends src string to the end of dest string 00786 //============================================================= 00787 RM_API void RmStrCatA( RM_CHAR *pDest, const RM_CHAR *pSrc, int numChar = -1 ); 00788 RM_API void RmStrCatW( RM_WCHAR *pDest, const RM_WCHAR *pSrc, int numChar = -1 ); 00789 00790 //============================================================= 00791 // Compare 00792 // 00793 // - Returns 1, if Str1 is greater than Str2 00794 // 0, if they are equal 00795 // -1, if Str2 is greater than Str1 00796 //============================================================= 00797 RM_API int RmStrCmpA( const RM_CHAR *pStr1, const RM_CHAR *pStr2, int numChar = -1 ); 00798 RM_API int RmStrCmpW( const RM_WCHAR *pStr1, const RM_WCHAR *pStr2, int numChar = -1 ); 00799 00800 // Non-case sensitive compare 00801 RM_API int RmStrICmpA( const RM_CHAR *pStr1, const RM_CHAR *pStr2, int numChar = -1 ); 00802 RM_API int RmStrICmpW( const RM_WCHAR *pStr1, const RM_WCHAR *pStr2, int numChar = -1 ); 00803 00804 //============================================================= 00805 // Type Conversion 00806 // 00807 // - String to float, int, etc 00808 //============================================================= 00809 RM_API RM_LONG RmStrToLongA( const RM_CHAR *pSrc, RM_CHAR **pEndPtr, int base ); 00810 RM_API RM_ULONG RmStrToULongA( const RM_CHAR *pSrc, RM_CHAR **pEndPtr, int base ); 00811 RM_API RM_DOUBLE RmStrToDoubleA( const RM_CHAR *pSrc, RM_CHAR **pEndPtr ); 00812 00813 RM_API RM_LONG RmStrToLongW( const RM_WCHAR *pSrc, RM_WCHAR **pEndPtr, int base ); 00814 RM_API RM_ULONG RmStrToULongW( const RM_WCHAR *pSrc, RM_WCHAR **pEndPtr, int base ); 00815 RM_API RM_DOUBLE RmStrToDoubleW( const RM_WCHAR *pSrc, RM_WCHAR **pEndPtr ); 00816 00817 //============================================================= 00818 // Macros to map string function based on flag ( unicode or not ) 00819 // 00820 // - In you application use <String Function Name>T whereever applicable. 00821 // For example, use RmStrCmpT instead of strcmp. Your source is 00822 // compilable for both Unicode an ASCII build 00823 //============================================================= 00824 #ifdef _UNICODE 00825 #define RmStringT RmStringW 00826 00827 #define RmStrAtoT RmStrAtoW 00828 #define RmStrWtoT RmStrWtoW 00829 00830 #define RmStrTtoA RmStrWtoA 00831 #define RmStrTtoW RmStrWtoW 00832 00833 #define RmStrAllocAtoT RmStrAllocAtoW 00834 #define RmStrAllocWtoT RmStrAllocWtoW 00835 00836 #define RmStrAllocTtoA RmStrAllocWtoA 00837 #define RmStrAllocTtoW RmStrAllocWtoW 00838 00839 #define RmStrCopyT RmStrCopyW 00840 #define RmStrCmpT RmStrCmpW 00841 00842 #define RmStrCatT RmStrCatW 00843 00844 #define RmStrStrT RmStrStrW 00845 #define RmStrChrT RmStrChrW 00846 #define RmStrRChrT RmStrRChrW 00847 00848 #define RmStrICmpT RmStrICmpW 00849 00850 #define RmStrToLongT RmStrToLongW 00851 #define RmStrToULongT RmStrToULongW 00852 #define RmStrToDoubleT RmStrToDoubleW 00853 00854 #define RmStrDupT RmStrDupW 00855 00856 #define RmStrFreeT RmStrFreeW 00857 00858 #define RmStrLenT RmStrLenW 00859 00860 #define RmStrPrintf swprintf 00861 #define RmStrNPrintf _snwprintf 00862 00863 #define RmStrScanf swscanf 00864 00865 #define RmStrTokT wcstok 00866 00867 #define RmStrAtoF _wtof 00868 #define RmStrAtoI _wtoi 00869 #define RmStrAtoL _wtol 00870 00871 #else // For non unicode build 00872 #define RmStringT RmStringA 00873 00874 #define RmStrAtoT RmStrAtoA 00875 #define RmStrWtoT RmStrWtoA 00876 00877 #define RmStrTtoA RmStrAtoA 00878 #define RmStrTtoW RmStrAtoW 00879 00880 #define RmStrAllocAtoT RmStrAllocAtoA 00881 #define RmStrAllocWtoT RmStrAllocWtoA 00882 00883 #define RmStrAllocTtoA RmStrAllocAtoA 00884 #define RmStrAllocTtoW RmStrAllocAtoW 00885 00886 #define RmStrCopyT RmStrCopyA 00887 #define RmStrCmpT RmStrCmpA 00888 00889 #define RmStrCatT RmStrCatA 00890 00891 #define RmStrStrT RmStrStrA 00892 #define RmStrChrT RmStrChrA 00893 #define RmStrRChrT RmStrRChrA 00894 00895 #define RmStrICmpT RmStrICmpA 00896 00897 #define RmStrToLongT RmStrToLongA 00898 #define RmStrToULongT RmStrToULongA 00899 #define RmStrToDoubleT RmStrToDoubleA 00900 00901 #define RmStrFreeT RmStrFreeA 00902 00903 #define RmStrLenT RmStrLenA 00904 00905 #define RmStrDupT RmStrDupA 00906 00907 #define RmStrPrintf sprintf 00908 #define RmStrNPrintf _snprintf 00909 00910 #define RmStrScanf sscanf 00911 00912 #define RmStrTokT strtok 00913 00914 #define RmStrAtoF atof 00915 #define RmStrAtoI atoi 00916 #define RmStrAtoL atol 00917 00918 #endif 00919 00920 typedef RmLinkedList<RmStringT> RmStringList; 00921 typedef RmStringList::iterator RmStringListIterator; 00922 typedef RmStringList::const_iterator RmStringListConstIterator; 00923 00924 //========================================================================= 00932 //========================================================================= 00933 RM_API bool RmStringWtoA( RmStringT &strUnicode, RmStringA &strAscii ); 00934 00935 //========================================================================= 00943 //========================================================================= 00944 RM_API bool RmStringAtoW( RmStringA &strAscii, RmStringT &strUnicode ); 00945 00946 00947 #endif
1.3.6