Added ev_vec_find
Signed-off-by: Robear Selwans <robear.selwans@outlook.com>
This commit is contained in:
40
ev_vec.h
40
ev_vec.h
@@ -200,6 +200,19 @@ ev_vec_iter_next(
|
|||||||
const ev_vec_t* v,
|
const ev_vec_t* v,
|
||||||
void **iter);
|
void **iter);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief A function that looks for the index of `val` in `v`
|
||||||
|
*
|
||||||
|
* \param v A pointer to the vector that is being iterated over
|
||||||
|
* \param val A pointer to the object that will be compared with vector elements
|
||||||
|
*
|
||||||
|
* \returns If found, index of element in vector. Otherwise, -1.
|
||||||
|
*/
|
||||||
|
EV_VEC_API i32
|
||||||
|
ev_vec_find(
|
||||||
|
const ev_vec_t* v,
|
||||||
|
void* val);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief A function that destroys a vector object. If the element type has a
|
* \brief A function that destroys a vector object. If the element type has a
|
||||||
* destructor function, then this function is called on every element before
|
* destructor function, then this function is called on every element before
|
||||||
@@ -404,6 +417,33 @@ ev_vec_init_impl(
|
|||||||
return metadata + 1;
|
return metadata + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
i32
|
||||||
|
ev_vec_find(
|
||||||
|
const ev_vec_t* v,
|
||||||
|
void *val)
|
||||||
|
{
|
||||||
|
__ev_vec_getmeta(*v)
|
||||||
|
if(metadata->typeData.equal_fn) {
|
||||||
|
for(u32 i = 0; i < metadata->length; i++) {
|
||||||
|
void *elem = *v + metadata->typeData.size * i;
|
||||||
|
if(!metadata->typeData.equal_fn(elem, val))
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for(u32 i = 0; i < metadata->length; i++) {
|
||||||
|
void *elem = *v + metadata->typeData.size * i;
|
||||||
|
if(!memcmp(elem, val, metadata->typeData.size))
|
||||||
|
{
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ev_vec_fini(
|
ev_vec_fini(
|
||||||
ev_vec_t* v)
|
ev_vec_t* v)
|
||||||
|
|||||||
Reference in New Issue
Block a user