gst_queue_array_get_length
gst_queue_array_pop_head
gst_queue_array_peek_head
+gst_queue_array_peek_nth
gst_queue_array_push_tail
gst_queue_array_pop_tail
gst_queue_array_peek_tail
gst_queue_array_new_for_struct
gst_queue_array_push_tail_struct
gst_queue_array_peek_head_struct
+gst_queue_array_peek_nth_struct
gst_queue_array_pop_head_struct
gst_queue_array_peek_tail_struct
gst_queue_array_pop_tail_struct
return *(gpointer *) (array->array + (sizeof (gpointer) * array->head));
}
+/**
+ * gst_queue_array_peek_nth: (skip)
+ *
+ * Returns the item at @idx in @array, but does not remove it from the queue.
+ *
+ * Returns: The item, or %NULL if @idx was out of bounds
+ *
+ * Since: 1.16
+ */
+gpointer
+gst_queue_array_peek_nth (GstQueueArray * array, guint idx)
+{
+ g_return_val_if_fail (array != NULL, NULL);
+ g_return_val_if_fail (idx < array->length, NULL);
+
+ idx = (array->head + idx) % array->size;
+
+ return *(gpointer *) (array->array + (sizeof (gpointer) * idx));
+}
+
+/**
+ * gst_queue_array_peek_nth_struct: (skip)
+ *
+ * Returns the item at @idx in @array, but does not remove it from the queue.
+ *
+ * Returns: The item, or %NULL if @idx was out of bounds
+ *
+ * Since: 1.16
+ */
+gpointer
+gst_queue_array_peek_nth_struct (GstQueueArray * array, guint idx)
+{
+ g_return_val_if_fail (array != NULL, NULL);
+ g_return_val_if_fail (idx < array->length, NULL);
+
+ idx = (array->head + idx) % array->size;
+
+ return array->array + (array->elt_size * idx);
+}
+
static void
gst_queue_array_do_expand (GstQueueArray * array)
{
gpointer gst_queue_array_peek_head (GstQueueArray * array);
GST_BASE_API
+gpointer gst_queue_array_peek_nth (GstQueueArray * array, guint idx);
+
+GST_BASE_API
gpointer gst_queue_array_pop_tail (GstQueueArray * array);
GST_BASE_API
gpointer gst_queue_array_peek_head_struct (GstQueueArray * array);
GST_BASE_API
+gpointer gst_queue_array_peek_nth_struct (GstQueueArray * array, guint idx);
+
+GST_BASE_API
gboolean gst_queue_array_drop_struct (GstQueueArray * array,
guint idx,
gpointer p_struct);
GST_BASE_API
gpointer gst_queue_array_pop_tail_struct (GstQueueArray * array);
+
GST_BASE_API
gpointer gst_queue_array_peek_tail_struct (GstQueueArray * array);
}
GST_END_TEST;
+GST_START_TEST (test_array_peek_nth)
+{
+ GstQueueArray *array;
+ guint i;
+
+ /* Create an array of initial size 10 */
+ array = gst_queue_array_new (10);
+
+ /* push 10 values in */
+ for (i = 0; i < 10; i++)
+ gst_queue_array_push_tail (array, GINT_TO_POINTER (i));
+
+ for (i = 0; i < 10; i++)
+ fail_unless_equals_int (GPOINTER_TO_INT (gst_queue_array_peek_nth (array,
+ i)), i);
+
+ gst_queue_array_pop_head (array);
+
+ for (i = 0; i < 9; i++)
+ fail_unless_equals_int (GPOINTER_TO_INT (gst_queue_array_peek_nth (array,
+ i)), i + 1);
+
+ gst_queue_array_free (array);
+}
+
+GST_END_TEST;
+
GST_START_TEST (test_array_peek_pop_tail)
{
tcase_add_test (tc_chain, test_array_drop2);
tcase_add_test (tc_chain, test_array_grow_from_prealloc1);
tcase_add_test (tc_chain, test_array_peek_pop_tail);
+ tcase_add_test (tc_chain, test_array_peek_nth);
return s;
}
gst_queue_array_new_for_struct
gst_queue_array_peek_head
gst_queue_array_peek_head_struct
+ gst_queue_array_peek_nth
+ gst_queue_array_peek_nth_struct
gst_queue_array_peek_tail
gst_queue_array_peek_tail_struct
gst_queue_array_pop_head