[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:
parent
d58e248df6
commit
c72589f13f
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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; \
|
||||||
|
|
Loading…
Reference in New Issue