Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 PDFium Authors. All rights reserved. | 1 // Copyright 2016 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_FPDFAPI_PARSER_CPDF_ARRAY_H_ | 7 #ifndef CORE_FPDFAPI_PARSER_CPDF_ARRAY_H_ |
| 8 #define CORE_FPDFAPI_PARSER_CPDF_ARRAY_H_ | 8 #define CORE_FPDFAPI_PARSER_CPDF_ARRAY_H_ |
| 9 | 9 |
| 10 #include <memory> | 10 #include <memory> |
| 11 #include <set> | 11 #include <set> |
| 12 #include <type_traits> | |
| 12 #include <vector> | 13 #include <vector> |
| 13 | 14 |
| 14 #include "core/fpdfapi/parser/cpdf_indirect_object_holder.h" | 15 #include "core/fpdfapi/parser/cpdf_indirect_object_holder.h" |
| 15 #include "core/fpdfapi/parser/cpdf_object.h" | 16 #include "core/fpdfapi/parser/cpdf_object.h" |
| 16 #include "core/fxcrt/fx_basic.h" | 17 #include "core/fxcrt/fx_basic.h" |
| 17 #include "core/fxcrt/fx_coordinates.h" | 18 #include "core/fxcrt/fx_coordinates.h" |
| 18 #include "third_party/base/ptr_util.h" | 19 #include "third_party/base/ptr_util.h" |
| 19 | 20 |
| 20 class CPDF_Array : public CPDF_Object { | 21 class CPDF_Array : public CPDF_Object { |
| 21 public: | 22 public: |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 45 FX_FLOAT GetFloatAt(size_t index) const { return GetNumberAt(index); } | 46 FX_FLOAT GetFloatAt(size_t index) const { return GetNumberAt(index); } |
| 46 CFX_Matrix GetMatrix(); | 47 CFX_Matrix GetMatrix(); |
| 47 CFX_FloatRect GetRect(); | 48 CFX_FloatRect GetRect(); |
| 48 | 49 |
| 49 // Takes ownership of |pObj|, returns unowned pointer to it. | 50 // Takes ownership of |pObj|, returns unowned pointer to it. |
| 50 CPDF_Object* Add(std::unique_ptr<CPDF_Object> pObj); | 51 CPDF_Object* Add(std::unique_ptr<CPDF_Object> pObj); |
| 51 CPDF_Object* SetAt(size_t index, std::unique_ptr<CPDF_Object> pObj); | 52 CPDF_Object* SetAt(size_t index, std::unique_ptr<CPDF_Object> pObj); |
| 52 CPDF_Object* InsertAt(size_t index, std::unique_ptr<CPDF_Object> pObj); | 53 CPDF_Object* InsertAt(size_t index, std::unique_ptr<CPDF_Object> pObj); |
| 53 | 54 |
| 54 // Creates object owned by the array, returns unowned pointer to it. | 55 // Creates object owned by the array, returns unowned pointer to it. |
| 56 // We have special cases for objects that can intern strings from | |
| 57 // a ByteStringPool. | |
| 55 template <typename T, typename... Args> | 58 template <typename T, typename... Args> |
| 56 T* AddNew(Args... args) { | 59 typename std::enable_if<!std::is_same<T, CPDF_Name>::value, T*>::type AddNew( |
|
Tom Sepez
2016/11/16 22:35:47
note: the return value type is nonsense if T is CP
| |
| 60 Args... args) { | |
| 57 return static_cast<T*>(Add(pdfium::MakeUnique<T>(args...))); | 61 return static_cast<T*>(Add(pdfium::MakeUnique<T>(args...))); |
| 58 } | 62 } |
| 59 template <typename T, typename... Args> | 63 template <typename T, typename... Args> |
| 60 T* SetNewAt(size_t index, Args... args) { | 64 typename std::enable_if<std::is_same<T, CPDF_Name>::value, T*>::type AddNew( |
|
Tom Sepez
2016/11/16 22:35:47
Exact opposite. Inject a nullptr argument for the
| |
| 65 Args... args) { | |
| 66 return static_cast<T*>(Add(pdfium::MakeUnique<T>(nullptr, args...))); | |
| 67 } | |
| 68 template <typename T, typename... Args> | |
| 69 typename std::enable_if<!std::is_same<T, CPDF_Name>::value, T*>::type | |
| 70 SetNewAt(size_t index, Args... args) { | |
| 61 return static_cast<T*>(SetAt(index, pdfium::MakeUnique<T>(args...))); | 71 return static_cast<T*>(SetAt(index, pdfium::MakeUnique<T>(args...))); |
| 62 } | 72 } |
| 63 template <typename T, typename... Args> | 73 template <typename T, typename... Args> |
| 64 T* InsertNewAt(size_t index, Args... args) { | 74 typename std::enable_if<std::is_same<T, CPDF_Name>::value, T*>::type SetNewAt( |
| 75 size_t index, | |
| 76 Args... args) { | |
| 77 return static_cast<T*>( | |
| 78 SetAt(index, pdfium::MakeUnique<T>(nullptr, args...))); | |
| 79 } | |
| 80 template <typename T, typename... Args> | |
| 81 typename std::enable_if<!std::is_same<T, CPDF_Name>::value, T*>::type | |
| 82 InsertNewAt(size_t index, Args... args) { | |
| 65 return static_cast<T*>(InsertAt(index, pdfium::MakeUnique<T>(args...))); | 83 return static_cast<T*>(InsertAt(index, pdfium::MakeUnique<T>(args...))); |
| 66 } | 84 } |
| 85 template <typename T, typename... Args> | |
| 86 typename std::enable_if<std::is_same<T, CPDF_Name>::value, T*>::type | |
| 87 InsertNewAt(size_t index, Args... args) { | |
| 88 return static_cast<T*>( | |
| 89 InsertAt(index, pdfium::MakeUnique<T>(nullptr, args...))); | |
| 90 } | |
| 67 | 91 |
| 68 void RemoveAt(size_t index, size_t nCount = 1); | 92 void RemoveAt(size_t index, size_t nCount = 1); |
| 69 void ConvertToIndirectObjectAt(size_t index, CPDF_IndirectObjectHolder* pDoc); | 93 void ConvertToIndirectObjectAt(size_t index, CPDF_IndirectObjectHolder* pDoc); |
| 70 | 94 |
| 71 const_iterator begin() const { return m_Objects.begin(); } | 95 const_iterator begin() const { return m_Objects.begin(); } |
| 72 const_iterator end() const { return m_Objects.end(); } | 96 const_iterator end() const { return m_Objects.end(); } |
| 73 | 97 |
| 74 protected: | 98 protected: |
| 75 std::unique_ptr<CPDF_Object> CloneNonCyclic( | 99 std::unique_ptr<CPDF_Object> CloneNonCyclic( |
| 76 bool bDirect, | 100 bool bDirect, |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 89 | 113 |
| 90 inline std::unique_ptr<CPDF_Array> ToArray(std::unique_ptr<CPDF_Object> obj) { | 114 inline std::unique_ptr<CPDF_Array> ToArray(std::unique_ptr<CPDF_Object> obj) { |
| 91 CPDF_Array* pArray = ToArray(obj.get()); | 115 CPDF_Array* pArray = ToArray(obj.get()); |
| 92 if (!pArray) | 116 if (!pArray) |
| 93 return nullptr; | 117 return nullptr; |
| 94 obj.release(); | 118 obj.release(); |
| 95 return std::unique_ptr<CPDF_Array>(pArray); | 119 return std::unique_ptr<CPDF_Array>(pArray); |
| 96 } | 120 } |
| 97 | 121 |
| 98 #endif // CORE_FPDFAPI_PARSER_CPDF_ARRAY_H_ | 122 #endif // CORE_FPDFAPI_PARSER_CPDF_ARRAY_H_ |
| OLD | NEW |