[serialize] Take arguments in copy()
diff --git a/src/hb-open-type.hh b/src/hb-open-type.hh index 17e8d2a..cd80b3a 100644 --- a/src/hb-open-type.hh +++ b/src/hb-open-type.hh
@@ -305,8 +305,8 @@ return ret; } - template <typename T> - bool serialize_copy (hb_serialize_context_t *c, const T &src, const void *base) + template <typename T, typename ...Ts> + bool serialize_copy (hb_serialize_context_t *c, const T &src, const void *base, Ts &&...ds) { *this = 0; if (has_null && &src == &Null (T)) @@ -314,7 +314,7 @@ c->push (); - c->copy (src); + c->copy (src, hb_forward<Ts> (ds)...); c->add_link (*this, c->pop_pack (), base); }
diff --git a/src/hb-serialize.hh b/src/hb-serialize.hh index 7566881..61195a4 100644 --- a/src/hb-serialize.hh +++ b/src/hb-serialize.hh
@@ -366,8 +366,9 @@ return ret; } - template <typename Type> auto - _copy (const Type &obj, hb_priority<1>) const HB_RETURN (Type *, obj.copy (this)) + template <typename Type, typename ...Ts> auto + _copy (const Type &obj, hb_priority<1>, Ts &&...ds) const HB_RETURN + (Type *, obj.copy (this, hb_forward<Ts> (ds)...)) template <typename Type> auto _copy (const Type &obj, hb_priority<0>) const -> decltype (&(obj = obj)) @@ -380,8 +381,9 @@ /* Like embed, but active: calls obj.operator=() or obj.copy() to transfer data * instead of memcpy(). */ - template <typename Type> - Type *copy (const Type &obj) { return _copy (obj, hb_prioritize); } + template <typename Type, typename ...Ts> + Type *copy (const Type &obj, Ts &&...ds) + { return _copy (obj, hb_prioritize, hb_forward<Ts> (ds)...); } template <typename Type> hb_serialize_context_t &operator << (const Type &obj) { embed (obj); return *this; }