parent
9c6499d9f4
commit
39fb57c0e4
|
@ -195,7 +195,12 @@ struct hb_serialize_context_t
|
||||||
obj->fini ();
|
obj->fini ();
|
||||||
object_pool.free (obj);
|
object_pool.free (obj);
|
||||||
}
|
}
|
||||||
objidx_t pop_pack ()
|
|
||||||
|
/* Set share to false when an object is unlikely sharable with others
|
||||||
|
* so not worth an attempt, or a contiguous table is serialized as
|
||||||
|
* multiple consecutive objects in the reverse order so can't be shared.
|
||||||
|
*/
|
||||||
|
objidx_t pop_pack (bool share=true)
|
||||||
{
|
{
|
||||||
object_t *obj = current;
|
object_t *obj = current;
|
||||||
if (unlikely (!obj)) return 0;
|
if (unlikely (!obj)) return 0;
|
||||||
|
@ -211,11 +216,15 @@ struct hb_serialize_context_t
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
objidx_t objidx = packed_map.get (obj);
|
objidx_t objidx;
|
||||||
if (objidx)
|
if (share)
|
||||||
{
|
{
|
||||||
obj->fini ();
|
objidx = packed_map.get (obj);
|
||||||
return objidx;
|
if (objidx)
|
||||||
|
{
|
||||||
|
obj->fini ();
|
||||||
|
return objidx;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tail -= len;
|
tail -= len;
|
||||||
|
@ -231,7 +240,7 @@ struct hb_serialize_context_t
|
||||||
|
|
||||||
objidx = packed.length - 1;
|
objidx = packed.length - 1;
|
||||||
|
|
||||||
packed_map.set (obj, objidx);
|
if (share) packed_map.set (obj, objidx);
|
||||||
|
|
||||||
return objidx;
|
return objidx;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue