[arrays] Port hb_vector_t.lsearch() to hb_array_t's
This commit is contained in:
parent
96cf088980
commit
830856ba6b
|
@ -575,9 +575,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); }
|
||||||
|
|
||||||
template <typename hb_sanitize_context_t>
|
template <typename T>
|
||||||
inline bool sanitize (hb_sanitize_context_t *c) const
|
inline Type *lsearch (const T &x, Type *not_found = nullptr)
|
||||||
{ return c->check_array (arrayZ, len); }
|
{
|
||||||
|
unsigned int count = len;
|
||||||
|
for (unsigned int i = 0; i < count; i++)
|
||||||
|
if (!this->arrayZ[i].cmp (x))
|
||||||
|
return &this->arrayZ[i];
|
||||||
|
return not_found;
|
||||||
|
}
|
||||||
|
template <typename T>
|
||||||
|
inline const Type *lsearch (const T &x, const Type *not_found = nullptr) const
|
||||||
|
{
|
||||||
|
unsigned int count = len;
|
||||||
|
for (unsigned int i = 0; i < count; i++)
|
||||||
|
if (!this->arrayZ[i].cmp (x))
|
||||||
|
return &this->arrayZ[i];
|
||||||
|
return not_found;
|
||||||
|
}
|
||||||
|
|
||||||
template <typename T> inline operator T * (void) const { return arrayZ; }
|
template <typename T> inline operator T * (void) const { return arrayZ; }
|
||||||
|
|
||||||
|
@ -601,6 +616,11 @@ struct hb_array_t
|
||||||
|
|
||||||
inline void free (void) { ::free ((void *) arrayZ); arrayZ = nullptr; len = 0; }
|
inline void free (void) { ::free ((void *) arrayZ); arrayZ = nullptr; len = 0; }
|
||||||
|
|
||||||
|
template <typename hb_sanitize_context_t>
|
||||||
|
inline bool sanitize (hb_sanitize_context_t *c) const
|
||||||
|
{ return c->check_array (arrayZ, len); }
|
||||||
|
|
||||||
|
public:
|
||||||
Type *arrayZ;
|
Type *arrayZ;
|
||||||
unsigned int len;
|
unsigned int len;
|
||||||
};
|
};
|
||||||
|
|
|
@ -229,22 +229,14 @@ struct hb_vector_t
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
inline Type *lsearch (const T &x)
|
inline Type *lsearch (const T &x, Type *not_found = nullptr)
|
||||||
{
|
{
|
||||||
Type *array = arrayZ();
|
return as_array ().lsearch (x, not_found);
|
||||||
for (unsigned int i = 0; i < len; i++)
|
|
||||||
if (0 == array[i].cmp (x))
|
|
||||||
return &array[i];
|
|
||||||
return nullptr;
|
|
||||||
}
|
}
|
||||||
template <typename T>
|
template <typename T>
|
||||||
inline const Type *lsearch (const T &x) const
|
inline const Type *lsearch (const T &x, const Type *not_found = nullptr) const
|
||||||
{
|
{
|
||||||
const Type *array = arrayZ();
|
return as_array ().lsearch (x, not_found);
|
||||||
for (unsigned int i = 0; i < len; i++)
|
|
||||||
if (0 == array[i].cmp (x))
|
|
||||||
return &array[i];
|
|
||||||
return nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
|
Loading…
Reference in New Issue