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 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
314 } | 314 } |
315 return -1; | 315 return -1; |
316 } | 316 } |
317 }; | 317 }; |
318 | 318 |
319 #ifdef PDF_ENABLE_XFA | 319 #ifdef PDF_ENABLE_XFA |
320 typedef CFX_ArrayTemplate<CFX_WideStringC> CFX_WideStringCArray; | 320 typedef CFX_ArrayTemplate<CFX_WideStringC> CFX_WideStringCArray; |
321 typedef CFX_ArrayTemplate<FX_FLOAT> CFX_FloatArray; | 321 typedef CFX_ArrayTemplate<FX_FLOAT> CFX_FloatArray; |
322 typedef CFX_ArrayTemplate<uint8_t> CFX_ByteArray; | 322 typedef CFX_ArrayTemplate<uint8_t> CFX_ByteArray; |
323 typedef CFX_ArrayTemplate<int32_t> CFX_Int32Array; | 323 typedef CFX_ArrayTemplate<int32_t> CFX_Int32Array; |
324 | |
325 template <class ObjectClass> | |
326 class CFX_ObjectArray : public CFX_BasicArray { | |
327 public: | |
328 CFX_ObjectArray() : CFX_BasicArray(sizeof(ObjectClass)) {} | |
329 | |
330 ~CFX_ObjectArray() { RemoveAll(); } | |
331 | |
332 void Add(const ObjectClass& data) { | |
333 new ((void*)InsertSpaceAt(m_nSize, 1)) ObjectClass(data); | |
334 } | |
335 | |
336 ObjectClass& Add() { | |
337 return *(ObjectClass*)new ((void*)InsertSpaceAt(m_nSize, 1)) ObjectClass(); | |
338 } | |
339 | |
340 void* AddSpace() { return InsertSpaceAt(m_nSize, 1); } | |
341 | |
342 int32_t Append(const CFX_ObjectArray& src, | |
343 int32_t nStart = 0, | |
344 int32_t nCount = -1) { | |
345 if (nCount == 0) { | |
346 return 0; | |
347 } | |
348 int32_t nSize = src.GetSize(); | |
349 if (!nSize) { | |
350 return 0; | |
351 } | |
352 ASSERT(nStart > -1 && nStart < nSize); | |
353 if (nCount < 0) { | |
354 nCount = nSize; | |
355 } | |
356 if (nStart + nCount > nSize) { | |
357 nCount = nSize - nStart; | |
358 } | |
359 if (nCount < 1) { | |
360 return 0; | |
361 } | |
362 nSize = m_nSize; | |
363 InsertSpaceAt(m_nSize, nCount); | |
364 ObjectClass* pStartObj = (ObjectClass*)GetDataPtr(nSize); | |
365 nSize = nStart + nCount; | |
366 for (int32_t i = nStart; i < nSize; i++, pStartObj++) { | |
367 new ((void*)pStartObj) ObjectClass(src[i]); | |
368 } | |
369 return nCount; | |
370 } | |
371 | |
372 int32_t Copy(const CFX_ObjectArray& src, | |
373 int32_t nStart = 0, | |
374 int32_t nCount = -1) { | |
375 if (nCount == 0) { | |
376 return 0; | |
377 } | |
378 int32_t nSize = src.GetSize(); | |
379 if (!nSize) { | |
380 return 0; | |
381 } | |
382 ASSERT(nStart > -1 && nStart < nSize); | |
383 if (nCount < 0) { | |
384 nCount = nSize; | |
385 } | |
386 if (nStart + nCount > nSize) { | |
387 nCount = nSize - nStart; | |
388 } | |
389 if (nCount < 1) { | |
390 return 0; | |
391 } | |
392 RemoveAll(); | |
393 SetSize(nCount); | |
394 ObjectClass* pStartObj = (ObjectClass*)m_pData; | |
395 nSize = nStart + nCount; | |
396 for (int32_t i = nStart; i < nSize; i++, pStartObj++) { | |
397 new ((void*)pStartObj) ObjectClass(src[i]); | |
398 } | |
399 return nCount; | |
400 } | |
401 | |
402 int GetSize() const { return m_nSize; } | |
403 | |
404 ObjectClass& operator[](int index) const { | |
405 ASSERT(index < m_nSize); | |
406 return *(ObjectClass*)CFX_BasicArray::GetDataPtr(index); | |
407 } | |
408 | |
409 ObjectClass* GetDataPtr(int index) { | |
410 return (ObjectClass*)CFX_BasicArray::GetDataPtr(index); | |
411 } | |
412 | |
413 void RemoveAt(int index) { | |
414 ASSERT(index < m_nSize); | |
415 ((ObjectClass*)GetDataPtr(index))->~ObjectClass(); | |
416 CFX_BasicArray::RemoveAt(index, 1); | |
417 } | |
418 | |
419 void RemoveAll() { | |
420 for (int i = 0; i < m_nSize; i++) { | |
421 ((ObjectClass*)GetDataPtr(i))->~ObjectClass(); | |
422 } | |
423 CFX_BasicArray::SetSize(0); | |
424 } | |
425 }; | |
426 #endif // PDF_ENABLE_XFA | 324 #endif // PDF_ENABLE_XFA |
427 | 325 |
428 template <class DataType, int FixedSize> | 326 template <class DataType, int FixedSize> |
429 class CFX_FixedBufGrow { | 327 class CFX_FixedBufGrow { |
430 public: | 328 public: |
431 explicit CFX_FixedBufGrow(int data_size) { | 329 explicit CFX_FixedBufGrow(int data_size) { |
432 if (data_size > FixedSize) { | 330 if (data_size > FixedSize) { |
433 m_pGrowData.reset(FX_Alloc(DataType, data_size)); | 331 m_pGrowData.reset(FX_Alloc(DataType, data_size)); |
434 return; | 332 return; |
435 } | 333 } |
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
846 FX_FLOAT e; | 744 FX_FLOAT e; |
847 FX_FLOAT f; | 745 FX_FLOAT f; |
848 FX_FLOAT g; | 746 FX_FLOAT g; |
849 FX_FLOAT h; | 747 FX_FLOAT h; |
850 FX_FLOAT i; | 748 FX_FLOAT i; |
851 }; | 749 }; |
852 | 750 |
853 uint32_t GetBits32(const uint8_t* pData, int bitpos, int nbits); | 751 uint32_t GetBits32(const uint8_t* pData, int bitpos, int nbits); |
854 | 752 |
855 #endif // CORE_FXCRT_FX_BASIC_H_ | 753 #endif // CORE_FXCRT_FX_BASIC_H_ |
OLD | NEW |