00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00013 #ifndef _FBXSDK_CORE_BASE_STRING_H_
00014 #define _FBXSDK_CORE_BASE_STRING_H_
00015
00016 #include <fbxsdk/fbxsdk_def.h>
00017
00018 #if defined(FBXSDK_COMPILER_MSC)
00019 #if defined(FBXSDK_CPU_32)
00020 #if _MSC_VER <= 1600
00021 #define SIZE_OF_STDSTRING 32
00022 #elif _MSC_VER == 1700
00023 #define SIZE_OF_STDSTRING 28
00024 #endif
00025 #elif defined(FBXSDK_CPU_64)
00026 #if _MSC_VER <= 1600
00027 #define SIZE_OF_STDSTRING 48
00028 #elif _MSC_VER == 1700
00029 #define SIZE_OF_STDSTRING 40
00030 #endif
00031 #endif
00032 #elif defined(FBXSDK_COMPILER_GNU)
00033 #if defined(FBXSDK_CPU_32)
00034 #define SIZE_OF_STDSTRING 4
00035 #elif defined(FBXSDK_CPU_64)
00036 #define SIZE_OF_STDSTRING 8
00037 #endif
00038 #endif
00039
00040 #if !defined(SIZE_OF_STDSTRING)
00041 #error Unsupported architecture!
00042 #endif
00043
00044 #define FBXSDK_STRING_OPAQUE_OBJECT_HEADER void* mOpaqueChunk[SIZE_OF_STDSTRING/sizeof(void*)]
00045 #ifndef FBXSDK_STRING_OPAQUE_OBJECT
00046 #define FBXSDK_STRING_OPAQUE_OBJECT FBXSDK_STRING_OPAQUE_OBJECT_HEADER
00047 #endif
00048
00049 #include <fbxsdk/fbxsdk_nsbegin.h>
00050
00051
00052
00059 FBXSDK_DLL void FbxUTF8ToWC(const char* pInUTF8, wchar_t*& pOutWideChar, size_t* pOutWideCharSize = NULL);
00060
00067 FBXSDK_DLL void FbxWCToUTF8(const wchar_t* pInWideChar, char*& pOutUTF8, size_t* pOutUTF8Size = NULL);
00068
00069 #if defined(FBXSDK_ENV_WIN)
00070
00076 FBXSDK_DLL void FbxWCToAnsi(const wchar_t* pInWideChar, char*& pOutANSI, size_t* pOutANSISize = NULL);
00077
00084 FBXSDK_DLL void FbxAnsiToWC(const char* pInANSI, wchar_t*& pOutWideChar, size_t* pOutWideCharSize = NULL);
00085
00092 FBXSDK_DLL void FbxAnsiToUTF8(const char* pInANSI, char*& pOutUTF8, size_t* pOutUTF8Size = NULL);
00093
00100 FBXSDK_DLL void FbxUTF8ToAnsi(const char* pInUTF8, char*& pOutANSI, size_t* pOutANSISize = NULL);
00101 #endif
00102
00105 class FBXSDK_DLL FbxString
00106 {
00107 public:
00112
00113 FbxString();
00114
00117 FbxString(const FbxString& pStr);
00118
00121 FbxString(const char* pStr);
00122
00126 FbxString(char pChar, size_t pNbRepeat=1);
00127
00131 FbxString(const char* pCharPtr, size_t pLength);
00132
00135 FbxString(const int pValue);
00136
00139 FbxString(const float pValue);
00140
00143 FbxString(const double pValue);
00144
00146 ~FbxString();
00148
00153
00154 size_t GetLen() const;
00155
00157 bool IsEmpty() const;
00158
00160 FbxString& Clear();
00161
00165 char& operator[](int pIndex);
00166
00170 char operator[](int pIndex) const;
00171
00173 char* Buffer();
00174
00176 const char* Buffer()const;
00178
00185 const FbxString& operator=(const FbxString& pStr);
00186
00189 const FbxString& operator=(char pChar);
00190
00193 const FbxString& operator=(const char* pStr);
00194
00197 const FbxString& operator=(int pValue);
00198
00201 const FbxString& operator=(float pValue);
00202
00205 const FbxString& operator=(double pValue);
00206
00209 const FbxString& operator+=(const FbxString& pKStr);
00210
00213 const FbxString& operator+=(char pChar);
00214
00217 const FbxString& operator+=(const char* pStr);
00218
00221 const FbxString& operator+=(int pValue);
00222
00225 const FbxString& operator+=(float pValue);
00226
00229 const FbxString& operator+=(double pValue);
00230
00233 bool operator== (const FbxString& pStr) const;
00234
00237 bool operator!= (const FbxString& pStr) const;
00238
00241 bool operator< (const FbxString& pStr) const;
00242
00245 bool operator<= (const FbxString& pStr) const;
00246
00249 bool operator>= (const FbxString& pStr) const;
00250
00253 bool operator> (const FbxString& pStr) const;
00254
00257 bool operator== (const char* pStr) const;
00258
00261 bool operator!= (const char* pStr) const;
00262
00265 bool operator< (const char* pStr) const;
00266
00269 bool operator<= (const char* pStr) const;
00270
00273 bool operator>= (const char* pStr) const;
00274
00277 bool operator> (const char* pStr) const;
00278
00282 friend FBXSDK_DLL FbxString operator+(const FbxString& pKStr1, const FbxString& pKStr2);
00283
00287 friend FBXSDK_DLL FbxString operator+(const FbxString& pKStr, char pChar);
00288
00292 friend FBXSDK_DLL FbxString operator+(const FbxString& pKStr, const char* pStr);
00293
00297 friend FBXSDK_DLL FbxString operator+(const FbxString& pKStr, int pValue);
00298
00302 friend FBXSDK_DLL FbxString operator+(const FbxString& pKStr, float pValue);
00303
00307 friend FBXSDK_DLL FbxString operator+(const FbxString& pKStr, double pValue);
00308
00310 operator const char*() const;
00311
00315 const FbxString& Copy(const char* pStr, size_t pLength);
00316
00320 const FbxString& Append(const char* pStr, size_t pLength);
00321
00324 int Compare(const char* pStr) const;
00325
00328 int CompareNoCase(const char* pStr) const;
00329
00332 void Swap(FbxString& pStr);
00333
00335 FbxString Upper() const;
00336
00338 FbxString Lower() const;
00340
00348 FbxString Mid(size_t pFirst, size_t pCount) const;
00349
00352 FbxString Mid(size_t pFirst) const;
00353
00356 FbxString Left(size_t pCount) const;
00357
00360 FbxString Right(size_t pCount) const;
00362
00371 enum EPaddingType {eRight, eLeft, eBoth};
00372
00377 FbxString Pad(EPaddingType pPadding, size_t pLen, char pCar=' ') const;
00378
00381 FbxString UnPad(EPaddingType pPadding) const;
00383
00392 int Find(char pChar, size_t pStartPosition=0) const;
00393
00398 int Find(const char* pStrSub, size_t pStartPosition=0) const;
00399
00403 int ReverseFind(char pChar) const;
00404
00409 int FindOneOf(const char* pStrCharSet, size_t pStartPosition=0) const;
00410
00416 bool FindAndReplace(const char* pFind, const char* pReplaceBy, size_t pStartPosition=0);
00417
00422 bool ReplaceAll(const char* pFind, const char* pReplaceBy);
00423
00428 bool ReplaceAll(char pFind, char pReplaceBy);
00430
00438 int GetTokenCount(const char* pSpans) const;
00439
00443 FbxString GetToken(int pTokenIndex, const char* pSpans) const;
00445
00446 private:
00447 FBXSDK_STRING_OPAQUE_OBJECT;
00448 };
00449
00450 FBXSDK_INCOMPATIBLE_WITH_ARRAY(FbxString);
00451
00453 FBXSDK_DLL FbxString operator+(const FbxString& pKStr1, const FbxString& pKStr2);
00454
00456 FBXSDK_DLL FbxString operator+(const FbxString& pKStr, char pChar);
00457
00459 FBXSDK_DLL FbxString operator+(const FbxString& pKStr, const char* pStr);
00460
00462 FBXSDK_DLL FbxString operator+(const FbxString& pKStr, int pValue);
00463
00465 FBXSDK_DLL FbxString operator+(const FbxString& pKStr, float pValue);
00466
00468 FBXSDK_DLL FbxString operator+(const FbxString& pKStr, double pValue);
00469
00471 class FbxStringCompare
00472 {
00473 public:
00479 inline int operator()(const FbxString& pKeyA, const FbxString& pKeyB) const
00480 {
00481 return (pKeyA < pKeyB) ? -1 : ((pKeyB < pKeyA) ? 1 : 0);
00482 }
00483 };
00484
00486 class FbxCharCompare
00487 {
00488 public:
00490 inline int operator()(const char* pKeyA, const char* pKeyB) const
00491 {
00492 return strcmp(pKeyA, pKeyB);
00493 }
00494 };
00495
00500 inline void FbxRemoveChar(FbxString& pString, char pToRemove)
00501 {
00502 int lPos = pString.ReverseFind(pToRemove);
00503 while( lPos >= 0 )
00504 {
00505 pString = pString.Left(lPos) + pString.Mid(lPos + 1);
00506 lPos = pString.ReverseFind(pToRemove);
00507 }
00508 }
00509
00510 #include <fbxsdk/fbxsdk_nsend.h>
00511
00512 #endif