From: Behdad Esfahbod Date: Sun, 25 Nov 2018 02:32:00 +0000 (-0500) Subject: [arrays] Merge ArrayOf's sub_array into hb_array_t's X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3246a8ebbd900bcc3e3c70532eab0f406b8f5c4a;p=platform%2Fupstream%2FlibHarfBuzzSharp.git [arrays] Merge ArrayOf's sub_array into hb_array_t's --- diff --git a/src/hb-dsalgs.hh b/src/hb-dsalgs.hh index 1680bf9..5773596 100644 --- a/src/hb-dsalgs.hh +++ b/src/hb-dsalgs.hh @@ -567,6 +567,7 @@ struct hb_array_t { static_assert ((bool) (unsigned) hb_static_size (Type), ""); + inline hb_array_t (void) : arrayZ (nullptr), len (0) {} inline hb_array_t (const hb_array_t &o) : arrayZ (o.arrayZ), len (o.len) {} inline hb_array_t (Type *array_, unsigned int len_) : arrayZ (array_), len (len_) {} @@ -582,6 +583,24 @@ struct hb_array_t inline unsigned int get_size (void) const { return len * sizeof (Type); } + inline hb_array_t sub_array (unsigned int start_offset, unsigned int *seg_count /* IN/OUT */) const + { + if (!seg_count) return hb_array_t (); + + unsigned int count = len; + if (unlikely (start_offset > count)) + count = 0; + else + count -= start_offset; + count = *seg_count = MIN (count, *seg_count); + return hb_array_t (arrayZ + start_offset, count); + } + inline hb_array_t sub_array (unsigned int start_offset, unsigned int seg_count) const + { return sub_array (start_offset, &seg_count); } + + inline hb_bytes_t as_bytes (void) const + { return hb_bytes_t (arrayZ, len * sizeof (Type)); } + template inline Type *lsearch (const T &x, Type *not_found = nullptr) @@ -620,23 +639,8 @@ struct hb_array_t ::qsort (arrayZ + start, end - start, sizeof (Type), Type::cmp); } - inline hb_array_t sub_array (unsigned int start_offset, unsigned int seg_count) const - { - unsigned int count = len; - if (unlikely (start_offset > count)) - count = 0; - else - count -= start_offset; - count = MIN (count, seg_count); - return hb_array_t (arrayZ + start_offset, count); - } - - inline hb_bytes_t as_bytes (void) const - { - return hb_bytes_t (arrayZ, len * sizeof (Type)); - } - - inline void free (void) { ::free ((void *) arrayZ); arrayZ = nullptr; len = 0; } + inline void free (void) + { ::free ((void *) arrayZ); arrayZ = nullptr; len = 0; } template inline bool sanitize (hb_sanitize_context_t *c) const @@ -660,9 +664,15 @@ enum hb_bfind_not_found_t template struct hb_sorted_array_t : hb_array_t { + inline hb_sorted_array_t (void) : hb_array_t () {} inline hb_sorted_array_t (const hb_array_t &o) : hb_array_t (o) {} inline hb_sorted_array_t (Type *array_, unsigned int len_) : hb_array_t (array_, len_) {} + inline hb_sorted_array_t sub_array (unsigned int start_offset, unsigned int *seg_count /* IN/OUT */) const + { return hb_sorted_array_t (((const hb_array_t *) (this))->sub_array (start_offset, seg_count)); } + inline hb_sorted_array_t sub_array (unsigned int start_offset, unsigned int seg_count) const + { return sub_array (start_offset, &seg_count); } + template inline Type *bsearch (const T &x, Type *not_found = nullptr) { diff --git a/src/hb-open-type.hh b/src/hb-open-type.hh index 2e3db31..83edc77 100644 --- a/src/hb-open-type.hh +++ b/src/hb-open-type.hh @@ -492,18 +492,6 @@ struct ArrayOf HB_NO_CREATE_COPY_ASSIGN_TEMPLATE2 (ArrayOf, Type, LenType); - inline const Type *sub_array (unsigned int start_offset, unsigned int *pcount /* IN/OUT */) const - { - unsigned int count = len; - if (unlikely (start_offset > count)) - count = 0; - else - count -= start_offset; - count = MIN (count, *pcount); - *pcount = count; - return arrayZ + start_offset; - } - inline const Type& operator [] (unsigned int i) const { if (unlikely (i >= len)) return Null (Type); @@ -523,6 +511,15 @@ struct ArrayOf inline hb_array_t as_array (void) const { return hb_array (arrayZ, len); } + inline hb_array_t sub_array (unsigned int start_offset, unsigned int count) const + { return as_array ().sub_array (start_offset, count);} + inline hb_array_t sub_array (unsigned int start_offset, unsigned int *count /* IN/OUT */) const + { return as_array ().sub_array (start_offset, count);} + inline hb_array_t sub_array (unsigned int start_offset, unsigned int count) + { return as_array ().sub_array (start_offset, count);} + inline hb_array_t sub_array (unsigned int start_offset, unsigned int *count /* IN/OUT */) + { return as_array ().sub_array (start_offset, count);} + inline bool serialize (hb_serialize_context_t *c, unsigned int items_len) { @@ -777,6 +774,15 @@ struct SortedArrayOf : ArrayOf inline hb_sorted_array_t as_array (void) const { return hb_sorted_array (this->arrayZ, this->len); } + inline hb_array_t sub_array (unsigned int start_offset, unsigned int count) const + { return as_array ().sub_array (start_offset, count);} + inline hb_array_t sub_array (unsigned int start_offset, unsigned int *count /* IN/OUT */) const + { return as_array ().sub_array (start_offset, count);} + inline hb_array_t sub_array (unsigned int start_offset, unsigned int count) + { return as_array ().sub_array (start_offset, count);} + inline hb_array_t sub_array (unsigned int start_offset, unsigned int *count /* IN/OUT */) + { return as_array ().sub_array (start_offset, count);} + template inline Type &bsearch (const T &x, Type ¬_found = Crap (Type)) { return *as_array ().bsearch (x, ¬_found); }