| 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 "xfa/fgas/crt/fgas_utils.h" | 7 #include "xfa/fgas/crt/fgas_utils.h" |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 | 10 |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 120 iCount = iBlockCount; | 120 iCount = iBlockCount; |
| 121 iBlockCount = 0; | 121 iBlockCount = 0; |
| 122 } else { | 122 } else { |
| 123 iBlockCount -= iCount; | 123 iBlockCount -= iCount; |
| 124 } | 124 } |
| 125 return iCount; | 125 return iCount; |
| 126 } | 126 } |
| 127 void CFX_BaseArray::RemoveAll(FX_BOOL bLeaveMemory) { | 127 void CFX_BaseArray::RemoveAll(FX_BOOL bLeaveMemory) { |
| 128 if (!bLeaveMemory) { | 128 if (!bLeaveMemory) { |
| 129 uint8_t*& pBuffer = m_pData->pBuffer; | 129 uint8_t*& pBuffer = m_pData->pBuffer; |
| 130 if (pBuffer != NULL) { | 130 if (pBuffer) { |
| 131 FX_Free(pBuffer); | 131 FX_Free(pBuffer); |
| 132 pBuffer = NULL; | 132 pBuffer = nullptr; |
| 133 } | 133 } |
| 134 m_pData->iTotalCount = 0; | 134 m_pData->iTotalCount = 0; |
| 135 } | 135 } |
| 136 m_pData->iBlockCount = 0; | 136 m_pData->iBlockCount = 0; |
| 137 } | 137 } |
| 138 | 138 |
| 139 CFX_BaseMassArrayImp::CFX_BaseMassArrayImp(int32_t iChunkSize, | 139 CFX_BaseMassArrayImp::CFX_BaseMassArrayImp(int32_t iChunkSize, |
| 140 int32_t iBlockSize) | 140 int32_t iBlockSize) |
| 141 : m_iChunkSize(iChunkSize), | 141 : m_iChunkSize(iChunkSize), |
| 142 m_iBlockSize(iBlockSize), | 142 m_iBlockSize(iBlockSize), |
| (...skipping 22 matching lines...) Expand all Loading... |
| 165 pChunk = FX_Alloc(uint8_t, iMemSize); | 165 pChunk = FX_Alloc(uint8_t, iMemSize); |
| 166 if (m_iChunkCount < m_pData->GetSize()) { | 166 if (m_iChunkCount < m_pData->GetSize()) { |
| 167 m_pData->SetAt(m_iChunkCount, pChunk); | 167 m_pData->SetAt(m_iChunkCount, pChunk); |
| 168 } else { | 168 } else { |
| 169 m_pData->Add(pChunk); | 169 m_pData->Add(pChunk); |
| 170 } | 170 } |
| 171 m_iChunkCount++; | 171 m_iChunkCount++; |
| 172 } | 172 } |
| 173 } | 173 } |
| 174 } | 174 } |
| 175 ASSERT(pChunk != NULL); | 175 ASSERT(pChunk); |
| 176 m_iBlockCount = index + 1; | 176 m_iBlockCount = index + 1; |
| 177 return pChunk + (index % m_iChunkSize) * m_iBlockSize; | 177 return pChunk + (index % m_iChunkSize) * m_iBlockSize; |
| 178 } | 178 } |
| 179 uint8_t* CFX_BaseMassArrayImp::GetAt(int32_t index) const { | 179 uint8_t* CFX_BaseMassArrayImp::GetAt(int32_t index) const { |
| 180 ASSERT(index > -1 && index < m_iBlockCount); | 180 ASSERT(index > -1 && index < m_iBlockCount); |
| 181 uint8_t* pChunk = (uint8_t*)m_pData->GetAt(index / m_iChunkSize); | 181 uint8_t* pChunk = (uint8_t*)m_pData->GetAt(index / m_iChunkSize); |
| 182 ASSERT(pChunk != NULL); | 182 ASSERT(pChunk); |
| 183 return pChunk + (index % m_iChunkSize) * m_iBlockSize; | 183 return pChunk + (index % m_iChunkSize) * m_iBlockSize; |
| 184 } | 184 } |
| 185 int32_t CFX_BaseMassArrayImp::Append(const CFX_BaseMassArrayImp& src, | 185 int32_t CFX_BaseMassArrayImp::Append(const CFX_BaseMassArrayImp& src, |
| 186 int32_t iStart, | 186 int32_t iStart, |
| 187 int32_t iCount) { | 187 int32_t iCount) { |
| 188 ASSERT(m_iBlockSize == src.m_iBlockSize); | 188 ASSERT(m_iBlockSize == src.m_iBlockSize); |
| 189 int32_t iAdded = src.m_iBlockCount; | 189 int32_t iAdded = src.m_iBlockCount; |
| 190 ASSERT(iStart > -1 && iStart < iAdded); | 190 ASSERT(iStart > -1 && iStart < iAdded); |
| 191 if (iCount < 0) { | 191 if (iCount < 0) { |
| 192 iCount = iAdded; | 192 iCount = iAdded; |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 245 int32_t iDstChunkIndex = iDstStart / m_iChunkSize; | 245 int32_t iDstChunkIndex = iDstStart / m_iChunkSize; |
| 246 int32_t iSrcChunkIndex = iSrcStart / src.m_iChunkSize; | 246 int32_t iSrcChunkIndex = iSrcStart / src.m_iChunkSize; |
| 247 uint8_t* pDstChunk = (uint8_t*)GetAt(iDstStart); | 247 uint8_t* pDstChunk = (uint8_t*)GetAt(iDstStart); |
| 248 uint8_t* pSrcChunk = (uint8_t*)src.GetAt(iSrcStart); | 248 uint8_t* pSrcChunk = (uint8_t*)src.GetAt(iSrcStart); |
| 249 int32_t iDstChunkSize = m_iChunkSize - (iDstStart % m_iChunkSize); | 249 int32_t iDstChunkSize = m_iChunkSize - (iDstStart % m_iChunkSize); |
| 250 int32_t iSrcChunkSize = src.m_iChunkSize - (iSrcStart % src.m_iChunkSize); | 250 int32_t iSrcChunkSize = src.m_iChunkSize - (iSrcStart % src.m_iChunkSize); |
| 251 int32_t iCopySize = | 251 int32_t iCopySize = |
| 252 std::min(iSrcCount, std::min(iSrcChunkSize, iDstChunkSize)); | 252 std::min(iSrcCount, std::min(iSrcChunkSize, iDstChunkSize)); |
| 253 int32_t iCopyBytes = iCopySize * m_iBlockSize; | 253 int32_t iCopyBytes = iCopySize * m_iBlockSize; |
| 254 while (iSrcCount > 0) { | 254 while (iSrcCount > 0) { |
| 255 ASSERT(pDstChunk != NULL && pSrcChunk != NULL); | 255 ASSERT(pDstChunk && pSrcChunk); |
| 256 FXSYS_memcpy(pDstChunk, pSrcChunk, iCopyBytes); | 256 FXSYS_memcpy(pDstChunk, pSrcChunk, iCopyBytes); |
| 257 iSrcCount -= iCopySize; | 257 iSrcCount -= iCopySize; |
| 258 iSrcChunkSize -= iCopySize; | 258 iSrcChunkSize -= iCopySize; |
| 259 if (iSrcChunkSize < 1) { | 259 if (iSrcChunkSize < 1) { |
| 260 iSrcChunkSize = src.m_iChunkSize; | 260 iSrcChunkSize = src.m_iChunkSize; |
| 261 iSrcChunkIndex++; | 261 iSrcChunkIndex++; |
| 262 pSrcChunk = (uint8_t*)src.m_pData->GetAt(iSrcChunkIndex); | 262 pSrcChunk = (uint8_t*)src.m_pData->GetAt(iSrcChunkIndex); |
| 263 } else { | 263 } else { |
| 264 pSrcChunk += iCopyBytes; | 264 pSrcChunk += iCopyBytes; |
| 265 } | 265 } |
| (...skipping 15 matching lines...) Expand all Loading... |
| 281 } else { | 281 } else { |
| 282 m_iBlockCount -= iCount; | 282 m_iBlockCount -= iCount; |
| 283 } | 283 } |
| 284 return m_iBlockCount; | 284 return m_iBlockCount; |
| 285 } | 285 } |
| 286 void CFX_BaseMassArrayImp::RemoveAll(FX_BOOL bLeaveMemory) { | 286 void CFX_BaseMassArrayImp::RemoveAll(FX_BOOL bLeaveMemory) { |
| 287 if (bLeaveMemory) { | 287 if (bLeaveMemory) { |
| 288 m_iBlockCount = 0; | 288 m_iBlockCount = 0; |
| 289 return; | 289 return; |
| 290 } | 290 } |
| 291 for (int32_t i = 0; i < m_iChunkCount; i++) { | 291 for (int32_t i = 0; i < m_iChunkCount; i++) |
| 292 void* p = m_pData->GetAt(i); | 292 FX_Free(m_pData->GetAt(i)); |
| 293 if (p == NULL) { | |
| 294 continue; | |
| 295 } | |
| 296 FX_Free(p); | |
| 297 } | |
| 298 m_pData->RemoveAll(); | 293 m_pData->RemoveAll(); |
| 299 m_iChunkCount = 0; | 294 m_iChunkCount = 0; |
| 300 m_iBlockCount = 0; | 295 m_iBlockCount = 0; |
| 301 } | 296 } |
| 302 CFX_BaseMassArray::CFX_BaseMassArray(int32_t iChunkSize, int32_t iBlockSize) { | 297 CFX_BaseMassArray::CFX_BaseMassArray(int32_t iChunkSize, int32_t iBlockSize) { |
| 303 m_pData = new CFX_BaseMassArrayImp(iChunkSize, iBlockSize); | 298 m_pData = new CFX_BaseMassArrayImp(iChunkSize, iBlockSize); |
| 304 } | 299 } |
| 305 CFX_BaseMassArray::~CFX_BaseMassArray() { | 300 CFX_BaseMassArray::~CFX_BaseMassArray() { |
| 306 delete m_pData; | 301 delete m_pData; |
| 307 } | 302 } |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 350 } | 345 } |
| 351 CFX_BaseDiscreteArray::~CFX_BaseDiscreteArray() { | 346 CFX_BaseDiscreteArray::~CFX_BaseDiscreteArray() { |
| 352 RemoveAll(); | 347 RemoveAll(); |
| 353 delete static_cast<FX_BASEDISCRETEARRAYDATA*>(m_pData); | 348 delete static_cast<FX_BASEDISCRETEARRAYDATA*>(m_pData); |
| 354 } | 349 } |
| 355 uint8_t* CFX_BaseDiscreteArray::AddSpaceTo(int32_t index) { | 350 uint8_t* CFX_BaseDiscreteArray::AddSpaceTo(int32_t index) { |
| 356 ASSERT(index > -1); | 351 ASSERT(index > -1); |
| 357 FX_BASEDISCRETEARRAYDATA* pData = (FX_BASEDISCRETEARRAYDATA*)m_pData; | 352 FX_BASEDISCRETEARRAYDATA* pData = (FX_BASEDISCRETEARRAYDATA*)m_pData; |
| 358 int32_t& iChunkCount = pData->iChunkCount; | 353 int32_t& iChunkCount = pData->iChunkCount; |
| 359 int32_t iChunkSize = pData->iChunkSize; | 354 int32_t iChunkSize = pData->iChunkSize; |
| 360 uint8_t* pChunk = NULL; | 355 uint8_t* pChunk = nullptr; |
| 361 int32_t iChunk = index / iChunkSize; | 356 int32_t iChunk = index / iChunkSize; |
| 362 if (iChunk < iChunkCount) { | 357 if (iChunk < iChunkCount) { |
| 363 pChunk = pData->ChunkBuffer.GetAt(iChunk); | 358 pChunk = pData->ChunkBuffer.GetAt(iChunk); |
| 364 } | 359 } |
| 365 if (!pChunk) { | 360 if (!pChunk) { |
| 366 pChunk = FX_Alloc2D(uint8_t, iChunkSize, pData->iBlockSize); | 361 pChunk = FX_Alloc2D(uint8_t, iChunkSize, pData->iBlockSize); |
| 367 FXSYS_memset(pChunk, 0, iChunkSize * pData->iBlockSize); | 362 FXSYS_memset(pChunk, 0, iChunkSize * pData->iBlockSize); |
| 368 pData->ChunkBuffer.SetAtGrow(iChunk, pChunk); | 363 pData->ChunkBuffer.SetAtGrow(iChunk, pChunk); |
| 369 if (iChunkCount <= iChunk) { | 364 if (iChunkCount <= iChunk) { |
| 370 iChunkCount = iChunk + 1; | 365 iChunkCount = iChunk + 1; |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 408 void CFX_BaseStack::Pop() { | 403 void CFX_BaseStack::Pop() { |
| 409 int32_t& iBlockCount = m_pData->m_iBlockCount; | 404 int32_t& iBlockCount = m_pData->m_iBlockCount; |
| 410 if (iBlockCount < 1) { | 405 if (iBlockCount < 1) { |
| 411 return; | 406 return; |
| 412 } | 407 } |
| 413 iBlockCount--; | 408 iBlockCount--; |
| 414 } | 409 } |
| 415 uint8_t* CFX_BaseStack::GetTopElement() const { | 410 uint8_t* CFX_BaseStack::GetTopElement() const { |
| 416 int32_t iSize = m_pData->m_iBlockCount; | 411 int32_t iSize = m_pData->m_iBlockCount; |
| 417 if (iSize < 1) { | 412 if (iSize < 1) { |
| 418 return NULL; | 413 return nullptr; |
| 419 } | 414 } |
| 420 return m_pData->GetAt(iSize - 1); | 415 return m_pData->GetAt(iSize - 1); |
| 421 } | 416 } |
| 422 int32_t CFX_BaseStack::GetSize() const { | 417 int32_t CFX_BaseStack::GetSize() const { |
| 423 return m_pData->m_iBlockCount; | 418 return m_pData->m_iBlockCount; |
| 424 } | 419 } |
| 425 uint8_t* CFX_BaseStack::GetAt(int32_t index) const { | 420 uint8_t* CFX_BaseStack::GetAt(int32_t index) const { |
| 426 return m_pData->GetAt(index); | 421 return m_pData->GetAt(index); |
| 427 } | 422 } |
| 428 void CFX_BaseStack::RemoveAll(FX_BOOL bLeaveMemory) { | 423 void CFX_BaseStack::RemoveAll(FX_BOOL bLeaveMemory) { |
| 429 m_pData->RemoveAll(bLeaveMemory); | 424 m_pData->RemoveAll(bLeaveMemory); |
| 430 } | 425 } |
| OLD | NEW |