diff options
author | 2018-04-24 14:57:09 -0400 | |
---|---|---|
committer | 2018-04-24 19:29:16 +0000 | |
commit | 47728258b05a1ae040ed03aee53eabbaa0acbc5a (patch) | |
tree | 71a3dd20eb86333340e0ab2b676c29787f7af1bc | |
parent | 6cdb7d3a4ca932d1564ffea1602d5c39c5e046a2 (diff) |
include/private/SkTemplates: SkInPlaceNewCheck uses ...
Change-Id: Ia9af6daec20bdd4bfa7f34c8bff7b400f5775dd9
Reviewed-on: https://skia-review.googlesource.com/123503
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Hal Canary <halcanary@google.com>
-rw-r--r-- | include/private/SkTemplates.h | 18 |
1 files changed, 4 insertions, 14 deletions
diff --git a/include/private/SkTemplates.h b/include/private/SkTemplates.h index 79a13886f1..4a9a2f223b 100644 --- a/include/private/SkTemplates.h +++ b/include/private/SkTemplates.h @@ -386,21 +386,11 @@ template <typename T> void SkInPlaceDeleteCheck(T* obj, void* storage) { * ... * SkInPlaceDeleteCheck(obj, storage); */ -template <typename T> T* SkInPlaceNewCheck(void* storage, size_t size) { - return (sizeof(T) <= size) ? new (storage) T : new T; +template<typename T, typename... Args> +T* SkInPlaceNewCheck(void* storage, size_t size, Args&&... args) { + return (sizeof(T) <= size) ? new (storage) T(std::forward<Args>(args)...) + : new T(std::forward<Args>(args)...); } - -template <typename T, typename A1, typename A2, typename A3> -T* SkInPlaceNewCheck(void* storage, size_t size, const A1& a1, const A2& a2, const A3& a3) { - return (sizeof(T) <= size) ? new (storage) T(a1, a2, a3) : new T(a1, a2, a3); -} - -template <typename T, typename A1, typename A2, typename A3, typename A4> -T* SkInPlaceNewCheck(void* storage, size_t size, - const A1& a1, const A2& a2, const A3& a3, const A4& a4) { - return (sizeof(T) <= size) ? new (storage) T(a1, a2, a3, a4) : new T(a1, a2, a3, a4); -} - /** * Reserves memory that is aligned on double and pointer boundaries. * Hopefully this is sufficient for all practical purposes. |