[iter] Change item_size to get_item_size()

By moving access to hb_static_size(Type) into a function instead of
a class-const, we can refer to iter types of incomplete types, which
come handy when a method of hb_array_t wants to return iterator
of hb_array_t.  That kind of stuff.   Next commit needs this to
build on clang...
This commit is contained in:
Behdad Esfahbod 2019-08-29 15:45:21 -07:00
parent d58e248df6
commit c72589f13f
2 changed files with 6 additions and 6 deletions

View File

@ -141,13 +141,13 @@ struct hb_array_t : hb_iter_with_fallback_t<hb_array_t<Type>, Type&>
hb_sorted_array_t<Type> qsort (int (*cmp_)(const void*, const void*)) hb_sorted_array_t<Type> qsort (int (*cmp_)(const void*, const void*))
{ {
if (likely (length)) if (likely (length))
hb_qsort (arrayZ, length, this->item_size, cmp_); hb_qsort (arrayZ, length, this->get_item_size (), cmp_);
return hb_sorted_array_t<Type> (*this); return hb_sorted_array_t<Type> (*this);
} }
hb_sorted_array_t<Type> qsort () hb_sorted_array_t<Type> qsort ()
{ {
if (likely (length)) if (likely (length))
hb_qsort (arrayZ, length, this->item_size, Type::cmp); hb_qsort (arrayZ, length, this->get_item_size (), Type::cmp);
return hb_sorted_array_t<Type> (*this); return hb_sorted_array_t<Type> (*this);
} }
void qsort (unsigned int start, unsigned int end) void qsort (unsigned int start, unsigned int end)
@ -155,14 +155,14 @@ struct hb_array_t : hb_iter_with_fallback_t<hb_array_t<Type>, Type&>
end = hb_min (end, length); end = hb_min (end, length);
assert (start <= end); assert (start <= end);
if (likely (start < end)) if (likely (start < end))
hb_qsort (arrayZ + start, end - start, this->item_size, Type::cmp); hb_qsort (arrayZ + start, end - start, this->get_item_size (), Type::cmp);
} }
/* /*
* Other methods. * Other methods.
*/ */
unsigned int get_size () const { return length * this->item_size; } unsigned int get_size () const { return length * this->get_item_size (); }
hb_array_t sub_array (unsigned int start_offset = 0, unsigned int *seg_count = nullptr /* IN/OUT */) const hb_array_t sub_array (unsigned int start_offset = 0, unsigned int *seg_count = nullptr /* IN/OUT */) const
{ {

View File

@ -64,7 +64,7 @@ template <typename iter_t, typename Item = typename iter_t::__item_t__>
struct hb_iter_t struct hb_iter_t
{ {
typedef Item item_t; typedef Item item_t;
static constexpr unsigned item_size = hb_static_size (Item); constexpr unsigned get_item_size () const { return hb_static_size (Item); }
static constexpr bool is_iterator = true; static constexpr bool is_iterator = true;
static constexpr bool is_random_access_iterator = false; static constexpr bool is_random_access_iterator = false;
static constexpr bool is_sorted_iterator = false; static constexpr bool is_sorted_iterator = false;
@ -130,7 +130,7 @@ struct hb_iter_t
using item_t = typename Name::item_t; \ using item_t = typename Name::item_t; \
using Name::begin; \ using Name::begin; \
using Name::end; \ using Name::end; \
using Name::item_size; \ using Name::get_item_size; \
using Name::is_iterator; \ using Name::is_iterator; \
using Name::iter; \ using Name::iter; \
using Name::operator bool; \ using Name::operator bool; \