Chromium Code Reviews| Index: core/fpdfapi/parser/cpdf_array.h |
| diff --git a/core/fpdfapi/parser/cpdf_array.h b/core/fpdfapi/parser/cpdf_array.h |
| index b7aec7e190327dbf66cd206aaaa7fadd8f6252b8..9c3193325c08e7ab07e44ab5397fe07c3faaae4d 100644 |
| --- a/core/fpdfapi/parser/cpdf_array.h |
| +++ b/core/fpdfapi/parser/cpdf_array.h |
| @@ -9,6 +9,7 @@ |
| #include <memory> |
| #include <set> |
| +#include <type_traits> |
| #include <vector> |
| #include "core/fpdfapi/parser/cpdf_indirect_object_holder.h" |
| @@ -52,18 +53,41 @@ class CPDF_Array : public CPDF_Object { |
| CPDF_Object* InsertAt(size_t index, std::unique_ptr<CPDF_Object> pObj); |
| // Creates object owned by the array, returns unowned pointer to it. |
| + // We have special cases for objects that can intern strings from |
| + // a ByteStringPool. |
| template <typename T, typename... Args> |
| - T* AddNew(Args... args) { |
| + 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
|
| + Args... args) { |
| return static_cast<T*>(Add(pdfium::MakeUnique<T>(args...))); |
| } |
| template <typename T, typename... Args> |
| - T* SetNewAt(size_t index, Args... args) { |
| + 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
|
| + Args... args) { |
| + return static_cast<T*>(Add(pdfium::MakeUnique<T>(nullptr, args...))); |
| + } |
| + template <typename T, typename... Args> |
| + typename std::enable_if<!std::is_same<T, CPDF_Name>::value, T*>::type |
| + SetNewAt(size_t index, Args... args) { |
| return static_cast<T*>(SetAt(index, pdfium::MakeUnique<T>(args...))); |
| } |
| template <typename T, typename... Args> |
| - T* InsertNewAt(size_t index, Args... args) { |
| + typename std::enable_if<std::is_same<T, CPDF_Name>::value, T*>::type SetNewAt( |
| + size_t index, |
| + Args... args) { |
| + return static_cast<T*>( |
| + SetAt(index, pdfium::MakeUnique<T>(nullptr, args...))); |
| + } |
| + template <typename T, typename... Args> |
| + typename std::enable_if<!std::is_same<T, CPDF_Name>::value, T*>::type |
| + InsertNewAt(size_t index, Args... args) { |
| return static_cast<T*>(InsertAt(index, pdfium::MakeUnique<T>(args...))); |
| } |
| + template <typename T, typename... Args> |
| + typename std::enable_if<std::is_same<T, CPDF_Name>::value, T*>::type |
| + InsertNewAt(size_t index, Args... args) { |
| + return static_cast<T*>( |
| + InsertAt(index, pdfium::MakeUnique<T>(nullptr, args...))); |
| + } |
| void RemoveAt(size_t index, size_t nCount = 1); |
| void ConvertToIndirectObjectAt(size_t index, CPDF_IndirectObjectHolder* pDoc); |