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 #include "../../../third_party/base/numerics/safe_math.h" | 8 #include "../../../third_party/base/numerics/safe_math.h" |
9 | 9 |
10 CFX_BasicArray::CFX_BasicArray(int unit_size) | 10 CFX_BasicArray::CFX_BasicArray(int unit_size) |
(...skipping 20 matching lines...) Expand all Loading... |
31 return 0 == nNewSize; | 31 return 0 == nNewSize; |
32 } | 32 } |
33 | 33 |
34 if (m_pData == NULL) { | 34 if (m_pData == NULL) { |
35 pdfium::base::CheckedNumeric<int> totalSize = nNewSize; | 35 pdfium::base::CheckedNumeric<int> totalSize = nNewSize; |
36 totalSize *= m_nUnitSize; | 36 totalSize *= m_nUnitSize; |
37 if (!totalSize.IsValid()) { | 37 if (!totalSize.IsValid()) { |
38 m_nSize = m_nMaxSize = 0; | 38 m_nSize = m_nMaxSize = 0; |
39 return FALSE; | 39 return FALSE; |
40 } | 40 } |
41 m_pData = FX_Alloc(FX_BYTE, totalSize.ValueOrDie()); | 41 m_pData = FX_Alloc(uint8_t, totalSize.ValueOrDie()); |
42 m_nSize = m_nMaxSize = nNewSize; | 42 m_nSize = m_nMaxSize = nNewSize; |
43 } else if (nNewSize <= m_nMaxSize) { | 43 } else if (nNewSize <= m_nMaxSize) { |
44 if (nNewSize > m_nSize) { | 44 if (nNewSize > m_nSize) { |
45 FXSYS_memset32(m_pData + m_nSize * m_nUnitSize, 0, (nNewSize - m_nSi
ze) * m_nUnitSize); | 45 FXSYS_memset32(m_pData + m_nSize * m_nUnitSize, 0, (nNewSize - m_nSi
ze) * m_nUnitSize); |
46 } | 46 } |
47 m_nSize = nNewSize; | 47 m_nSize = nNewSize; |
48 } else { | 48 } else { |
49 int nNewMax = nNewSize < m_nMaxSize ? m_nMaxSize : nNewSize; | 49 int nNewMax = nNewSize < m_nMaxSize ? m_nMaxSize : nNewSize; |
50 pdfium::base::CheckedNumeric<int> totalSize = nNewMax; | 50 pdfium::base::CheckedNumeric<int> totalSize = nNewMax; |
51 totalSize *= m_nUnitSize; | 51 totalSize *= m_nUnitSize; |
52 if (!totalSize.IsValid() || nNewMax < m_nSize) { | 52 if (!totalSize.IsValid() || nNewMax < m_nSize) { |
53 return FALSE; | 53 return FALSE; |
54 } | 54 } |
55 FX_LPBYTE pNewData = FX_Realloc(FX_BYTE, m_pData, totalSize.ValueOrDie()
); | 55 FX_LPBYTE pNewData = FX_Realloc(uint8_t, m_pData, totalSize.ValueOrDie()
); |
56 if (pNewData == NULL) { | 56 if (pNewData == NULL) { |
57 return FALSE; | 57 return FALSE; |
58 } | 58 } |
59 FXSYS_memset32(pNewData + m_nSize * m_nUnitSize, 0, (nNewMax - m_nSize)
* m_nUnitSize); | 59 FXSYS_memset32(pNewData + m_nSize * m_nUnitSize, 0, (nNewMax - m_nSize)
* m_nUnitSize); |
60 m_pData = pNewData; | 60 m_pData = pNewData; |
61 m_nSize = nNewSize; | 61 m_nSize = nNewSize; |
62 m_nMaxSize = nNewMax; | 62 m_nMaxSize = nNewMax; |
63 } | 63 } |
64 return TRUE; | 64 return TRUE; |
65 } | 65 } |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 _ClearIndex(m_IndexDepth, m_IndexSize, (void**)m_pIndex); | 178 _ClearIndex(m_IndexDepth, m_IndexSize, (void**)m_pIndex); |
179 m_pIndex = NULL; | 179 m_pIndex = NULL; |
180 m_IndexDepth = 0; | 180 m_IndexDepth = 0; |
181 m_DataSize = 0; | 181 m_DataSize = 0; |
182 } | 182 } |
183 void* CFX_BaseSegmentedArray::Add() | 183 void* CFX_BaseSegmentedArray::Add() |
184 { | 184 { |
185 if (m_DataSize % m_SegmentSize) { | 185 if (m_DataSize % m_SegmentSize) { |
186 return GetAt(m_DataSize ++); | 186 return GetAt(m_DataSize ++); |
187 } | 187 } |
188 void* pSegment = FX_Alloc2D(FX_BYTE, m_UnitSize, m_SegmentSize); | 188 void* pSegment = FX_Alloc2D(uint8_t, m_UnitSize, m_SegmentSize); |
189 if (m_pIndex == NULL) { | 189 if (m_pIndex == NULL) { |
190 m_pIndex = pSegment; | 190 m_pIndex = pSegment; |
191 m_DataSize ++; | 191 m_DataSize ++; |
192 return pSegment; | 192 return pSegment; |
193 } | 193 } |
194 if (m_IndexDepth == 0) { | 194 if (m_IndexDepth == 0) { |
195 void** pIndex = (void**)FX_Alloc(void*, m_IndexSize); | 195 void** pIndex = (void**)FX_Alloc(void*, m_IndexSize); |
196 pIndex[0] = m_pIndex; | 196 pIndex[0] = m_pIndex; |
197 pIndex[1] = pSegment; | 197 pIndex[1] = pSegment; |
198 m_pIndex = pIndex; | 198 m_pIndex = pIndex; |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
308 int seg_index = index / m_SegmentSize; | 308 int seg_index = index / m_SegmentSize; |
309 return (FX_LPBYTE)GetIndex(seg_index)[seg_index % m_IndexSize] + (index % m_
SegmentSize) * m_UnitSize; | 309 return (FX_LPBYTE)GetIndex(seg_index)[seg_index % m_IndexSize] + (index % m_
SegmentSize) * m_UnitSize; |
310 } | 310 } |
311 void CFX_BaseSegmentedArray::Delete(int index, int count) | 311 void CFX_BaseSegmentedArray::Delete(int index, int count) |
312 { | 312 { |
313 if(index < 0 || count < 1 || index + count > m_DataSize) { | 313 if(index < 0 || count < 1 || index + count > m_DataSize) { |
314 return; | 314 return; |
315 } | 315 } |
316 int i; | 316 int i; |
317 for (i = index; i < m_DataSize - count; i ++) { | 317 for (i = index; i < m_DataSize - count; i ++) { |
318 FX_BYTE* pSrc = (FX_BYTE*)GetAt(i + count); | 318 uint8_t* pSrc = (uint8_t*)GetAt(i + count); |
319 FX_BYTE* pDest = (FX_BYTE*)GetAt(i); | 319 uint8_t* pDest = (uint8_t*)GetAt(i); |
320 for (int j = 0; j < m_UnitSize; j ++) { | 320 for (int j = 0; j < m_UnitSize; j ++) { |
321 pDest[j] = pSrc[j]; | 321 pDest[j] = pSrc[j]; |
322 } | 322 } |
323 } | 323 } |
324 int new_segs = (m_DataSize - count + m_SegmentSize - 1) / m_SegmentSize; | 324 int new_segs = (m_DataSize - count + m_SegmentSize - 1) / m_SegmentSize; |
325 int old_segs = (m_DataSize + m_SegmentSize - 1) / m_SegmentSize; | 325 int old_segs = (m_DataSize + m_SegmentSize - 1) / m_SegmentSize; |
326 if (new_segs < old_segs) { | 326 if (new_segs < old_segs) { |
327 if(m_IndexDepth) { | 327 if(m_IndexDepth) { |
328 for (i = new_segs; i < old_segs; i ++) { | 328 for (i = new_segs; i < old_segs; i ++) { |
329 void** pIndex = GetIndex(i); | 329 void** pIndex = GetIndex(i); |
330 FX_Free(pIndex[i % m_IndexSize]); | 330 FX_Free(pIndex[i % m_IndexSize]); |
331 pIndex[i % m_IndexSize] = NULL; | 331 pIndex[i % m_IndexSize] = NULL; |
332 } | 332 } |
333 } else { | 333 } else { |
334 FX_Free(m_pIndex); | 334 FX_Free(m_pIndex); |
335 m_pIndex = NULL; | 335 m_pIndex = NULL; |
336 } | 336 } |
337 } | 337 } |
338 m_DataSize -= count; | 338 m_DataSize -= count; |
339 } | 339 } |
OLD | NEW |