[serialize] Take arguments in copy()
This commit is contained in:
parent
273ed6127b
commit
88fdeeecc0
|
@ -305,8 +305,8 @@ struct OffsetTo : Offset<OffsetType, has_null>
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T, typename ...Ts>
|
||||||
bool serialize_copy (hb_serialize_context_t *c, const T &src, const void *base)
|
bool serialize_copy (hb_serialize_context_t *c, const T &src, const void *base, Ts &&...ds)
|
||||||
{
|
{
|
||||||
*this = 0;
|
*this = 0;
|
||||||
if (has_null && &src == &Null (T))
|
if (has_null && &src == &Null (T))
|
||||||
|
@ -314,7 +314,7 @@ struct OffsetTo : Offset<OffsetType, has_null>
|
||||||
|
|
||||||
c->push ();
|
c->push ();
|
||||||
|
|
||||||
c->copy (src);
|
c->copy (src, hb_forward<Ts> (ds)...);
|
||||||
|
|
||||||
c->add_link (*this, c->pop_pack (), base);
|
c->add_link (*this, c->pop_pack (), base);
|
||||||
}
|
}
|
||||||
|
|
|
@ -366,8 +366,9 @@ struct hb_serialize_context_t
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename Type> auto
|
template <typename Type, typename ...Ts> auto
|
||||||
_copy (const Type &obj, hb_priority<1>) const HB_RETURN (Type *, obj.copy (this))
|
_copy (const Type &obj, hb_priority<1>, Ts &&...ds) const HB_RETURN
|
||||||
|
(Type *, obj.copy (this, hb_forward<Ts> (ds)...))
|
||||||
|
|
||||||
template <typename Type> auto
|
template <typename Type> auto
|
||||||
_copy (const Type &obj, hb_priority<0>) const -> decltype (&(obj = obj))
|
_copy (const Type &obj, hb_priority<0>) const -> decltype (&(obj = obj))
|
||||||
|
@ -380,8 +381,9 @@ struct hb_serialize_context_t
|
||||||
|
|
||||||
/* Like embed, but active: calls obj.operator=() or obj.copy() to transfer data
|
/* Like embed, but active: calls obj.operator=() or obj.copy() to transfer data
|
||||||
* instead of memcpy(). */
|
* instead of memcpy(). */
|
||||||
template <typename Type>
|
template <typename Type, typename ...Ts>
|
||||||
Type *copy (const Type &obj) { return _copy (obj, hb_prioritize); }
|
Type *copy (const Type &obj, Ts &&...ds)
|
||||||
|
{ return _copy (obj, hb_prioritize, hb_forward<Ts> (ds)...); }
|
||||||
|
|
||||||
template <typename Type>
|
template <typename Type>
|
||||||
hb_serialize_context_t &operator << (const Type &obj) { embed (obj); return *this; }
|
hb_serialize_context_t &operator << (const Type &obj) { embed (obj); return *this; }
|
||||||
|
|
Loading…
Reference in New Issue