Chromium Code Reviews| 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_BASIC_H_ | 7 #ifndef _FX_BASIC_H_ |
| 8 #define _FX_BASIC_H_ | 8 #define _FX_BASIC_H_ |
| 9 #ifndef _FX_SYSTEM_H_ | 9 #ifndef _FX_SYSTEM_H_ |
| 10 #include "fx_system.h" | 10 #include "fx_system.h" |
| 11 #endif | 11 #endif |
| 12 #ifndef _FX_MEMORY_H_ | 12 #ifndef _FX_MEMORY_H_ |
| 13 #include "fx_memory.h" | 13 #include "fx_memory.h" |
| 14 #endif | 14 #endif |
| 15 #ifndef _FX_STRING_H_ | 15 #ifndef _FX_STRING_H_ |
| 16 #include "fx_string.h" | 16 #include "fx_string.h" |
| 17 #endif | 17 #endif |
| 18 #ifndef _FX_STREAM_H_ | 18 #ifndef _FX_STREAM_H_ |
| 19 #include "fx_stream.h" | 19 #include "fx_stream.h" |
| 20 #endif | 20 #endif |
| 21 class CFX_BinaryBuf : public CFX_Object | 21 class CFX_BinaryBuf : public CFX_Object |
| 22 { | 22 { |
| 23 public: | 23 public: |
| 24 | 24 CFX_BinaryBuf(); |
| 25 CFX_BinaryBuf(IFX_Allocator* pAllocator = NULL); | 25 CFX_BinaryBuf(FX_STRSIZE size); |
| 26 | |
| 27 CFX_BinaryBuf(FX_STRSIZE size, IFX_Allocator* pAllocator = NULL); | |
| 28 | 26 |
| 29 ~CFX_BinaryBuf(); | 27 ~CFX_BinaryBuf(); |
| 30 | 28 |
| 31 void Clear(); | 29 void Clear(); |
| 32 | 30 |
| 33 void EstimateSize(FX_STRSIZE size, FX _STRSIZE alloc_step = 0); | 31 void EstimateSize(FX_STRSIZE size, FX _STRSIZE alloc_step = 0); |
| 34 | 32 |
| 35 void AppendBlock(const void* pBuf, FX _STRSIZE size); | 33 void AppendBlock(const void* pBuf, FX _STRSIZE size); |
| 36 | 34 |
| 37 void AppendFill(FX_BYTE byte, FX_STRS IZE count); | 35 void AppendFill(FX_BYTE byte, FX_STRS IZE count); |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 63 { | 61 { |
| 64 return m_pBuffer; | 62 return m_pBuffer; |
| 65 } | 63 } |
| 66 | 64 |
| 67 FX_STRSIZE GetSize() const | 65 FX_STRSIZE GetSize() const |
| 68 { | 66 { |
| 69 return m_DataSize; | 67 return m_DataSize; |
| 70 } | 68 } |
| 71 | 69 |
| 72 CFX_ByteStringC GetByteString() const; | 70 CFX_ByteStringC GetByteString() const; |
| 73 void GetByteStringL(CFX_ByteStringL & str) const; | |
| 74 | 71 |
| 75 void DetachBuffer(); | 72 void DetachBuffer(); |
| 76 | |
| 77 IFX_Allocator* m_pAllocator; | |
| 78 protected: | 73 protected: |
| 79 | 74 |
| 80 FX_STRSIZE m_AllocStep; | 75 FX_STRSIZE m_AllocStep; |
| 81 | 76 |
| 82 FX_LPBYTE m_pBuffer; | 77 FX_LPBYTE m_pBuffer; |
| 83 | 78 |
| 84 FX_STRSIZE m_DataSize; | 79 FX_STRSIZE m_DataSize; |
| 85 | 80 |
| 86 FX_STRSIZE m_AllocSize; | 81 FX_STRSIZE m_AllocSize; |
| 87 | 82 |
| 88 void ExpandBuf(FX_STRSIZE size); | 83 void ExpandBuf(FX_STRSIZE size); |
| 89 }; | 84 }; |
| 90 class CFX_ByteTextBuf : public CFX_BinaryBuf | 85 class CFX_ByteTextBuf : public CFX_BinaryBuf |
| 91 { | 86 { |
| 92 public: | 87 public: |
| 93 | 88 |
| 94 CFX_ByteTextBuf(IFX_Allocator* pAllocator = NULL) : CFX_BinaryBuf(pAllocator ) {} | |
| 95 | |
| 96 void operator = (FX_BSTR str); | 89 void operator = (FX_BSTR str); |
| 97 | 90 |
| 98 void AppendChar(int ch) | 91 void AppendChar(int ch) |
| 99 { | 92 { |
| 100 AppendByte((FX_BYTE)ch); | 93 AppendByte((FX_BYTE)ch); |
| 101 } | 94 } |
| 102 | 95 |
| 103 CFX_ByteTextBuf& operator << (int i); | 96 CFX_ByteTextBuf& operator << (int i); |
| 104 | 97 |
| 105 CFX_ByteTextBuf& operator << (FX_DWORD i); | 98 CFX_ByteTextBuf& operator << (FX_DWORD i); |
| 106 | 99 |
| 107 CFX_ByteTextBuf& operator << (double f); | 100 CFX_ByteTextBuf& operator << (double f); |
| 108 | 101 |
| 109 CFX_ByteTextBuf& operator << (FX_BSTR lpsz); | 102 CFX_ByteTextBuf& operator << (FX_BSTR lpsz); |
| 110 | 103 |
| 111 CFX_ByteTextBuf& operator << (const CFX_ByteTextBuf& buf); | 104 CFX_ByteTextBuf& operator << (const CFX_ByteTextBuf& buf); |
| 112 | 105 |
| 113 FX_STRSIZE GetLength() const | 106 FX_STRSIZE GetLength() const |
| 114 { | 107 { |
| 115 return m_DataSize; | 108 return m_DataSize; |
| 116 } | 109 } |
| 117 }; | 110 }; |
| 118 class CFX_WideTextBuf : public CFX_BinaryBuf | 111 class CFX_WideTextBuf : public CFX_BinaryBuf |
| 119 { | 112 { |
| 120 public: | 113 public: |
| 121 | 114 |
| 122 CFX_WideTextBuf(IFX_Allocator* pAllocator = NULL) : CFX_BinaryBuf(pAllocator ) {} | |
| 123 | |
| 124 void operator = (FX_LPCWSTR lpsz); | 115 void operator = (FX_LPCWSTR lpsz); |
| 125 | 116 |
| 126 void operator = (FX_WSTR str); | 117 void operator = (FX_WSTR str); |
| 127 | 118 |
| 128 void AppendChar(FX_WCHAR wch); | 119 void AppendChar(FX_WCHAR wch); |
| 129 | 120 |
| 130 CFX_WideTextBuf& operator << (int i); | 121 CFX_WideTextBuf& operator << (int i); |
| 131 | 122 |
| 132 CFX_WideTextBuf& operator << (double f); | 123 CFX_WideTextBuf& operator << (double f); |
| 133 | 124 |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 147 { | 138 { |
| 148 return (FX_LPWSTR)m_pBuffer; | 139 return (FX_LPWSTR)m_pBuffer; |
| 149 } | 140 } |
| 150 | 141 |
| 151 void Delete(int start_index, int coun t) | 142 void Delete(int start_index, int coun t) |
| 152 { | 143 { |
| 153 CFX_BinaryBuf::Delete(start_index * sizeof(FX_WCHAR), count * sizeof(FX_ WCHAR)); | 144 CFX_BinaryBuf::Delete(start_index * sizeof(FX_WCHAR), count * sizeof(FX_ WCHAR)); |
| 154 } | 145 } |
| 155 | 146 |
| 156 CFX_WideStringC GetWideString() const; | 147 CFX_WideStringC GetWideString() const; |
| 157 void GetWideStringL(CFX_WideStringL& wideText) const; | |
| 158 }; | 148 }; |
| 159 class CFX_ArchiveSaver : public CFX_Object | 149 class CFX_ArchiveSaver : public CFX_Object |
| 160 { | 150 { |
| 161 public: | 151 public: |
| 162 | 152 CFX_ArchiveSaver() : m_pStream(NULL) {} |
| 163 CFX_ArchiveSaver(IFX_Allocator* pAllocator = NULL) : m_SavingBuf(pAllocator) , m_pStream(NULL) {} | |
| 164 | 153 |
| 165 CFX_ArchiveSaver& operator << (FX_BYTE i); | 154 CFX_ArchiveSaver& operator << (FX_BYTE i); |
| 166 | 155 |
| 167 CFX_ArchiveSaver& operator << (int i); | 156 CFX_ArchiveSaver& operator << (int i); |
| 168 | 157 |
| 169 CFX_ArchiveSaver& operator << (FX_DWORD i); | 158 CFX_ArchiveSaver& operator << (FX_DWORD i); |
| 170 | 159 |
| 171 CFX_ArchiveSaver& operator << (FX_FLOAT i); | 160 CFX_ArchiveSaver& operator << (FX_FLOAT i); |
| 172 | 161 |
| 173 CFX_ArchiveSaver& operator << (double i); | 162 CFX_ArchiveSaver& operator << (double i); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 227 | 216 |
| 228 FX_DWORD m_LoadingPos; | 217 FX_DWORD m_LoadingPos; |
| 229 | 218 |
| 230 FX_LPCBYTE m_pLoadingBuf; | 219 FX_LPCBYTE m_pLoadingBuf; |
| 231 | 220 |
| 232 FX_DWORD m_LoadingSize; | 221 FX_DWORD m_LoadingSize; |
| 233 }; | 222 }; |
| 234 class IFX_BufferArchive | 223 class IFX_BufferArchive |
| 235 { | 224 { |
| 236 public: | 225 public: |
| 237 | 226 IFX_BufferArchive(FX_STRSIZE size); |
| 238 IFX_BufferArchive(FX_STRSIZE size, IFX_Allocator* pAllocator = NULL); | |
| 239 | 227 |
| 240 | 228 |
| 241 virtual void Clear(); | 229 virtual void Clear(); |
| 242 | 230 |
| 243 | 231 |
| 244 FX_BOOL Flush(); | 232 FX_BOOL Flush(); |
| 245 | 233 |
| 246 | 234 |
| 247 FX_INT32 AppendBlock(const void* pBuf, size_t siz e); | 235 FX_INT32 AppendBlock(const void* pBuf, size_t siz e); |
| 248 | 236 |
| 249 FX_INT32 AppendByte(FX_BYTE byte); | 237 FX_INT32 AppendByte(FX_BYTE byte); |
| 250 | 238 |
| 251 FX_INT32 AppendDWord(FX_DWORD i); | 239 FX_INT32 AppendDWord(FX_DWORD i); |
| 252 | 240 |
| 253 | 241 |
| 254 FX_INT32 AppendString(FX_BSTR lpsz); | 242 FX_INT32 AppendString(FX_BSTR lpsz); |
| 255 | 243 |
| 256 protected: | 244 protected: |
| 257 | 245 |
| 258 virtual FX_BOOL DoWork(const void* pBuf, size_t size) = 0; | 246 virtual FX_BOOL DoWork(const void* pBuf, size_t size) = 0; |
| 259 | 247 |
| 260 | |
| 261 IFX_Allocator* m_pAllocator; | |
| 262 | |
| 263 FX_STRSIZE m_BufSize; | 248 FX_STRSIZE m_BufSize; |
| 264 | 249 |
| 265 FX_LPBYTE m_pBuffer; | 250 FX_LPBYTE m_pBuffer; |
| 266 | 251 |
| 267 FX_STRSIZE m_Length; | 252 FX_STRSIZE m_Length; |
| 268 }; | 253 }; |
| 269 class CFX_FileBufferArchive : public IFX_BufferArchive, public CFX_Object | 254 class CFX_FileBufferArchive : public IFX_BufferArchive, public CFX_Object |
| 270 { | 255 { |
| 271 public: | 256 public: |
| 272 CFX_FileBufferArchive(FX_STRSIZE size = 32768, IFX_Allocator* pAllocator = N ULL); | 257 CFX_FileBufferArchive(FX_STRSIZE size = 32768); |
| 273 ~CFX_FileBufferArchive(); | 258 ~CFX_FileBufferArchive(); |
| 274 virtual void Clear(); | 259 virtual void Clear(); |
| 275 | 260 |
| 276 FX_BOOL AttachFile(IFX_StreamWrite *pFil e, FX_BOOL bTakeover = FALSE); | 261 FX_BOOL AttachFile(IFX_StreamWrite *pFil e, FX_BOOL bTakeover = FALSE); |
| 277 | 262 |
| 278 FX_BOOL AttachFile(FX_LPCWSTR filename); | 263 FX_BOOL AttachFile(FX_LPCWSTR filename); |
| 279 | 264 |
| 280 FX_BOOL AttachFile(FX_LPCSTR filename); | 265 FX_BOOL AttachFile(FX_LPCSTR filename); |
| 281 private: | 266 private: |
| 282 | 267 |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 293 | 278 |
| 294 CFX_WideString (*m_GetWideString)(CFX_CharMap* pMap, const CFX_ByteStri ng& bstr); | 279 CFX_WideString (*m_GetWideString)(CFX_CharMap* pMap, const CFX_ByteStri ng& bstr); |
| 295 | 280 |
| 296 CFX_ByteString (*m_GetByteString)(CFX_CharMap* pMap, const CFX_WideStri ng& wstr); | 281 CFX_ByteString (*m_GetByteString)(CFX_CharMap* pMap, const CFX_WideStri ng& wstr); |
| 297 | 282 |
| 298 FX_INT32 (*m_GetCodePage)(); | 283 FX_INT32 (*m_GetCodePage)(); |
| 299 }; | 284 }; |
| 300 class CFX_UTF8Decoder | 285 class CFX_UTF8Decoder |
| 301 { | 286 { |
| 302 public: | 287 public: |
| 303 | 288 CFX_UTF8Decoder() |
| 304 CFX_UTF8Decoder(IFX_Allocator* pAllocator = NULL) : m_Buffer(pAllocator) | |
| 305 { | 289 { |
| 306 m_PendingBytes = 0; | 290 m_PendingBytes = 0; |
| 307 } | 291 } |
| 308 | 292 |
| 309 void Clear(); | 293 void Clear(); |
| 310 | 294 |
| 311 void Input(FX_BYTE byte); | 295 void Input(FX_BYTE byte); |
| 312 | 296 |
| 313 void AppendChar(FX_DWORD ch); | 297 void AppendChar(FX_DWORD ch); |
| 314 | 298 |
| 315 void ClearStatus() | 299 void ClearStatus() |
| 316 { | 300 { |
| 317 m_PendingBytes = 0; | 301 m_PendingBytes = 0; |
| 318 } | 302 } |
| 319 | 303 |
| 320 CFX_WideStringC GetResult() const | 304 CFX_WideStringC GetResult() const |
| 321 { | 305 { |
| 322 return m_Buffer.GetWideString(); | 306 return m_Buffer.GetWideString(); |
| 323 } | 307 } |
| 324 void GetResult(CFX_WideStringL &result) const | |
| 325 { | |
| 326 m_Buffer.GetWideStringL(result); | |
| 327 } | |
| 328 protected: | 308 protected: |
| 329 | 309 |
| 330 int m_PendingBytes; | 310 int m_PendingBytes; |
| 331 | 311 |
| 332 FX_DWORD m_PendingChar; | 312 FX_DWORD m_PendingChar; |
| 333 | 313 |
| 334 CFX_WideTextBuf m_Buffer; | 314 CFX_WideTextBuf m_Buffer; |
| 335 }; | 315 }; |
| 336 class CFX_UTF8Encoder | 316 class CFX_UTF8Encoder |
| 337 { | 317 { |
| 338 public: | 318 public: |
| 339 | 319 CFX_UTF8Encoder() |
| 340 CFX_UTF8Encoder(IFX_Allocator* pAllocator = NULL) : m_Buffer(pAllocator) | |
| 341 { | 320 { |
| 342 m_UTF16First = 0; | 321 m_UTF16First = 0; |
| 343 } | 322 } |
| 344 | 323 |
| 345 void Input(FX_WCHAR unicode); | 324 void Input(FX_WCHAR unicode); |
| 346 | 325 |
| 347 void AppendStr(FX_BSTR str) | 326 void AppendStr(FX_BSTR str) |
| 348 { | 327 { |
| 349 m_UTF16First = 0; | 328 m_UTF16First = 0; |
| 350 m_Buffer << str; | 329 m_Buffer << str; |
| 351 } | 330 } |
| 352 | 331 |
| 353 CFX_ByteStringC GetResult() const | 332 CFX_ByteStringC GetResult() const |
| 354 { | 333 { |
| 355 return m_Buffer.GetByteString(); | 334 return m_Buffer.GetByteString(); |
| 356 } | 335 } |
| 357 void GetResult(CFX_ByteStringL &result) const | |
| 358 { | |
| 359 m_Buffer.GetByteStringL(result); | |
| 360 } | |
| 361 protected: | 336 protected: |
| 362 | 337 |
| 363 CFX_ByteTextBuf m_Buffer; | 338 CFX_ByteTextBuf m_Buffer; |
| 364 | 339 |
| 365 FX_DWORD m_UTF16First; | 340 FX_DWORD m_UTF16First; |
| 366 }; | 341 }; |
| 367 CFX_ByteString FX_UrlEncode(const CFX_WideString& wsUrl); | 342 CFX_ByteString FX_UrlEncode(const CFX_WideString& wsUrl); |
| 368 CFX_WideString FX_UrlDecode(const CFX_ByteString& bsUrl); | 343 CFX_WideString FX_UrlDecode(const CFX_ByteString& bsUrl); |
| 369 CFX_ByteString FX_EncodeURI(const CFX_WideString& wsURI); | 344 CFX_ByteString FX_EncodeURI(const CFX_WideString& wsURI); |
| 370 CFX_WideString FX_DecodeURI(const CFX_ByteString& bsURI); | 345 CFX_WideString FX_DecodeURI(const CFX_ByteString& bsURI); |
| 371 class CFX_BasicArray : public CFX_Object | 346 class CFX_BasicArray : public CFX_Object |
| 372 { | 347 { |
| 373 public: | |
| 374 | |
| 375 IFX_Allocator* m_pAllocator; | |
| 376 protected: | 348 protected: |
| 377 | 349 CFX_BasicArray(int unit_size); |
| 378 CFX_BasicArray(int unit_size, IFX_Allocator* pAllocator = NULL); | |
| 379 | 350 |
| 380 ~CFX_BasicArray(); | 351 ~CFX_BasicArray(); |
| 381 | 352 |
| 382 FX_BOOL SetSize(int nNewSize, int nGrowBy); | 353 FX_BOOL SetSize(int nNewSize, int nGrowBy); |
| 383 | 354 |
| 384 FX_BOOL Append(const CFX_BasicArray& src); | 355 FX_BOOL Append(const CFX_BasicArray& src); |
| 385 | 356 |
| 386 FX_BOOL Copy(const CFX_BasicArray& src); | 357 FX_BOOL Copy(const CFX_BasicArray& src); |
| 387 | 358 |
| 388 FX_LPBYTE InsertSpaceAt(int nIndex, int nCount); | 359 FX_LPBYTE InsertSpaceAt(int nIndex, int nCount); |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 401 int m_nMaxSize; | 372 int m_nMaxSize; |
| 402 | 373 |
| 403 int m_nGrowBy; | 374 int m_nGrowBy; |
| 404 | 375 |
| 405 int m_nUnitSize; | 376 int m_nUnitSize; |
| 406 }; | 377 }; |
| 407 template<class TYPE> | 378 template<class TYPE> |
| 408 class CFX_ArrayTemplate : public CFX_BasicArray | 379 class CFX_ArrayTemplate : public CFX_BasicArray |
| 409 { | 380 { |
| 410 public: | 381 public: |
| 411 | 382 CFX_ArrayTemplate() : CFX_BasicArray(sizeof(TYPE)) {} |
| 412 CFX_ArrayTemplate(IFX_Allocator* pAllocator = NULL) : CFX_BasicArray(sizeof( TYPE), pAllocator) {} | |
| 413 | 383 |
| 414 int GetSize() const | 384 int GetSize() const |
| 415 { | 385 { |
| 416 return m_nSize; | 386 return m_nSize; |
| 417 } | 387 } |
| 418 | 388 |
| 419 int GetUpperBound() const | 389 int GetUpperBound() const |
| 420 { | 390 { |
| 421 return m_nSize - 1; | 391 return m_nSize - 1; |
| 422 } | 392 } |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 568 typedef CFX_ArrayTemplate<FX_WORD> CFX_WordArray; | 538 typedef CFX_ArrayTemplate<FX_WORD> CFX_WordArray; |
| 569 typedef CFX_ArrayTemplate<FX_DWORD> CFX_DWordArray; | 539 typedef CFX_ArrayTemplate<FX_DWORD> CFX_DWordArray; |
| 570 typedef CFX_ArrayTemplate<void*> CFX_PtrArray; | 540 typedef CFX_ArrayTemplate<void*> CFX_PtrArray; |
| 571 typedef CFX_ArrayTemplate<FX_FILESIZE> CFX_FileSizeArray; | 541 typedef CFX_ArrayTemplate<FX_FILESIZE> CFX_FileSizeArray; |
| 572 typedef CFX_ArrayTemplate<FX_FLOAT> CFX_FloatArray; | 542 typedef CFX_ArrayTemplate<FX_FLOAT> CFX_FloatArray; |
| 573 typedef CFX_ArrayTemplate<FX_INT32> CFX_Int32Array; | 543 typedef CFX_ArrayTemplate<FX_INT32> CFX_Int32Array; |
| 574 template <class ObjectClass> | 544 template <class ObjectClass> |
| 575 class CFX_ObjectArray : public CFX_BasicArray | 545 class CFX_ObjectArray : public CFX_BasicArray |
| 576 { | 546 { |
| 577 public: | 547 public: |
| 578 | 548 CFX_ObjectArray() : CFX_BasicArray(sizeof(ObjectClass)) {} |
| 579 CFX_ObjectArray(IFX_Allocator* pAllocator = NULL) : CFX_BasicArray(sizeof(Ob jectClass), pAllocator) {} | |
| 580 | 549 |
| 581 ~CFX_ObjectArray() | 550 ~CFX_ObjectArray() |
| 582 { | 551 { |
| 583 RemoveAll(); | 552 RemoveAll(); |
| 584 } | 553 } |
| 585 | 554 |
| 586 void Add(const ObjectClass& data) | 555 void Add(const ObjectClass& data) |
| 587 { | 556 { |
| 588 new ((void*)InsertSpaceAt(m_nSize, 1)) ObjectClass(data); | 557 new ((void*)InsertSpaceAt(m_nSize, 1)) ObjectClass(data); |
| 589 } | 558 } |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 685 ((ObjectClass*)GetDataPtr(i))->~ObjectClass(); | 654 ((ObjectClass*)GetDataPtr(i))->~ObjectClass(); |
| 686 } | 655 } |
| 687 CFX_BasicArray::SetSize(0, -1); | 656 CFX_BasicArray::SetSize(0, -1); |
| 688 } | 657 } |
| 689 }; | 658 }; |
| 690 typedef CFX_ObjectArray<CFX_ByteString> CFX_ByteStringArray; | 659 typedef CFX_ObjectArray<CFX_ByteString> CFX_ByteStringArray; |
| 691 typedef CFX_ObjectArray<CFX_WideString> CFX_WideStringArray; | 660 typedef CFX_ObjectArray<CFX_WideString> CFX_WideStringArray; |
| 692 class CFX_BaseSegmentedArray : public CFX_Object | 661 class CFX_BaseSegmentedArray : public CFX_Object |
| 693 { | 662 { |
| 694 public: | 663 public: |
| 695 | 664 CFX_BaseSegmentedArray(int unit_size = 1, int segment_units = 512, int index _size = 8); |
| 696 CFX_BaseSegmentedArray(int unit_size = 1, int segment_units = 512, int index _size = 8, IFX_Allocator* pAllocator = NULL); | |
| 697 | 665 |
| 698 ~CFX_BaseSegmentedArray(); | 666 ~CFX_BaseSegmentedArray(); |
| 699 | 667 |
| 700 void SetUnitSize(int unit_size, int segment_units, int index_size = 8 ); | 668 void SetUnitSize(int unit_size, int segment_units, int index_size = 8 ); |
| 701 | 669 |
| 702 void* Add(); | 670 void* Add(); |
| 703 | 671 |
| 704 void* GetAt(int index) const; | 672 void* GetAt(int index) const; |
| 705 | 673 |
| 706 void RemoveAll(); | 674 void RemoveAll(); |
| 707 | 675 |
| 708 void Delete(int index, int count = 1); | 676 void Delete(int index, int count = 1); |
| 709 | 677 |
| 710 int GetSize() const | 678 int GetSize() const |
| 711 { | 679 { |
| 712 return m_DataSize; | 680 return m_DataSize; |
| 713 } | 681 } |
| 714 | 682 |
| 715 int GetSegmentSize() const | 683 int GetSegmentSize() const |
| 716 { | 684 { |
| 717 return m_SegmentSize; | 685 return m_SegmentSize; |
| 718 } | 686 } |
| 719 | 687 |
| 720 int GetUnitSize() const | 688 int GetUnitSize() const |
| 721 { | 689 { |
| 722 return m_UnitSize; | 690 return m_UnitSize; |
| 723 } | 691 } |
| 724 | 692 |
| 725 void* Iterate(FX_BOOL (*callback)(void* param, void* pData), void* par am) const; | 693 void* Iterate(FX_BOOL (*callback)(void* param, void* pData), void* par am) const; |
| 726 | |
| 727 IFX_Allocator* m_pAllocator; | |
| 728 private: | 694 private: |
| 729 | 695 |
| 730 int m_UnitSize; | 696 int m_UnitSize; |
| 731 | 697 |
| 732 short m_SegmentSize; | 698 short m_SegmentSize; |
| 733 | 699 |
| 734 FX_BYTE m_IndexSize; | 700 FX_BYTE m_IndexSize; |
| 735 | 701 |
| 736 FX_BYTE m_IndexDepth; | 702 FX_BYTE m_IndexDepth; |
| 737 | 703 |
| 738 int m_DataSize; | 704 int m_DataSize; |
| 739 | 705 |
| 740 void* m_pIndex; | 706 void* m_pIndex; |
| 741 void** GetIndex(int seg_index) const; | 707 void** GetIndex(int seg_index) const; |
| 742 void* IterateIndex(int level, int& start, void** pIndex, FX_BOOL (*cal lback)(void* param, void* pData), void* param) const; | 708 void* IterateIndex(int level, int& start, void** pIndex, FX_BOOL (*cal lback)(void* param, void* pData), void* param) const; |
| 743 void* IterateSegment(FX_LPCBYTE pSegment, int count, FX_BOOL (*callbac k)(void* param, void* pData), void* param) const; | 709 void* IterateSegment(FX_LPCBYTE pSegment, int count, FX_BOOL (*callbac k)(void* param, void* pData), void* param) const; |
| 744 }; | 710 }; |
| 745 template <class ElementType> | 711 template <class ElementType> |
| 746 class CFX_SegmentedArray : public CFX_BaseSegmentedArray | 712 class CFX_SegmentedArray : public CFX_BaseSegmentedArray |
| 747 { | 713 { |
| 748 public: | 714 public: |
| 749 | 715 CFX_SegmentedArray(int segment_units, int index_size = 8) |
| 750 CFX_SegmentedArray(int segment_units, int index_size = 8, IFX_Allocator* pAl locator = NULL) | 716 : CFX_BaseSegmentedArray(sizeof(ElementType), segment_units, index_size) |
| 751 : CFX_BaseSegmentedArray(sizeof(ElementType), segment_units, index_size, pAllocator) | |
| 752 {} | 717 {} |
| 753 | 718 |
| 754 void Add(ElementType data) | 719 void Add(ElementType data) |
| 755 { | 720 { |
| 756 *(ElementType*)CFX_BaseSegmentedArray::Add() = data; | 721 *(ElementType*)CFX_BaseSegmentedArray::Add() = data; |
| 757 } | 722 } |
| 758 | 723 |
| 759 ElementType& operator [] (int index) | 724 ElementType& operator [] (int index) |
| 760 { | 725 { |
| 761 return *(ElementType*)CFX_BaseSegmentedArray::GetAt(index); | 726 return *(ElementType*)CFX_BaseSegmentedArray::GetAt(index); |
| 762 } | 727 } |
| 763 }; | 728 }; |
| 764 template <class DataType, int FixedSize> | 729 template <class DataType, int FixedSize> |
| 765 class CFX_FixedBufGrow : public CFX_Object | 730 class CFX_FixedBufGrow : public CFX_Object |
| 766 { | 731 { |
| 767 public: | 732 public: |
| 768 CFX_FixedBufGrow(IFX_Allocator* pAllocator = NULL) | 733 CFX_FixedBufGrow() : m_pData(NULL) |
| 769 : m_pAllocator(pAllocator) | |
| 770 , m_pData(NULL) | |
| 771 {} | 734 {} |
| 772 CFX_FixedBufGrow(int data_size, IFX_Allocator* pAllocator = NULL) | 735 CFX_FixedBufGrow(int data_size) : m_pData(NULL) |
| 773 : m_pAllocator(pAllocator) | |
| 774 , m_pData(NULL) | |
| 775 { | 736 { |
| 776 if (data_size > FixedSize) { | 737 if (data_size > FixedSize) { |
| 777 m_pData = FX_Allocator_Alloc(m_pAllocator, DataType, data_size); | 738 m_pData = FX_Alloc(DataType, data_size); |
| 778 } else { | 739 } else { |
| 779 FXSYS_memset32(m_Data, 0, sizeof(DataType)*FixedSize); | 740 FXSYS_memset32(m_Data, 0, sizeof(DataType)*FixedSize); |
| 780 } | 741 } |
| 781 } | 742 } |
| 782 void SetDataSize(int data_size) | 743 void SetDataSize(int data_size) |
| 783 { | 744 { |
| 784 if (m_pData) { | 745 if (m_pData) { |
| 785 FX_Allocator_Free(m_pAllocator, m_pData); | 746 FX_Free(m_pData); |
| 786 } | 747 } |
| 787 m_pData = NULL; | 748 m_pData = NULL; |
| 788 if (data_size > FixedSize) { | 749 if (data_size > FixedSize) { |
| 789 m_pData = FX_Allocator_Alloc(m_pAllocator, DataType, data_size); | 750 m_pData = FX_Alloc(DataType, data_size); |
| 790 } else { | 751 } else { |
| 791 FXSYS_memset32(m_Data, 0, sizeof(DataType)*FixedSize); | 752 FXSYS_memset32(m_Data, 0, sizeof(DataType)*FixedSize); |
| 792 } | 753 } |
| 793 } | 754 } |
| 794 ~CFX_FixedBufGrow() | 755 ~CFX_FixedBufGrow() |
| 795 { | 756 { |
| 796 if (m_pData) { | 757 if (m_pData) { |
| 797 FX_Allocator_Free(m_pAllocator, m_pData); | 758 FX_Free(m_pData); |
| 798 } | 759 } |
| 799 } | 760 } |
| 800 operator DataType*() | 761 operator DataType*() |
| 801 { | 762 { |
| 802 return m_pData ? m_pData : m_Data; | 763 return m_pData ? m_pData : m_Data; |
| 803 } | 764 } |
| 804 private: | 765 private: |
| 805 IFX_Allocator* m_pAllocator; | |
| 806 DataType m_Data[FixedSize]; | 766 DataType m_Data[FixedSize]; |
| 807 DataType* m_pData; | 767 DataType* m_pData; |
| 808 }; | 768 }; |
| 809 template <class DataType> | 769 template <class DataType> |
| 810 class CFX_TempBuf | 770 class CFX_TempBuf |
| 811 { | 771 { |
| 812 public: | 772 public: |
| 813 CFX_TempBuf(int size, IFX_Allocator* pAllocator = NULL) : m_pAllocator(pAllo cator) | 773 CFX_TempBuf(int size) |
| 814 { | 774 { |
| 815 m_pData = FX_Allocator_Alloc(m_pAllocator, DataType, size); | 775 m_pData = FX_Alloc(DataType, size); |
| 816 } | 776 } |
| 817 ~CFX_TempBuf() | 777 ~CFX_TempBuf() |
| 818 { | 778 { |
| 819 if (m_pData) { | 779 if (m_pData) { |
| 820 FX_Allocator_Free(m_pAllocator, m_pData); | 780 FX_Free(m_pData); |
| 821 } | 781 } |
| 822 } | 782 } |
| 823 DataType& operator[](int i) | 783 DataType& operator[](int i) |
| 824 { | 784 { |
| 825 FXSYS_assert(m_pData != NULL); | 785 FXSYS_assert(m_pData != NULL); |
| 826 return m_pData[i]; | 786 return m_pData[i]; |
| 827 } | 787 } |
| 828 operator DataType*() | 788 operator DataType*() |
| 829 { | 789 { |
| 830 return m_pData; | 790 return m_pData; |
| 831 } | 791 } |
| 832 private: | 792 private: |
| 833 IFX_Allocator* m_pAllocator; | |
| 834 DataType* m_pData; | 793 DataType* m_pData; |
| 835 }; | 794 }; |
| 836 class CFX_MapPtrToPtr : public CFX_Object | 795 class CFX_MapPtrToPtr : public CFX_Object |
| 837 { | 796 { |
| 838 protected: | 797 protected: |
| 839 | 798 |
| 840 struct CAssoc { | 799 struct CAssoc { |
| 841 | 800 |
| 842 CAssoc* pNext; | 801 CAssoc* pNext; |
| 843 | 802 |
| 844 void* key; | 803 void* key; |
| 845 | 804 |
| 846 void* value; | 805 void* value; |
| 847 }; | 806 }; |
| 848 public: | 807 public: |
| 849 | 808 CFX_MapPtrToPtr(int nBlockSize = 10); |
| 850 CFX_MapPtrToPtr(int nBlockSize = 10, IFX_Allocator* pAllocator = NULL); | |
| 851 | 809 |
| 852 ~CFX_MapPtrToPtr(); | 810 ~CFX_MapPtrToPtr(); |
| 853 | 811 |
| 854 int GetCount() const | 812 int GetCount() const |
| 855 { | 813 { |
| 856 return m_nCount; | 814 return m_nCount; |
| 857 } | 815 } |
| 858 | 816 |
| 859 FX_BOOL IsEmpty() const | 817 FX_BOOL IsEmpty() const |
| 860 { | 818 { |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 884 void GetNextAssoc(FX_POSITION& rNextPosition, void*& rKey, void*& rValue) co nst; | 842 void GetNextAssoc(FX_POSITION& rNextPosition, void*& rKey, void*& rValue) co nst; |
| 885 | 843 |
| 886 FX_DWORD GetHashTableSize() const | 844 FX_DWORD GetHashTableSize() const |
| 887 { | 845 { |
| 888 return m_nHashTableSize; | 846 return m_nHashTableSize; |
| 889 } | 847 } |
| 890 | 848 |
| 891 void InitHashTable(FX_DWORD hashSize, FX_BOOL bAllocNow = TRUE); | 849 void InitHashTable(FX_DWORD hashSize, FX_BOOL bAllocNow = TRUE); |
| 892 protected: | 850 protected: |
| 893 | 851 |
| 894 IFX_Allocator* m_pAllocator; | |
| 895 | |
| 896 CAssoc** m_pHashTable; | 852 CAssoc** m_pHashTable; |
| 897 | 853 |
| 898 FX_DWORD m_nHashTableSize; | 854 FX_DWORD m_nHashTableSize; |
| 899 | 855 |
| 900 int m_nCount; | 856 int m_nCount; |
| 901 | 857 |
| 902 CAssoc* m_pFreeList; | 858 CAssoc* m_pFreeList; |
| 903 | 859 |
| 904 struct CFX_Plex* m_pBlocks; | 860 struct CFX_Plex* m_pBlocks; |
| 905 | 861 |
| 906 int m_nBlockSize; | 862 int m_nBlockSize; |
| 907 | 863 |
| 908 FX_DWORD HashKey(void* key) const; | 864 FX_DWORD HashKey(void* key) const; |
| 909 | 865 |
| 910 CAssoc* NewAssoc(); | 866 CAssoc* NewAssoc(); |
| 911 | 867 |
| 912 void FreeAssoc(CAssoc* pAssoc); | 868 void FreeAssoc(CAssoc* pAssoc); |
| 913 | 869 |
| 914 CAssoc* GetAssocAt(void* key, FX_DWORD& hash) const; | 870 CAssoc* GetAssocAt(void* key, FX_DWORD& hash) const; |
| 915 }; | 871 }; |
| 916 template <class KeyType, class ValueType> | 872 template <class KeyType, class ValueType> |
| 917 class CFX_MapPtrTemplate : public CFX_MapPtrToPtr | 873 class CFX_MapPtrTemplate : public CFX_MapPtrToPtr |
| 918 { | 874 { |
| 919 public: | 875 public: |
| 920 | 876 CFX_MapPtrTemplate() : CFX_MapPtrToPtr(10) {} |
| 921 CFX_MapPtrTemplate(IFX_Allocator* pAllocator = NULL) : CFX_MapPtrToPtr(10, p Allocator) {} | |
| 922 | 877 |
| 923 FX_BOOL Lookup(KeyType key, ValueType& rValue) const | 878 FX_BOOL Lookup(KeyType key, ValueType& rValue) const |
| 924 { | 879 { |
| 925 FX_LPVOID pValue = NULL; | 880 FX_LPVOID pValue = NULL; |
| 926 if (!CFX_MapPtrToPtr::Lookup((void*)(FX_UINTPTR)key, pValue)) { | 881 if (!CFX_MapPtrToPtr::Lookup((void*)(FX_UINTPTR)key, pValue)) { |
| 927 return FALSE; | 882 return FALSE; |
| 928 } | 883 } |
| 929 rValue = (ValueType)(FX_UINTPTR)pValue; | 884 rValue = (ValueType)(FX_UINTPTR)pValue; |
| 930 return TRUE; | 885 return TRUE; |
| 931 } | 886 } |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 951 void* pValue = NULL; | 906 void* pValue = NULL; |
| 952 CFX_MapPtrToPtr::GetNextAssoc(rNextPosition, pKey, pValue); | 907 CFX_MapPtrToPtr::GetNextAssoc(rNextPosition, pKey, pValue); |
| 953 rKey = (KeyType)(FX_UINTPTR)pKey; | 908 rKey = (KeyType)(FX_UINTPTR)pKey; |
| 954 rValue = (ValueType)(FX_UINTPTR)pValue; | 909 rValue = (ValueType)(FX_UINTPTR)pValue; |
| 955 } | 910 } |
| 956 }; | 911 }; |
| 957 class CFX_CMapDWordToDWord : public CFX_Object | 912 class CFX_CMapDWordToDWord : public CFX_Object |
| 958 { | 913 { |
| 959 public: | 914 public: |
| 960 | 915 |
| 961 CFX_CMapDWordToDWord(IFX_Allocator* pAllocator = NULL) : m_Buffer(pAllocator ) {} | |
| 962 | |
| 963 FX_BOOL Lookup(FX_DWORD key, FX_DWORD& value) const; | 916 FX_BOOL Lookup(FX_DWORD key, FX_DWORD& value) const; |
| 964 | 917 |
| 965 void SetAt(FX_DWORD key, FX_DWORD value); | 918 void SetAt(FX_DWORD key, FX_DWORD value); |
| 966 | 919 |
| 967 void EstimateSize(FX_DWORD size, FX_DWORD grow_by); | 920 void EstimateSize(FX_DWORD size, FX_DWORD grow_by); |
| 968 | 921 |
| 969 FX_POSITION GetStartPosition() const; | 922 FX_POSITION GetStartPosition() const; |
| 970 | 923 |
| 971 void GetNextAssoc(FX_POSITION& pos, FX_DWORD& key, FX _DWORD& value) const; | 924 void GetNextAssoc(FX_POSITION& pos, FX_DWORD& key, FX _DWORD& value) const; |
| 972 protected: | 925 protected: |
| 973 | 926 |
| 974 CFX_BinaryBuf m_Buffer; | 927 CFX_BinaryBuf m_Buffer; |
| 975 }; | 928 }; |
| 976 class CFX_MapByteStringToPtr : public CFX_Object | 929 class CFX_MapByteStringToPtr : public CFX_Object |
| 977 { | 930 { |
| 978 protected: | 931 protected: |
| 979 | 932 |
| 980 struct CAssoc { | 933 struct CAssoc { |
| 981 | 934 |
| 982 CAssoc* pNext; | 935 CAssoc* pNext; |
| 983 | 936 |
| 984 FX_DWORD nHashValue; | 937 FX_DWORD nHashValue; |
| 985 | 938 |
| 986 CFX_ByteString key; | 939 CFX_ByteString key; |
| 987 | 940 |
| 988 void* value; | 941 void* value; |
| 989 }; | 942 }; |
| 990 public: | 943 public: |
| 991 | 944 CFX_MapByteStringToPtr(int nBlockSize = 10); |
| 992 CFX_MapByteStringToPtr(int nBlockSize = 10, IFX_Allocator* pAllocator = NULL ); | |
| 993 | 945 |
| 994 int GetCount() const | 946 int GetCount() const |
| 995 { | 947 { |
| 996 return m_nCount; | 948 return m_nCount; |
| 997 } | 949 } |
| 998 | 950 |
| 999 FX_BOOL IsEmpty() const | 951 FX_BOOL IsEmpty() const |
| 1000 { | 952 { |
| 1001 return m_nCount == 0; | 953 return m_nCount == 0; |
| 1002 } | 954 } |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 1026 FX_DWORD GetHashTableSize() const | 978 FX_DWORD GetHashTableSize() const |
| 1027 { | 979 { |
| 1028 return m_nHashTableSize; | 980 return m_nHashTableSize; |
| 1029 } | 981 } |
| 1030 | 982 |
| 1031 void InitHashTable(FX_DWORD hashSize, FX_BOOL bAllocNow = TRUE); | 983 void InitHashTable(FX_DWORD hashSize, FX_BOOL bAllocNow = TRUE); |
| 1032 | 984 |
| 1033 FX_DWORD HashKey(FX_BSTR key) const; | 985 FX_DWORD HashKey(FX_BSTR key) const; |
| 1034 protected: | 986 protected: |
| 1035 | 987 |
| 1036 IFX_Allocator* m_pAllocator; | |
| 1037 | |
| 1038 CAssoc** m_pHashTable; | 988 CAssoc** m_pHashTable; |
| 1039 | 989 |
| 1040 FX_DWORD m_nHashTableSize; | 990 FX_DWORD m_nHashTableSize; |
| 1041 | 991 |
| 1042 int m_nCount; | 992 int m_nCount; |
| 1043 | 993 |
| 1044 CAssoc* m_pFreeList; | 994 CAssoc* m_pFreeList; |
| 1045 | 995 |
| 1046 struct CFX_Plex* m_pBlocks; | 996 struct CFX_Plex* m_pBlocks; |
| 1047 | 997 |
| 1048 int m_nBlockSize; | 998 int m_nBlockSize; |
| 1049 | 999 |
| 1050 CAssoc* NewAssoc(); | 1000 CAssoc* NewAssoc(); |
| 1051 | 1001 |
| 1052 void FreeAssoc(CAssoc* pAssoc); | 1002 void FreeAssoc(CAssoc* pAssoc); |
| 1053 | 1003 |
| 1054 CAssoc* GetAssocAt(FX_BSTR key, FX_DWORD& hash) const; | 1004 CAssoc* GetAssocAt(FX_BSTR key, FX_DWORD& hash) const; |
| 1055 public: | 1005 public: |
| 1056 | 1006 |
| 1057 ~CFX_MapByteStringToPtr(); | 1007 ~CFX_MapByteStringToPtr(); |
| 1058 }; | 1008 }; |
| 1059 class CFX_CMapByteStringToPtr : public CFX_Object | 1009 class CFX_CMapByteStringToPtr : public CFX_Object |
| 1060 { | 1010 { |
| 1061 public: | 1011 public: |
| 1062 | 1012 CFX_CMapByteStringToPtr(); |
| 1063 CFX_CMapByteStringToPtr(IFX_Allocator* pAllocator = NULL); | |
| 1064 | 1013 |
| 1065 ~CFX_CMapByteStringToPtr(); | 1014 ~CFX_CMapByteStringToPtr(); |
| 1066 | 1015 |
| 1067 void RemoveAll(); | 1016 void RemoveAll(); |
| 1068 | 1017 |
| 1069 FX_POSITION GetStartPosition() const; | 1018 FX_POSITION GetStartPosition() const; |
| 1070 | 1019 |
| 1071 void GetNextAssoc(FX_POSITION& rNextPosition, CFX_Byt eString& rKey, void*& rValue) const; | 1020 void GetNextAssoc(FX_POSITION& rNextPosition, CFX_Byt eString& rKey, void*& rValue) const; |
| 1072 | 1021 |
| 1073 FX_LPVOID GetNextValue(FX_POSITION& rNextPosition) const; | 1022 FX_LPVOID GetNextValue(FX_POSITION& rNextPosition) const; |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 1091 | 1040 |
| 1092 struct CNode { | 1041 struct CNode { |
| 1093 | 1042 |
| 1094 CNode* pNext; | 1043 CNode* pNext; |
| 1095 | 1044 |
| 1096 CNode* pPrev; | 1045 CNode* pPrev; |
| 1097 | 1046 |
| 1098 void* data; | 1047 void* data; |
| 1099 }; | 1048 }; |
| 1100 public: | 1049 public: |
| 1101 | 1050 CFX_PtrList(int nBlockSize = 10); |
| 1102 CFX_PtrList(int nBlockSize = 10, IFX_Allocator* pAllocator = NULL); | |
| 1103 | 1051 |
| 1104 FX_POSITION GetHeadPosition() const | 1052 FX_POSITION GetHeadPosition() const |
| 1105 { | 1053 { |
| 1106 return (FX_POSITION)m_pNodeHead; | 1054 return (FX_POSITION)m_pNodeHead; |
| 1107 } | 1055 } |
| 1108 | 1056 |
| 1109 FX_POSITION GetTailPosition() const | 1057 FX_POSITION GetTailPosition() const |
| 1110 { | 1058 { |
| 1111 return (FX_POSITION)m_pNodeTail; | 1059 return (FX_POSITION)m_pNodeTail; |
| 1112 } | 1060 } |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1160 | 1108 |
| 1161 FX_POSITION Find(void* searchValue, FX_POSITION startAfter = NULL ) const; | 1109 FX_POSITION Find(void* searchValue, FX_POSITION startAfter = NULL ) const; |
| 1162 | 1110 |
| 1163 FX_POSITION FindIndex(int index) const; | 1111 FX_POSITION FindIndex(int index) const; |
| 1164 | 1112 |
| 1165 void RemoveAt(FX_POSITION pos); | 1113 void RemoveAt(FX_POSITION pos); |
| 1166 | 1114 |
| 1167 void RemoveAll(); | 1115 void RemoveAll(); |
| 1168 protected: | 1116 protected: |
| 1169 | 1117 |
| 1170 IFX_Allocator* m_pAllocator; | |
| 1171 | |
| 1172 CNode* m_pNodeHead; | 1118 CNode* m_pNodeHead; |
| 1173 | 1119 |
| 1174 CNode* m_pNodeTail; | 1120 CNode* m_pNodeTail; |
| 1175 | 1121 |
| 1176 int m_nCount; | 1122 int m_nCount; |
| 1177 | 1123 |
| 1178 CNode* m_pNodeFree; | 1124 CNode* m_pNodeFree; |
| 1179 | 1125 |
| 1180 struct CFX_Plex* m_pBlocks; | 1126 struct CFX_Plex* m_pBlocks; |
| 1181 | 1127 |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 1198 FX_LPVOID m_pData; | 1144 FX_LPVOID m_pData; |
| 1199 | 1145 |
| 1200 PD_CALLBACK_FREEDATA m_pCallback; | 1146 PD_CALLBACK_FREEDATA m_pCallback; |
| 1201 | 1147 |
| 1202 FX_BOOL m_bSelfDestruct; | 1148 FX_BOOL m_bSelfDestruct; |
| 1203 }; | 1149 }; |
| 1204 class CFX_PrivateData | 1150 class CFX_PrivateData |
| 1205 { | 1151 { |
| 1206 public: | 1152 public: |
| 1207 | 1153 |
| 1208 CFX_PrivateData(IFX_Allocator* pAllocator = NULL) : m_DataList(pAllocator) { } | |
| 1209 | |
| 1210 ~CFX_PrivateData(); | 1154 ~CFX_PrivateData(); |
| 1211 | 1155 |
| 1212 void ClearAll(); | 1156 void ClearAll(); |
| 1213 | 1157 |
| 1214 void SetPrivateData(FX_LPVOID module_ id, FX_LPVOID pData, PD_CALLBACK_FREEDATA callback); | 1158 void SetPrivateData(FX_LPVOID module_ id, FX_LPVOID pData, PD_CALLBACK_FREEDATA callback); |
| 1215 | 1159 |
| 1216 void SetPrivateObj(FX_LPVOID module_i d, CFX_DestructObject* pObj); | 1160 void SetPrivateObj(FX_LPVOID module_i d, CFX_DestructObject* pObj); |
| 1217 | 1161 |
| 1218 FX_LPVOID GetPrivateData(FX_LPVOID module_id); | 1162 FX_LPVOID GetPrivateData(FX_LPVOID module_id); |
| 1219 | 1163 |
| (...skipping 268 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1488 | 1432 |
| 1489 struct DataList { | 1433 struct DataList { |
| 1490 | 1434 |
| 1491 FX_INT32 start; | 1435 FX_INT32 start; |
| 1492 | 1436 |
| 1493 FX_INT32 count; | 1437 FX_INT32 count; |
| 1494 FX_LPBYTE data; | 1438 FX_LPBYTE data; |
| 1495 }; | 1439 }; |
| 1496 public: | 1440 public: |
| 1497 | 1441 |
| 1498 CFX_SortListArray(IFX_Allocator* pAllocator = NULL) : m_CurList(0), m_DataLi sts(pAllocator) {} | 1442 CFX_SortListArray() : m_CurList(0) {} |
| 1499 | 1443 |
| 1500 ~CFX_SortListArray() | 1444 ~CFX_SortListArray() |
| 1501 { | 1445 { |
| 1502 Clear(); | 1446 Clear(); |
| 1503 } | 1447 } |
| 1504 | 1448 |
| 1505 | 1449 |
| 1506 void Clear() | 1450 void Clear() |
| 1507 { | 1451 { |
| 1508 IFX_Allocator* pAllocator = m_DataLists.m_pAllocator; | |
| 1509 for (FX_INT32 i = m_DataLists.GetUpperBound(); i >= 0; i--) { | 1452 for (FX_INT32 i = m_DataLists.GetUpperBound(); i >= 0; i--) { |
| 1510 DataList list = m_DataLists.ElementAt(i); | 1453 DataList list = m_DataLists.ElementAt(i); |
| 1511 if (list.data) { | 1454 if (list.data) { |
| 1512 FX_Allocator_Free(pAllocator, list.data); | 1455 FX_Free(list.data); |
| 1513 } | 1456 } |
| 1514 } | 1457 } |
| 1515 m_DataLists.RemoveAll(); | 1458 m_DataLists.RemoveAll(); |
| 1516 m_CurList = 0; | 1459 m_CurList = 0; |
| 1517 } | 1460 } |
| 1518 | 1461 |
| 1519 void Append(FX_INT32 nStart, FX_INT32 nCount) | 1462 void Append(FX_INT32 nStart, FX_INT32 nCount) |
| 1520 { | 1463 { |
| 1521 if (nStart < 0) { | 1464 if (nStart < 0) { |
| 1522 return; | 1465 return; |
| 1523 } | 1466 } |
| 1524 IFX_Allocator* pAllocator = m_DataLists.m_pAllocator; | |
| 1525 while (nCount > 0) { | 1467 while (nCount > 0) { |
| 1526 FX_INT32 temp_count = FX_MIN(nCount, FX_DATALIST_LENGTH); | 1468 FX_INT32 temp_count = FX_MIN(nCount, FX_DATALIST_LENGTH); |
| 1527 DataList list; | 1469 DataList list; |
| 1528 list.data = FX_Allocator_Alloc(pAllocator, FX_BYTE, temp_count * uni t); | 1470 list.data = FX_Alloc(FX_BYTE, temp_count * unit); |
|
palmer
2014/07/07 19:17:53
Potential integer overflow here. Especially since
| |
| 1529 if (!list.data) { | 1471 if (!list.data) { |
| 1530 break; | 1472 break; |
| 1531 } | 1473 } |
| 1532 FXSYS_memset32(list.data, 0, temp_count * unit); | 1474 FXSYS_memset32(list.data, 0, temp_count * unit); |
| 1533 list.start = nStart; | 1475 list.start = nStart; |
| 1534 list.count = temp_count; | 1476 list.count = temp_count; |
| 1535 Append(list); | 1477 Append(list); |
| 1536 nCount -= temp_count; | 1478 nCount -= temp_count; |
| 1537 nStart += temp_count; | 1479 nStart += temp_count; |
| 1538 } | 1480 } |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1633 Ready, | 1575 Ready, |
| 1634 ToBeContinued, | 1576 ToBeContinued, |
| 1635 Found, | 1577 Found, |
| 1636 NotFound, | 1578 NotFound, |
| 1637 Failed, | 1579 Failed, |
| 1638 Done | 1580 Done |
| 1639 } FX_ProgressiveStatus; | 1581 } FX_ProgressiveStatus; |
| 1640 #define ProgressiveStatus FX_ProgressiveStatus | 1582 #define ProgressiveStatus FX_ProgressiveStatus |
| 1641 #define FX_NAMESPACE_DECLARE(namespace, type) namespace::type | 1583 #define FX_NAMESPACE_DECLARE(namespace, type) namespace::type |
| 1642 #endif | 1584 #endif |
| OLD | NEW |