X-Git-Url: http://pileus.org/git/?p=aweather;a=blobdiff_plain;f=src%2Fgis%2Fgpqueue.c;h=598998762f4f86b1431682efc855c29895d28a26;hp=906181c148029a6f44378ec43bd45dea7100a48c;hb=5b0d4a3f91c424a06365c1c90c4e1c9bc4767b90;hpb=c7c4b00e13af89cb7ed88de9b7a48115e5fce1b6 diff --git a/src/gis/gpqueue.c b/src/gis/gpqueue.c index 906181c..5989987 100644 --- a/src/gis/gpqueue.c +++ b/src/gis/gpqueue.c @@ -125,6 +125,30 @@ g_pqueue_foreach (GPQueue *pqueue, g_pqueue_node_foreach (pqueue->root, NULL, func, user_data); } +static void +g_pqueue_add_ptr_cb (gpointer obj, GPtrArray *ptrs) +{ + g_ptr_array_add(ptrs, obj); +} +/** + * g_pqueue_get_array: + * @pqueue: a #GQueue. + * + * Construct a GPtrArray for the items in pqueue. This can be useful when + * updating the priorities of all the elements in pqueue. + * + * Returns: A GPtrArray containing a pointer to each item in pqueue + * + * Since: 2.x + */ +GPtrArray * +g_pqueue_get_array (GPQueue *pqueue) +{ + GPtrArray *ptrs = g_ptr_array_new(); + g_pqueue_foreach(pqueue, (GFunc)g_pqueue_add_ptr_cb, ptrs); + return ptrs; +} + static inline gint cmp (GPQueue *pqueue, GPQueueNode *a,