| 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 #include "../../include/fxcrt/fx_basic.h" | 7 #include "../../include/fxcrt/fx_basic.h" |
| 8 FX_STRSIZE FX_ftoa(FX_FLOAT f, FX_LPSTR buf); | 8 FX_STRSIZE FX_ftoa(FX_FLOAT f, FX_LPSTR buf); |
| 9 CFX_BinaryBuf::CFX_BinaryBuf(IFX_Allocator* pAllocator) | 9 CFX_BinaryBuf::CFX_BinaryBuf() |
| 10 : m_pAllocator(pAllocator) | 10 : m_AllocStep(0) |
| 11 , m_AllocStep(0) | |
| 12 , m_pBuffer(NULL) | 11 , m_pBuffer(NULL) |
| 13 , m_DataSize(0) | 12 , m_DataSize(0) |
| 14 , m_AllocSize(0) | 13 , m_AllocSize(0) |
| 15 { | 14 { |
| 16 } | 15 } |
| 17 CFX_BinaryBuf::CFX_BinaryBuf(FX_STRSIZE size, IFX_Allocator* pAllocator) | 16 CFX_BinaryBuf::CFX_BinaryBuf(FX_STRSIZE size) |
| 18 : m_pAllocator(pAllocator) | 17 : m_AllocStep(0) |
| 19 , m_AllocStep(0) | |
| 20 , m_DataSize(size) | 18 , m_DataSize(size) |
| 21 , m_AllocSize(size) | 19 , m_AllocSize(size) |
| 22 { | 20 { |
| 23 m_pBuffer = FX_Allocator_Alloc(m_pAllocator, FX_BYTE, size); | 21 m_pBuffer = FX_Alloc(FX_BYTE, size); |
| 24 } | 22 } |
| 25 CFX_BinaryBuf::~CFX_BinaryBuf() | 23 CFX_BinaryBuf::~CFX_BinaryBuf() |
| 26 { | 24 { |
| 27 if (m_pBuffer) { | 25 if (m_pBuffer) { |
| 28 FX_Allocator_Free(m_pAllocator, m_pBuffer); | 26 FX_Free(m_pBuffer); |
| 29 } | 27 } |
| 30 } | 28 } |
| 31 void CFX_BinaryBuf::Delete(int start_index, int count) | 29 void CFX_BinaryBuf::Delete(int start_index, int count) |
| 32 { | 30 { |
| 33 if (!m_pBuffer || start_index < 0 || start_index + count > m_DataSize) { | 31 if (!m_pBuffer || start_index < 0 || start_index + count > m_DataSize) { |
| 34 return; | 32 return; |
| 35 } | 33 } |
| 36 FXSYS_memmove32(m_pBuffer + start_index, m_pBuffer + start_index + count, m_
DataSize - start_index - count); | 34 FXSYS_memmove32(m_pBuffer + start_index, m_pBuffer + start_index + count, m_
DataSize - start_index - count); |
| 37 m_DataSize -= count; | 35 m_DataSize -= count; |
| 38 } | 36 } |
| 39 void CFX_BinaryBuf::Clear() | 37 void CFX_BinaryBuf::Clear() |
| 40 { | 38 { |
| 41 m_DataSize = 0; | 39 m_DataSize = 0; |
| 42 } | 40 } |
| 43 void CFX_BinaryBuf::DetachBuffer() | 41 void CFX_BinaryBuf::DetachBuffer() |
| 44 { | 42 { |
| 45 m_DataSize = 0; | 43 m_DataSize = 0; |
| 46 m_pBuffer = NULL; | 44 m_pBuffer = NULL; |
| 47 m_AllocSize = 0; | 45 m_AllocSize = 0; |
| 48 } | 46 } |
| 49 void CFX_BinaryBuf::AttachData(void* buffer, FX_STRSIZE size) | 47 void CFX_BinaryBuf::AttachData(void* buffer, FX_STRSIZE size) |
| 50 { | 48 { |
| 51 if (m_pBuffer) { | 49 if (m_pBuffer) { |
| 52 FX_Allocator_Free(m_pAllocator, m_pBuffer); | 50 FX_Free(m_pBuffer); |
| 53 } | 51 } |
| 54 m_DataSize = size; | 52 m_DataSize = size; |
| 55 m_pBuffer = (FX_LPBYTE)buffer; | 53 m_pBuffer = (FX_LPBYTE)buffer; |
| 56 m_AllocSize = size; | 54 m_AllocSize = size; |
| 57 } | 55 } |
| 58 void CFX_BinaryBuf::TakeOver(CFX_BinaryBuf& other) | 56 void CFX_BinaryBuf::TakeOver(CFX_BinaryBuf& other) |
| 59 { | 57 { |
| 60 AttachData(other.GetBuffer(), other.GetSize()); | 58 AttachData(other.GetBuffer(), other.GetSize()); |
| 61 other.DetachBuffer(); | 59 other.DetachBuffer(); |
| 62 } | 60 } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 79 alloc_step = m_AllocSize / 4; | 77 alloc_step = m_AllocSize / 4; |
| 80 if (alloc_step < 128 ) { | 78 if (alloc_step < 128 ) { |
| 81 alloc_step = 128; | 79 alloc_step = 128; |
| 82 } | 80 } |
| 83 } else { | 81 } else { |
| 84 alloc_step = m_AllocStep; | 82 alloc_step = m_AllocStep; |
| 85 } | 83 } |
| 86 new_size = (new_size + alloc_step - 1) / alloc_step * alloc_step; | 84 new_size = (new_size + alloc_step - 1) / alloc_step * alloc_step; |
| 87 FX_LPBYTE pNewBuffer = m_pBuffer; | 85 FX_LPBYTE pNewBuffer = m_pBuffer; |
| 88 if (pNewBuffer) { | 86 if (pNewBuffer) { |
| 89 pNewBuffer = FX_Allocator_Realloc(m_pAllocator, FX_BYTE, m_pBuffer, new_
size); | 87 pNewBuffer = FX_Realloc(FX_BYTE, m_pBuffer, new_size); |
| 90 } else { | 88 } else { |
| 91 pNewBuffer = FX_Allocator_Alloc(m_pAllocator, FX_BYTE, new_size); | 89 pNewBuffer = FX_Alloc(FX_BYTE, new_size); |
| 92 } | 90 } |
| 93 if (pNewBuffer) { | 91 if (pNewBuffer) { |
| 94 m_pBuffer = pNewBuffer; | 92 m_pBuffer = pNewBuffer; |
| 95 m_AllocSize = new_size; | 93 m_AllocSize = new_size; |
| 96 } | 94 } |
| 97 } | 95 } |
| 98 void CFX_BinaryBuf::CopyData(const void* pStr, FX_STRSIZE size) | 96 void CFX_BinaryBuf::CopyData(const void* pStr, FX_STRSIZE size) |
| 99 { | 97 { |
| 100 if (size == 0) { | 98 if (size == 0) { |
| 101 m_DataSize = 0; | 99 m_DataSize = 0; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 if (!m_pBuffer) { | 134 if (!m_pBuffer) { |
| 137 return; | 135 return; |
| 138 } | 136 } |
| 139 FXSYS_memset8(m_pBuffer + m_DataSize, byte, count); | 137 FXSYS_memset8(m_pBuffer + m_DataSize, byte, count); |
| 140 m_DataSize += count; | 138 m_DataSize += count; |
| 141 } | 139 } |
| 142 CFX_ByteStringC CFX_BinaryBuf::GetByteString() const | 140 CFX_ByteStringC CFX_BinaryBuf::GetByteString() const |
| 143 { | 141 { |
| 144 return CFX_ByteStringC(m_pBuffer, m_DataSize); | 142 return CFX_ByteStringC(m_pBuffer, m_DataSize); |
| 145 } | 143 } |
| 146 void CFX_BinaryBuf::GetByteStringL(CFX_ByteStringL &str) const | |
| 147 { | |
| 148 str.Set(CFX_ByteStringC(m_pBuffer, m_DataSize), m_pAllocator); | |
| 149 } | |
| 150 CFX_ByteTextBuf& CFX_ByteTextBuf::operator << (FX_BSTR lpsz) | 144 CFX_ByteTextBuf& CFX_ByteTextBuf::operator << (FX_BSTR lpsz) |
| 151 { | 145 { |
| 152 AppendBlock((FX_LPCBYTE)lpsz, lpsz.GetLength()); | 146 AppendBlock((FX_LPCBYTE)lpsz, lpsz.GetLength()); |
| 153 return *this; | 147 return *this; |
| 154 } | 148 } |
| 155 CFX_ByteTextBuf& CFX_ByteTextBuf::operator << (int i) | 149 CFX_ByteTextBuf& CFX_ByteTextBuf::operator << (int i) |
| 156 { | 150 { |
| 157 char buf[32]; | 151 char buf[32]; |
| 158 FXSYS_itoa(i, buf, 10); | 152 FXSYS_itoa(i, buf, 10); |
| 159 AppendBlock(buf, (FX_STRSIZE)FXSYS_strlen(buf)); | 153 AppendBlock(buf, (FX_STRSIZE)FXSYS_strlen(buf)); |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 243 return *this; | 237 return *this; |
| 244 } | 238 } |
| 245 void CFX_WideTextBuf::operator =(FX_WSTR str) | 239 void CFX_WideTextBuf::operator =(FX_WSTR str) |
| 246 { | 240 { |
| 247 CopyData(str.GetPtr(), str.GetLength() * sizeof(FX_WCHAR)); | 241 CopyData(str.GetPtr(), str.GetLength() * sizeof(FX_WCHAR)); |
| 248 } | 242 } |
| 249 CFX_WideStringC CFX_WideTextBuf::GetWideString() const | 243 CFX_WideStringC CFX_WideTextBuf::GetWideString() const |
| 250 { | 244 { |
| 251 return CFX_WideStringC((FX_LPCWSTR)m_pBuffer, m_DataSize / sizeof(FX_WCHAR))
; | 245 return CFX_WideStringC((FX_LPCWSTR)m_pBuffer, m_DataSize / sizeof(FX_WCHAR))
; |
| 252 } | 246 } |
| 253 void CFX_WideTextBuf::GetWideStringL(CFX_WideStringL& wideText) const | |
| 254 { | |
| 255 wideText.Set(CFX_WideStringC((FX_LPCWSTR)m_pBuffer, m_DataSize / sizeof(FX_W
CHAR)), m_pAllocator); | |
| 256 } | |
| 257 CFX_ArchiveSaver& CFX_ArchiveSaver::operator << (FX_BYTE i) | 247 CFX_ArchiveSaver& CFX_ArchiveSaver::operator << (FX_BYTE i) |
| 258 { | 248 { |
| 259 if (m_pStream) { | 249 if (m_pStream) { |
| 260 m_pStream->WriteBlock(&i, 1); | 250 m_pStream->WriteBlock(&i, 1); |
| 261 } else { | 251 } else { |
| 262 m_SavingBuf.AppendByte(i); | 252 m_SavingBuf.AppendByte(i); |
| 263 } | 253 } |
| 264 return *this; | 254 return *this; |
| 265 } | 255 } |
| 266 CFX_ArchiveSaver& CFX_ArchiveSaver::operator << (int i) | 256 CFX_ArchiveSaver& CFX_ArchiveSaver::operator << (int i) |
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 432 while (bit_left >= 8) { | 422 while (bit_left >= 8) { |
| 433 bit_left -= 8; | 423 bit_left -= 8; |
| 434 result |= m_pData[byte_pos++] << bit_left; | 424 result |= m_pData[byte_pos++] << bit_left; |
| 435 } | 425 } |
| 436 if (bit_left) { | 426 if (bit_left) { |
| 437 result |= m_pData[byte_pos] >> (8 - bit_left); | 427 result |= m_pData[byte_pos] >> (8 - bit_left); |
| 438 } | 428 } |
| 439 m_BitPos += nBits; | 429 m_BitPos += nBits; |
| 440 return result; | 430 return result; |
| 441 } | 431 } |
| 442 IFX_BufferArchive::IFX_BufferArchive(FX_STRSIZE size, IFX_Allocator* pAllocator) | 432 IFX_BufferArchive::IFX_BufferArchive(FX_STRSIZE size) |
| 443 : m_pAllocator(pAllocator) | 433 : m_BufSize(size) |
| 444 , m_BufSize(size) | |
| 445 , m_pBuffer(NULL) | 434 , m_pBuffer(NULL) |
| 446 , m_Length(0) | 435 , m_Length(0) |
| 447 { | 436 { |
| 448 } | 437 } |
| 449 void IFX_BufferArchive::Clear() | 438 void IFX_BufferArchive::Clear() |
| 450 { | 439 { |
| 451 m_Length = 0; | 440 m_Length = 0; |
| 452 if (m_pBuffer) { | 441 if (m_pBuffer) { |
| 453 FX_Allocator_Free(m_pAllocator, m_pBuffer); | 442 FX_Free(m_pBuffer); |
| 454 m_pBuffer = NULL; | 443 m_pBuffer = NULL; |
| 455 } | 444 } |
| 456 } | 445 } |
| 457 FX_BOOL IFX_BufferArchive::Flush() | 446 FX_BOOL IFX_BufferArchive::Flush() |
| 458 { | 447 { |
| 459 FX_BOOL bRet = DoWork(m_pBuffer, m_Length); | 448 FX_BOOL bRet = DoWork(m_pBuffer, m_Length); |
| 460 m_Length = 0; | 449 m_Length = 0; |
| 461 return bRet; | 450 return bRet; |
| 462 } | 451 } |
| 463 FX_INT32 IFX_BufferArchive::AppendBlock(const void* pBuf, size_t size) | 452 FX_INT32 IFX_BufferArchive::AppendBlock(const void* pBuf, size_t size) |
| 464 { | 453 { |
| 465 if (!pBuf || size < 1) { | 454 if (!pBuf || size < 1) { |
| 466 return 0; | 455 return 0; |
| 467 } | 456 } |
| 468 if (!m_pBuffer) { | 457 if (!m_pBuffer) { |
| 469 m_pBuffer = FX_Allocator_Alloc(m_pAllocator, FX_BYTE, m_BufSize); | 458 m_pBuffer = FX_Alloc(FX_BYTE, m_BufSize); |
| 470 if (!m_pBuffer) { | 459 if (!m_pBuffer) { |
| 471 return -1; | 460 return -1; |
| 472 } | 461 } |
| 473 } | 462 } |
| 474 FX_LPBYTE buffer = (FX_LPBYTE)pBuf; | 463 FX_LPBYTE buffer = (FX_LPBYTE)pBuf; |
| 475 FX_STRSIZE temp_size = (FX_STRSIZE)size; | 464 FX_STRSIZE temp_size = (FX_STRSIZE)size; |
| 476 while (temp_size > 0) { | 465 while (temp_size > 0) { |
| 477 FX_STRSIZE buf_size = FX_MIN(m_BufSize - m_Length, (FX_STRSIZE)temp_size
); | 466 FX_STRSIZE buf_size = FX_MIN(m_BufSize - m_Length, (FX_STRSIZE)temp_size
); |
| 478 FXSYS_memcpy32(m_pBuffer + m_Length, buffer, buf_size); | 467 FXSYS_memcpy32(m_pBuffer + m_Length, buffer, buf_size); |
| 479 m_Length += buf_size; | 468 m_Length += buf_size; |
| (...skipping 14 matching lines...) Expand all Loading... |
| 494 FX_INT32 IFX_BufferArchive::AppendDWord(FX_DWORD i) | 483 FX_INT32 IFX_BufferArchive::AppendDWord(FX_DWORD i) |
| 495 { | 484 { |
| 496 char buf[32]; | 485 char buf[32]; |
| 497 FXSYS_itoa(i, buf, 10); | 486 FXSYS_itoa(i, buf, 10); |
| 498 return AppendBlock(buf, (size_t)FXSYS_strlen(buf)); | 487 return AppendBlock(buf, (size_t)FXSYS_strlen(buf)); |
| 499 } | 488 } |
| 500 FX_INT32 IFX_BufferArchive::AppendString(FX_BSTR lpsz) | 489 FX_INT32 IFX_BufferArchive::AppendString(FX_BSTR lpsz) |
| 501 { | 490 { |
| 502 return AppendBlock((FX_LPCBYTE)lpsz, lpsz.GetLength()); | 491 return AppendBlock((FX_LPCBYTE)lpsz, lpsz.GetLength()); |
| 503 } | 492 } |
| 504 CFX_FileBufferArchive::CFX_FileBufferArchive(FX_STRSIZE size, IFX_Allocator* pAl
locator) | 493 CFX_FileBufferArchive::CFX_FileBufferArchive(FX_STRSIZE size) |
| 505 : IFX_BufferArchive(size, pAllocator) | 494 : IFX_BufferArchive(size) |
| 506 , m_pFile(NULL) | 495 , m_pFile(NULL) |
| 507 , m_bTakeover(FALSE) | 496 , m_bTakeover(FALSE) |
| 508 { | 497 { |
| 509 } | 498 } |
| 510 CFX_FileBufferArchive::~CFX_FileBufferArchive() | 499 CFX_FileBufferArchive::~CFX_FileBufferArchive() |
| 511 { | 500 { |
| 512 Clear(); | 501 Clear(); |
| 513 } | 502 } |
| 514 void CFX_FileBufferArchive::Clear() | 503 void CFX_FileBufferArchive::Clear() |
| 515 { | 504 { |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 565 FX_BOOL CFX_FileBufferArchive::DoWork(const void* pBuf, size_t size) | 554 FX_BOOL CFX_FileBufferArchive::DoWork(const void* pBuf, size_t size) |
| 566 { | 555 { |
| 567 if (!m_pFile) { | 556 if (!m_pFile) { |
| 568 return FALSE; | 557 return FALSE; |
| 569 } | 558 } |
| 570 if (!pBuf || size < 1) { | 559 if (!pBuf || size < 1) { |
| 571 return TRUE; | 560 return TRUE; |
| 572 } | 561 } |
| 573 return m_pFile->WriteBlock(pBuf, size); | 562 return m_pFile->WriteBlock(pBuf, size); |
| 574 } | 563 } |
| OLD | NEW |