[serialize] Take arguments in copy()
authorBehdad Esfahbod <behdad@behdad.org>
Thu, 2 May 2019 21:14:33 +0000 (14:14 -0700)
committerBehdad Esfahbod <behdad@behdad.org>
Thu, 2 May 2019 21:14:33 +0000 (14:14 -0700)
src/hb-open-type.hh
src/hb-serialize.hh

index 17e8d2a..cd80b3a 100644 (file)
@@ -305,8 +305,8 @@ struct OffsetTo : Offset<OffsetType, has_null>
     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 @@ struct OffsetTo : Offset<OffsetType, has_null>
 
     c->push ();
 
-    c->copy (src);
+    c->copy (src, hb_forward<Ts> (ds)...);
 
     c->add_link (*this, c->pop_pack (), base);
   }
index 7566881..61195a4 100644 (file)
@@ -366,8 +366,9 @@ struct hb_serialize_context_t
     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 @@ struct hb_serialize_context_t
 
   /* 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; }