From 7836409aade83179b43dd7ad0699d9edf68aad90 Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Sat, 18 Oct 2008 15:18:43 +0000 Subject: Add API to vector to permit peeking. svn path=/trunk/libparserutils/; revision=5596 --- include/parserutils/utils/vector.h | 2 ++ src/utils/vector.c | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/include/parserutils/utils/vector.h b/include/parserutils/utils/vector.h index 10e8356..6bfd0fe 100644 --- a/include/parserutils/utils/vector.h +++ b/include/parserutils/utils/vector.h @@ -27,6 +27,8 @@ parserutils_error parserutils_vector_remove_last(parserutils_vector *vector); const void *parserutils_vector_iterate(const parserutils_vector *vector, int32_t *ctx); +const void *parserutils_vector_peek(const parserutils_vector *vector, + int32_t ctx); #endif diff --git a/src/utils/vector.c b/src/utils/vector.c index a289b61..1ffa8a3 100644 --- a/src/utils/vector.c +++ b/src/utils/vector.c @@ -179,6 +179,26 @@ const void *parserutils_vector_iterate(const parserutils_vector *vector, return item; } +/** + * Peek at an item in a vector + * + * \param vector The vector to iterate over + * \param ctx Integer for the iterator to use as context. + * \return Pointer to item, or NULL if no more + */ +const void *parserutils_vector_peek(const parserutils_vector *vector, + int32_t ctx) +{ + if (vector == NULL || vector->current_item < 0) + return NULL; + + if (ctx > vector->current_item) + return NULL; + + return (uint8_t *) vector->items + (ctx * vector->item_size); +} + + #ifndef NDEBUG #include -- cgit v1.2.3