mirror of https://code.videolan.org/videolan/vlc
vector: add convenience access methods
Accessing the last element of a vector is a common operation. Having it named and bound checked would definetely be a plus for `vlc_vector` usage. It avoids error-prones index accesses.
This commit is contained in:
parent
fbb608d18c
commit
5344b0a910
|
@ -664,6 +664,24 @@ vlc_vector_move_(char *array, size_t index, size_t count, size_t target)
|
|||
((item) = (pv)->data[vlc_vector_idx_##item], true); \
|
||||
++vlc_vector_idx_##item)
|
||||
|
||||
/**
|
||||
* Returns a reference to the vector's first element.
|
||||
*/
|
||||
#define vlc_vector_last(pv) \
|
||||
( \
|
||||
assert((pv)->size != 0), \
|
||||
(pv)->data[(pv)->size - 1] \
|
||||
)
|
||||
|
||||
/**
|
||||
* Returns a reference on the vector's last element.
|
||||
*/
|
||||
#define vlc_vector_last_ref(pv) \
|
||||
( \
|
||||
assert((pv)->size != 0), \
|
||||
&(pv)->data[(pv)->size - 1] \
|
||||
)
|
||||
|
||||
/** @} */
|
||||
|
||||
#endif
|
||||
|
|
|
@ -39,6 +39,8 @@ static void test_vector_insert_remove(void)
|
|||
assert(ok);
|
||||
assert(vec.data[0] == 42);
|
||||
assert(vec.size == 1);
|
||||
assert(vlc_vector_last(&vec) == 42);
|
||||
assert(*vlc_vector_last_ref(&vec) == 42);
|
||||
|
||||
ok = vlc_vector_push(&vec, 37);
|
||||
assert(ok);
|
||||
|
@ -66,6 +68,8 @@ static void test_vector_insert_remove(void)
|
|||
assert(vec.data[0] == 42);
|
||||
assert(vec.data[1] == 37);
|
||||
assert(vec.data[2] == 77);
|
||||
assert(vlc_vector_last(&vec) == 77);
|
||||
assert(*vlc_vector_last_ref(&vec) == 77);
|
||||
|
||||
vlc_vector_clear(&vec);
|
||||
assert(vec.size == 0);
|
||||
|
|
Loading…
Reference in New Issue