summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2008-10-18 15:18:43 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2008-10-18 15:18:43 +0000
commit7836409aade83179b43dd7ad0699d9edf68aad90 (patch)
treea5c03e01f129266ea2227ea355f7c53fdbedf909
parente33e292a3e5f9e6ffd8cb065d569be01159e8f74 (diff)
downloadlibparserutils-7836409aade83179b43dd7ad0699d9edf68aad90.tar.gz
libparserutils-7836409aade83179b43dd7ad0699d9edf68aad90.tar.bz2
Add API to vector to permit peeking.
svn path=/trunk/libparserutils/; revision=5596
-rw-r--r--include/parserutils/utils/vector.h2
-rw-r--r--src/utils/vector.c20
2 files changed, 22 insertions, 0 deletions
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 <stdio.h>