| 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 |