| 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 CORE_FXCRT_FX_BASIC_H_ | 7 #ifndef CORE_FXCRT_FX_BASIC_H_ |
| 8 #define CORE_FXCRT_FX_BASIC_H_ | 8 #define CORE_FXCRT_FX_BASIC_H_ |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 328 } | 328 } |
| 329 FXSYS_memset(m_FixedData, 0, sizeof(DataType) * FixedSize); | 329 FXSYS_memset(m_FixedData, 0, sizeof(DataType) * FixedSize); |
| 330 } | 330 } |
| 331 operator DataType*() { return m_pGrowData ? m_pGrowData.get() : m_FixedData; } | 331 operator DataType*() { return m_pGrowData ? m_pGrowData.get() : m_FixedData; } |
| 332 | 332 |
| 333 private: | 333 private: |
| 334 DataType m_FixedData[FixedSize]; | 334 DataType m_FixedData[FixedSize]; |
| 335 std::unique_ptr<DataType, FxFreeDeleter> m_pGrowData; | 335 std::unique_ptr<DataType, FxFreeDeleter> m_pGrowData; |
| 336 }; | 336 }; |
| 337 | 337 |
| 338 #ifdef PDF_ENABLE_XFA | |
| 339 class CFX_MapPtrToPtr { | |
| 340 protected: | |
| 341 struct CAssoc { | |
| 342 CAssoc* pNext; | |
| 343 void* key; | |
| 344 void* value; | |
| 345 }; | |
| 346 | |
| 347 public: | |
| 348 explicit CFX_MapPtrToPtr(int nBlockSize = 10); | |
| 349 ~CFX_MapPtrToPtr(); | |
| 350 | |
| 351 int GetCount() const { return m_nCount; } | |
| 352 bool IsEmpty() const { return m_nCount == 0; } | |
| 353 | |
| 354 bool Lookup(void* key, void*& rValue) const; | |
| 355 | |
| 356 void* GetValueAt(void* key) const; | |
| 357 | |
| 358 void*& operator[](void* key); | |
| 359 | |
| 360 void SetAt(void* key, void* newValue) { (*this)[key] = newValue; } | |
| 361 | |
| 362 bool RemoveKey(void* key); | |
| 363 | |
| 364 void RemoveAll(); | |
| 365 | |
| 366 FX_POSITION GetStartPosition() const { | |
| 367 return m_nCount == 0 ? nullptr : (FX_POSITION)-1; | |
| 368 } | |
| 369 | |
| 370 void GetNextAssoc(FX_POSITION& rNextPosition, | |
| 371 void*& rKey, | |
| 372 void*& rValue) const; | |
| 373 | |
| 374 uint32_t GetHashTableSize() const { return m_nHashTableSize; } | |
| 375 | |
| 376 void InitHashTable(uint32_t hashSize, bool bAllocNow = true); | |
| 377 | |
| 378 protected: | |
| 379 CAssoc** m_pHashTable; | |
| 380 | |
| 381 uint32_t m_nHashTableSize; | |
| 382 | |
| 383 int m_nCount; | |
| 384 | |
| 385 CAssoc* m_pFreeList; | |
| 386 | |
| 387 struct CFX_Plex* m_pBlocks; | |
| 388 | |
| 389 int m_nBlockSize; | |
| 390 | |
| 391 uint32_t HashKey(void* key) const; | |
| 392 | |
| 393 CAssoc* NewAssoc(); | |
| 394 | |
| 395 void FreeAssoc(CAssoc* pAssoc); | |
| 396 | |
| 397 CAssoc* GetAssocAt(void* key, uint32_t& hash) const; | |
| 398 }; | |
| 399 | |
| 400 template <class KeyType, class ValueType> | |
| 401 class CFX_MapPtrTemplate : public CFX_MapPtrToPtr { | |
| 402 public: | |
| 403 CFX_MapPtrTemplate() : CFX_MapPtrToPtr(10) {} | |
| 404 | |
| 405 bool Lookup(KeyType key, ValueType& rValue) const { | |
| 406 void* pValue = nullptr; | |
| 407 if (!CFX_MapPtrToPtr::Lookup((void*)(uintptr_t)key, pValue)) { | |
| 408 return false; | |
| 409 } | |
| 410 rValue = (ValueType)(uintptr_t)pValue; | |
| 411 return true; | |
| 412 } | |
| 413 | |
| 414 ValueType& operator[](KeyType key) { | |
| 415 return (ValueType&)CFX_MapPtrToPtr::operator[]((void*)(uintptr_t)key); | |
| 416 } | |
| 417 | |
| 418 void SetAt(KeyType key, ValueType newValue) { | |
| 419 CFX_MapPtrToPtr::SetAt((void*)(uintptr_t)key, (void*)(uintptr_t)newValue); | |
| 420 } | |
| 421 | |
| 422 bool RemoveKey(KeyType key) { | |
| 423 return CFX_MapPtrToPtr::RemoveKey((void*)(uintptr_t)key); | |
| 424 } | |
| 425 | |
| 426 void GetNextAssoc(FX_POSITION& rNextPosition, | |
| 427 KeyType& rKey, | |
| 428 ValueType& rValue) const { | |
| 429 void* pKey = nullptr; | |
| 430 void* pValue = nullptr; | |
| 431 CFX_MapPtrToPtr::GetNextAssoc(rNextPosition, pKey, pValue); | |
| 432 rKey = (KeyType)(uintptr_t)pKey; | |
| 433 rValue = (ValueType)(uintptr_t)pValue; | |
| 434 } | |
| 435 }; | |
| 436 | |
| 437 typedef void (*PD_CALLBACK_FREEDATA)(void* pData); | |
| 438 #endif // PDF_ENABLE_XFA | |
| 439 | |
| 440 class CFX_BitStream { | 338 class CFX_BitStream { |
| 441 public: | 339 public: |
| 442 void Init(const uint8_t* pData, uint32_t dwSize); | 340 void Init(const uint8_t* pData, uint32_t dwSize); |
| 443 | 341 |
| 444 uint32_t GetBits(uint32_t nBits); | 342 uint32_t GetBits(uint32_t nBits); |
| 445 | 343 |
| 446 void ByteAlign(); | 344 void ByteAlign(); |
| 447 | 345 |
| 448 bool IsEOF() { return m_BitPos >= m_BitSize; } | 346 bool IsEOF() { return m_BitPos >= m_BitSize; } |
| 449 | 347 |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 667 FX_FLOAT e; | 565 FX_FLOAT e; |
| 668 FX_FLOAT f; | 566 FX_FLOAT f; |
| 669 FX_FLOAT g; | 567 FX_FLOAT g; |
| 670 FX_FLOAT h; | 568 FX_FLOAT h; |
| 671 FX_FLOAT i; | 569 FX_FLOAT i; |
| 672 }; | 570 }; |
| 673 | 571 |
| 674 uint32_t GetBits32(const uint8_t* pData, int bitpos, int nbits); | 572 uint32_t GetBits32(const uint8_t* pData, int bitpos, int nbits); |
| 675 | 573 |
| 676 #endif // CORE_FXCRT_FX_BASIC_H_ | 574 #endif // CORE_FXCRT_FX_BASIC_H_ |
| OLD | NEW |