From 142ac5a6be6088771e0ee4b135ba753c80036a9a Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Fri, 24 Aug 2018 10:07:49 -0700 Subject: [PATCH] [serialize] Add copy_bytes() and copy_blob() --- src/hb-dsalgs.hh | 3 +++ src/hb-machinery-private.hh | 21 ++++++++++++++++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/hb-dsalgs.hh b/src/hb-dsalgs.hh index 8cbe658..8d59c6c 100644 --- a/src/hb-dsalgs.hh +++ b/src/hb-dsalgs.hh @@ -502,6 +502,9 @@ struct hb_bytes_t { inline hb_bytes_t (void) : bytes (nullptr), len (0) {} inline hb_bytes_t (const char *bytes_, unsigned int len_) : bytes (bytes_), len (len_) {} + inline hb_bytes_t (const void *bytes_, unsigned int len_) : bytes ((const char *) bytes_), len (len_) {} + + inline void free (void) { ::free ((void *) bytes); bytes = nullptr; len = 0; } inline int cmp (const hb_bytes_t &a) const { diff --git a/src/hb-machinery-private.hh b/src/hb-machinery-private.hh index 99ef485..05add1f 100644 --- a/src/hb-machinery-private.hh +++ b/src/hb-machinery-private.hh @@ -402,7 +402,7 @@ struct hb_serialize_context_t } template - inline Type *copy (void) + inline Type *copy (void) const { assert (!this->ran_out_of_room); unsigned int len = this->head - this->start; @@ -411,6 +411,25 @@ struct hb_serialize_context_t memcpy (p, this->start, len); return reinterpret_cast (p); } + inline hb_bytes_t copy_bytes (void) const + { + assert (!this->ran_out_of_room); + unsigned int len = this->head - this->start; + void *p = malloc (len); + if (p) + memcpy (p, this->start, len); + else + return hb_bytes_t (); + return hb_bytes_t (p, len); + } + inline hb_blob_t *copy_blob (void) const + { + assert (!this->ran_out_of_room); + return hb_blob_create (this->start, + this->head - this->start, + HB_MEMORY_MODE_DUPLICATE, + nullptr, nullptr); + } template inline Type *allocate_size (unsigned int size) -- 2.7.4