[arrays] Merge ArrayOf's sub_array into hb_array_t's
This commit is contained in:
parent
e6877e28cd
commit
3246a8ebbd
|
@ -567,6 +567,7 @@ struct hb_array_t
|
||||||
{
|
{
|
||||||
static_assert ((bool) (unsigned) hb_static_size (Type), "");
|
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 (const hb_array_t &o) : arrayZ (o.arrayZ), len (o.len) {}
|
||||||
inline hb_array_t (Type *array_, unsigned int len_) : arrayZ (array_), len (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 unsigned int get_size (void) const { return len * sizeof (Type); }
|
||||||
|
|
||||||
|
inline hb_array_t<Type> sub_array (unsigned int start_offset, unsigned int *seg_count /* IN/OUT */) const
|
||||||
|
{
|
||||||
|
if (!seg_count) return hb_array_t<Type> ();
|
||||||
|
|
||||||
|
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<Type> (arrayZ + start_offset, count);
|
||||||
|
}
|
||||||
|
inline hb_array_t<Type> 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 <typename T>
|
template <typename T>
|
||||||
inline Type *lsearch (const T &x,
|
inline Type *lsearch (const T &x,
|
||||||
Type *not_found = nullptr)
|
Type *not_found = nullptr)
|
||||||
|
@ -620,23 +639,8 @@ struct hb_array_t
|
||||||
::qsort (arrayZ + start, end - start, sizeof (Type), Type::cmp);
|
::qsort (arrayZ + start, end - start, sizeof (Type), Type::cmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline hb_array_t<Type> sub_array (unsigned int start_offset, unsigned int seg_count) const
|
inline void free (void)
|
||||||
{
|
{ ::free ((void *) arrayZ); arrayZ = nullptr; len = 0; }
|
||||||
unsigned int count = len;
|
|
||||||
if (unlikely (start_offset > count))
|
|
||||||
count = 0;
|
|
||||||
else
|
|
||||||
count -= start_offset;
|
|
||||||
count = MIN (count, seg_count);
|
|
||||||
return hb_array_t<Type> (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; }
|
|
||||||
|
|
||||||
template <typename hb_sanitize_context_t>
|
template <typename hb_sanitize_context_t>
|
||||||
inline bool sanitize (hb_sanitize_context_t *c) const
|
inline bool sanitize (hb_sanitize_context_t *c) const
|
||||||
|
@ -660,9 +664,15 @@ enum hb_bfind_not_found_t
|
||||||
template <typename Type>
|
template <typename Type>
|
||||||
struct hb_sorted_array_t : hb_array_t<Type>
|
struct hb_sorted_array_t : hb_array_t<Type>
|
||||||
{
|
{
|
||||||
|
inline hb_sorted_array_t (void) : hb_array_t<Type> () {}
|
||||||
inline hb_sorted_array_t (const hb_array_t<Type> &o) : hb_array_t<Type> (o) {}
|
inline hb_sorted_array_t (const hb_array_t<Type> &o) : hb_array_t<Type> (o) {}
|
||||||
inline hb_sorted_array_t (Type *array_, unsigned int len_) : hb_array_t<Type> (array_, len_) {}
|
inline hb_sorted_array_t (Type *array_, unsigned int len_) : hb_array_t<Type> (array_, len_) {}
|
||||||
|
|
||||||
|
inline hb_sorted_array_t<Type> sub_array (unsigned int start_offset, unsigned int *seg_count /* IN/OUT */) const
|
||||||
|
{ return hb_sorted_array_t<Type> (((const hb_array_t<Type> *) (this))->sub_array (start_offset, seg_count)); }
|
||||||
|
inline hb_sorted_array_t<Type> sub_array (unsigned int start_offset, unsigned int seg_count) const
|
||||||
|
{ return sub_array (start_offset, &seg_count); }
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
inline Type *bsearch (const T &x, Type *not_found = nullptr)
|
inline Type *bsearch (const T &x, Type *not_found = nullptr)
|
||||||
{
|
{
|
||||||
|
|
|
@ -492,18 +492,6 @@ struct ArrayOf
|
||||||
|
|
||||||
HB_NO_CREATE_COPY_ASSIGN_TEMPLATE2 (ArrayOf, Type, LenType);
|
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
|
inline const Type& operator [] (unsigned int i) const
|
||||||
{
|
{
|
||||||
if (unlikely (i >= len)) return Null (Type);
|
if (unlikely (i >= len)) return Null (Type);
|
||||||
|
@ -523,6 +511,15 @@ struct ArrayOf
|
||||||
inline hb_array_t<const Type> as_array (void) const
|
inline hb_array_t<const Type> as_array (void) const
|
||||||
{ return hb_array (arrayZ, len); }
|
{ return hb_array (arrayZ, len); }
|
||||||
|
|
||||||
|
inline hb_array_t<const Type> sub_array (unsigned int start_offset, unsigned int count) const
|
||||||
|
{ return as_array ().sub_array (start_offset, count);}
|
||||||
|
inline hb_array_t<const Type> sub_array (unsigned int start_offset, unsigned int *count /* IN/OUT */) const
|
||||||
|
{ return as_array ().sub_array (start_offset, count);}
|
||||||
|
inline hb_array_t<Type> sub_array (unsigned int start_offset, unsigned int count)
|
||||||
|
{ return as_array ().sub_array (start_offset, count);}
|
||||||
|
inline hb_array_t<Type> 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,
|
inline bool serialize (hb_serialize_context_t *c,
|
||||||
unsigned int items_len)
|
unsigned int items_len)
|
||||||
{
|
{
|
||||||
|
@ -777,6 +774,15 @@ struct SortedArrayOf : ArrayOf<Type, LenType>
|
||||||
inline hb_sorted_array_t<const Type> as_array (void) const
|
inline hb_sorted_array_t<const Type> as_array (void) const
|
||||||
{ return hb_sorted_array (this->arrayZ, this->len); }
|
{ return hb_sorted_array (this->arrayZ, this->len); }
|
||||||
|
|
||||||
|
inline hb_array_t<const Type> sub_array (unsigned int start_offset, unsigned int count) const
|
||||||
|
{ return as_array ().sub_array (start_offset, count);}
|
||||||
|
inline hb_array_t<const Type> sub_array (unsigned int start_offset, unsigned int *count /* IN/OUT */) const
|
||||||
|
{ return as_array ().sub_array (start_offset, count);}
|
||||||
|
inline hb_array_t<Type> sub_array (unsigned int start_offset, unsigned int count)
|
||||||
|
{ return as_array ().sub_array (start_offset, count);}
|
||||||
|
inline hb_array_t<Type> sub_array (unsigned int start_offset, unsigned int *count /* IN/OUT */)
|
||||||
|
{ return as_array ().sub_array (start_offset, count);}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
inline Type &bsearch (const T &x, Type ¬_found = Crap (Type))
|
inline Type &bsearch (const T &x, Type ¬_found = Crap (Type))
|
||||||
{ return *as_array ().bsearch (x, ¬_found); }
|
{ return *as_array ().bsearch (x, ¬_found); }
|
||||||
|
|
Loading…
Reference in New Issue