<refentry id="glib-Double-ended-Queues"> <refmeta> <refentrytitle>Double-ended Queues</refentrytitle> <manvolnum>3</manvolnum> <refmiscinfo>GLIB Library</refmiscinfo> </refmeta> <refnamediv> <refname>Double-ended Queues</refname><refpurpose>double-ended queue data structure.</refpurpose> </refnamediv> <refsynopsisdiv><title>Synopsis</title> <synopsis> #include <glib.h> struct <link linkend="GQueue">GQueue</link>; <link linkend="GQueue">GQueue</link>* <link linkend="g-queue-new">g_queue_new</link> (void); <link linkend="void">void</link> <link linkend="g-queue-free">g_queue_free</link> (<link linkend="GQueue">GQueue</link> *queue); <link linkend="gboolean">gboolean</link> <link linkend="g-queue-is-empty">g_queue_is_empty</link> (<link linkend="GQueue">GQueue</link> *queue); <link linkend="guint">guint</link> <link linkend="g-queue-get-length">g_queue_get_length</link> (<link linkend="GQueue">GQueue</link> *queue); <link linkend="void">void</link> <link linkend="g-queue-reverse">g_queue_reverse</link> (<link linkend="GQueue">GQueue</link> *queue); <link linkend="GQueue">GQueue</link>* <link linkend="g-queue-copy">g_queue_copy</link> (<link linkend="GQueue">GQueue</link> *queue); <link linkend="void">void</link> <link linkend="g-queue-foreach">g_queue_foreach</link> (<link linkend="GQueue">GQueue</link> *queue, <link linkend="GFunc">GFunc</link> func, <link linkend="gpointer">gpointer</link> user_data); <link linkend="GList">GList</link>* <link linkend="g-queue-find">g_queue_find</link> (<link linkend="GQueue">GQueue</link> *queue, <link linkend="gconstpointer">gconstpointer</link> data); <link linkend="GList">GList</link>* <link linkend="g-queue-find-custom">g_queue_find_custom</link> (<link linkend="GQueue">GQueue</link> *queue, <link linkend="gconstpointer">gconstpointer</link> data, <link linkend="GCompareFunc">GCompareFunc</link> func); <link linkend="void">void</link> <link linkend="g-queue-sort">g_queue_sort</link> (<link linkend="GQueue">GQueue</link> *queue, <link linkend="GCompareDataFunc">GCompareDataFunc</link> compare_func, <link linkend="gpointer">gpointer</link> user_data); <link linkend="void">void</link> <link linkend="g-queue-push-head">g_queue_push_head</link> (<link linkend="GQueue">GQueue</link> *queue, <link linkend="gpointer">gpointer</link> data); <link linkend="void">void</link> <link linkend="g-queue-push-tail">g_queue_push_tail</link> (<link linkend="GQueue">GQueue</link> *queue, <link linkend="gpointer">gpointer</link> data); <link linkend="void">void</link> <link linkend="g-queue-push-nth">g_queue_push_nth</link> (<link linkend="GQueue">GQueue</link> *queue, <link linkend="gpointer">gpointer</link> data, <link linkend="gint">gint</link> n); <link linkend="gpointer">gpointer</link> <link linkend="g-queue-pop-head">g_queue_pop_head</link> (<link linkend="GQueue">GQueue</link> *queue); <link linkend="gpointer">gpointer</link> <link linkend="g-queue-pop-tail">g_queue_pop_tail</link> (<link linkend="GQueue">GQueue</link> *queue); <link linkend="gpointer">gpointer</link> <link linkend="g-queue-pop-nth">g_queue_pop_nth</link> (<link linkend="GQueue">GQueue</link> *queue, <link linkend="guint">guint</link> n); <link linkend="gpointer">gpointer</link> <link linkend="g-queue-peek-head">g_queue_peek_head</link> (<link linkend="GQueue">GQueue</link> *queue); <link linkend="gpointer">gpointer</link> <link linkend="g-queue-peek-tail">g_queue_peek_tail</link> (<link linkend="GQueue">GQueue</link> *queue); <link linkend="gpointer">gpointer</link> <link linkend="g-queue-peek-nth">g_queue_peek_nth</link> (<link linkend="GQueue">GQueue</link> *queue, <link linkend="guint">guint</link> n); <link linkend="gint">gint</link> <link linkend="g-queue-index">g_queue_index</link> (<link linkend="GQueue">GQueue</link> *queue, <link linkend="gconstpointer">gconstpointer</link> data); <link linkend="void">void</link> <link linkend="g-queue-remove">g_queue_remove</link> (<link linkend="GQueue">GQueue</link> *queue, <link linkend="gconstpointer">gconstpointer</link> data); <link linkend="void">void</link> <link linkend="g-queue-remove-all">g_queue_remove_all</link> (<link linkend="GQueue">GQueue</link> *queue, <link linkend="gconstpointer">gconstpointer</link> data); <link linkend="void">void</link> <link linkend="g-queue-insert-before">g_queue_insert_before</link> (<link linkend="GQueue">GQueue</link> *queue, <link linkend="GList">GList</link> *sibling, <link linkend="gpointer">gpointer</link> data); <link linkend="void">void</link> <link linkend="g-queue-insert-after">g_queue_insert_after</link> (<link linkend="GQueue">GQueue</link> *queue, <link linkend="GList">GList</link> *sibling, <link linkend="gpointer">gpointer</link> data); <link linkend="void">void</link> <link linkend="g-queue-insert-sorted">g_queue_insert_sorted</link> (<link linkend="GQueue">GQueue</link> *queue, <link linkend="gpointer">gpointer</link> data, <link linkend="GCompareDataFunc">GCompareDataFunc</link> func, <link linkend="gpointer">gpointer</link> user_data); <link linkend="void">void</link> <link linkend="g-queue-push-head-link">g_queue_push_head_link</link> (<link linkend="GQueue">GQueue</link> *queue, <link linkend="GList">GList</link> *link_); <link linkend="void">void</link> <link linkend="g-queue-push-tail-link">g_queue_push_tail_link</link> (<link linkend="GQueue">GQueue</link> *queue, <link linkend="GList">GList</link> *link_); <link linkend="void">void</link> <link linkend="g-queue-push-nth-link">g_queue_push_nth_link</link> (<link linkend="GQueue">GQueue</link> *queue, <link linkend="gint">gint</link> n, <link linkend="GList">GList</link> *link_); <link linkend="GList">GList</link>* <link linkend="g-queue-pop-head-link">g_queue_pop_head_link</link> (<link linkend="GQueue">GQueue</link> *queue); <link linkend="GList">GList</link>* <link linkend="g-queue-pop-tail-link">g_queue_pop_tail_link</link> (<link linkend="GQueue">GQueue</link> *queue); <link linkend="GList">GList</link>* <link linkend="g-queue-pop-nth-link">g_queue_pop_nth_link</link> (<link linkend="GQueue">GQueue</link> *queue, <link linkend="guint">guint</link> n); <link linkend="GList">GList</link>* <link linkend="g-queue-peek-head-link">g_queue_peek_head_link</link> (<link linkend="GQueue">GQueue</link> *queue); <link linkend="GList">GList</link>* <link linkend="g-queue-peek-tail-link">g_queue_peek_tail_link</link> (<link linkend="GQueue">GQueue</link> *queue); <link linkend="GList">GList</link>* <link linkend="g-queue-peek-nth-link">g_queue_peek_nth_link</link> (<link linkend="GQueue">GQueue</link> *queue, <link linkend="guint">guint</link> n); <link linkend="gint">gint</link> <link linkend="g-queue-link-index">g_queue_link_index</link> (<link linkend="GQueue">GQueue</link> *queue, <link linkend="GList">GList</link> *link_); <link linkend="void">void</link> <link linkend="g-queue-unlink">g_queue_unlink</link> (<link linkend="GQueue">GQueue</link> *queue, <link linkend="GList">GList</link> *link_); <link linkend="void">void</link> <link linkend="g-queue-delete-link">g_queue_delete_link</link> (<link linkend="GQueue">GQueue</link> *queue, <link linkend="GList">GList</link> *link_); </synopsis> </refsynopsisdiv> <refsect1> <title>Description</title> <para> The <link linkend="GQueue"><type>GQueue</type></link> structure and its associated functions provide a standard queue data structure. Internally, <link linkend="GQueue"><type>GQueue</type></link> uses the same data structure as <link linkend="GList"><type>GList</type></link> to store elements. </para> <para> The data contained in each element can be either integer values, by using one of the <link linkend="glib-Type-Conversion-Macros">Type Conversion Macros</link>, or simply pointers to any type of data. </para> <para> To create a new <link linkend="GQueue"><type>GQueue</type></link>, use <link linkend="g-queue-new"><function>g_queue_new()</function></link>. </para> <para> To add elements, use <link linkend="g-queue-push-head"><function>g_queue_push_head()</function></link>, <link linkend="g-queue-push-head-link"><function>g_queue_push_head_link()</function></link>, <link linkend="g-queue-push-tail"><function>g_queue_push_tail()</function></link> and <link linkend="g-queue-push-tail-link"><function>g_queue_push_tail_link()</function></link>. </para> <para> To remove elements, use <link linkend="g-queue-pop-head"><function>g_queue_pop_head()</function></link> and <link linkend="g-queue-pop-tail"><function>g_queue_pop_tail()</function></link>. </para> <para> To free the entire queue, use <link linkend="g-queue-free"><function>g_queue_free()</function></link>. </para> </refsect1> <refsect1> <title>Details</title> <refsect2> <title><anchor id="GQueue"/>struct GQueue</title> <indexterm><primary>GQueue</primary></indexterm><programlisting>struct GQueue { GList *head; GList *tail; guint length; }; </programlisting> <para> Contains the public fields of a <link linkend="glib-queues">Queue</link>. </para><variablelist role="struct"> <varlistentry> <term><link linkend="GList">GList</link> *<structfield>head</structfield></term> <listitem><simpara>a pointer to the first element of the queue. </simpara></listitem> </varlistentry> <varlistentry> <term><link linkend="GList">GList</link> *<structfield>tail</structfield></term> <listitem><simpara>a pointer to the last element of the queue. </simpara></listitem> </varlistentry> <varlistentry> <term><link linkend="guint">guint</link> <structfield>length</structfield></term> <listitem><simpara>the number of elements in the queue. </simpara></listitem> </varlistentry> </variablelist></refsect2> <refsect2> <title><anchor id="g-queue-new"/>g_queue_new ()</title> <indexterm><primary>g_queue_new</primary></indexterm><programlisting><link linkend="GQueue">GQueue</link>* g_queue_new (void);</programlisting> <para> Creates a new <link linkend="GQueue"><type>GQueue</type></link>.</para> <para> </para><variablelist role="params"> <varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> a new <link linkend="GQueue"><type>GQueue</type></link>. </simpara></listitem></varlistentry> </variablelist></refsect2> <refsect2> <title><anchor id="g-queue-free"/>g_queue_free ()</title> <indexterm><primary>g_queue_free</primary></indexterm><programlisting><link linkend="void">void</link> g_queue_free (<link linkend="GQueue">GQueue</link> *queue);</programlisting> <para> Frees the memory allocated for the <link linkend="GQueue"><type>GQueue</type></link>.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link>. </simpara></listitem></varlistentry> </variablelist></refsect2> <refsect2> <title><anchor id="g-queue-is-empty"/>g_queue_is_empty ()</title> <indexterm><primary>g_queue_is_empty</primary></indexterm><programlisting><link linkend="gboolean">gboolean</link> g_queue_is_empty (<link linkend="GQueue">GQueue</link> *queue);</programlisting> <para> Returns <literal>TRUE</literal> if the queue is empty.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link>. </simpara></listitem></varlistentry> <varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> <literal>TRUE</literal> if the queue is empty. </simpara></listitem></varlistentry> </variablelist></refsect2> <refsect2> <title><anchor id="g-queue-get-length"/>g_queue_get_length ()</title> <indexterm role="2.4"><primary>g_queue_get_length</primary></indexterm><programlisting><link linkend="guint">guint</link> g_queue_get_length (<link linkend="GQueue">GQueue</link> *queue);</programlisting> <para> Returns the number of items in <parameter>queue</parameter>.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link> </simpara></listitem></varlistentry> <varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> The number of items in <parameter>queue</parameter>. </simpara></listitem></varlistentry> </variablelist><para>Since 2.4 </para></refsect2> <refsect2> <title><anchor id="g-queue-reverse"/>g_queue_reverse ()</title> <indexterm role="2.4"><primary>g_queue_reverse</primary></indexterm><programlisting><link linkend="void">void</link> g_queue_reverse (<link linkend="GQueue">GQueue</link> *queue);</programlisting> <para> Reverses the order of the items in <parameter>queue</parameter>.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link> </simpara></listitem></varlistentry> </variablelist><para>Since 2.4 </para></refsect2> <refsect2> <title><anchor id="g-queue-copy"/>g_queue_copy ()</title> <indexterm role="2.4"><primary>g_queue_copy</primary></indexterm><programlisting><link linkend="GQueue">GQueue</link>* g_queue_copy (<link linkend="GQueue">GQueue</link> *queue);</programlisting> <para> Copies a <parameter>queue</parameter>. Note that is a shallow copy. If the elements in the queue consist of pointers to data, the pointers are copied, but the actual data is not.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link> </simpara></listitem></varlistentry> <varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> A copy of <parameter>queue</parameter> </simpara></listitem></varlistentry> </variablelist><para>Since 2.4 </para></refsect2> <refsect2> <title><anchor id="g-queue-foreach"/>g_queue_foreach ()</title> <indexterm role="2.4"><primary>g_queue_foreach</primary></indexterm><programlisting><link linkend="void">void</link> g_queue_foreach (<link linkend="GQueue">GQueue</link> *queue, <link linkend="GFunc">GFunc</link> func, <link linkend="gpointer">gpointer</link> user_data);</programlisting> <para> Calls <parameter>func</parameter> for each element in the queue passing <parameter>user_data</parameter> to the function.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link> </simpara></listitem></varlistentry> <varlistentry><term><parameter>func</parameter> :</term> <listitem><simpara> the function to call for each element's data </simpara></listitem></varlistentry> <varlistentry><term><parameter>user_data</parameter> :</term> <listitem><simpara> user data to pass to <parameter>func</parameter> </simpara></listitem></varlistentry> </variablelist><para>Since 2.4 </para></refsect2> <refsect2> <title><anchor id="g-queue-find"/>g_queue_find ()</title> <indexterm role="2.4"><primary>g_queue_find</primary></indexterm><programlisting><link linkend="GList">GList</link>* g_queue_find (<link linkend="GQueue">GQueue</link> *queue, <link linkend="gconstpointer">gconstpointer</link> data);</programlisting> <para> Finds the first link in <parameter>queue</parameter> which contains <parameter>data</parameter>.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link> </simpara></listitem></varlistentry> <varlistentry><term><parameter>data</parameter> :</term> <listitem><simpara> data to find </simpara></listitem></varlistentry> <varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> The first link in <parameter>queue</parameter> which contains <parameter>data</parameter>. </simpara></listitem></varlistentry> </variablelist><para>Since 2.4 </para></refsect2> <refsect2> <title><anchor id="g-queue-find-custom"/>g_queue_find_custom ()</title> <indexterm role="2.4"><primary>g_queue_find_custom</primary></indexterm><programlisting><link linkend="GList">GList</link>* g_queue_find_custom (<link linkend="GQueue">GQueue</link> *queue, <link linkend="gconstpointer">gconstpointer</link> data, <link linkend="GCompareFunc">GCompareFunc</link> func);</programlisting> <para> Finds an element in a <link linkend="GQueue"><type>GQueue</type></link>, using a supplied function to find the desired element. It iterates over the queue, calling the given function which should return 0 when the desired element is found. The function takes two gconstpointer arguments, the <link linkend="GQueue"><type>GQueue</type></link> element's data and the given user data.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link> </simpara></listitem></varlistentry> <varlistentry><term><parameter>data</parameter> :</term> <listitem><simpara> user data passed to <parameter>func</parameter> </simpara></listitem></varlistentry> <varlistentry><term><parameter>func</parameter> :</term> <listitem><simpara> a <link linkend="GCompareFunc"><type>GCompareFunc</type></link> to call for each element. It should return 0 when the desired element is found </simpara></listitem></varlistentry> <varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> The found link, or <literal>NULL</literal> if it wasn't found </simpara></listitem></varlistentry> </variablelist><para>Since 2.4 </para></refsect2> <refsect2> <title><anchor id="g-queue-sort"/>g_queue_sort ()</title> <indexterm role="2.4"><primary>g_queue_sort</primary></indexterm><programlisting><link linkend="void">void</link> g_queue_sort (<link linkend="GQueue">GQueue</link> *queue, <link linkend="GCompareDataFunc">GCompareDataFunc</link> compare_func, <link linkend="gpointer">gpointer</link> user_data);</programlisting> <para> Sorts <parameter>queue</parameter> using <parameter>compare_func</parameter>.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link> </simpara></listitem></varlistentry> <varlistentry><term><parameter>compare_func</parameter> :</term> <listitem><simpara> the <link linkend="GCompareDataFunc"><type>GCompareDataFunc</type></link> used to sort <parameter>queue</parameter>. This function is passed two elements of the queue and should return 0 if they are equal, a negative value if the first comes before the second, and a positive value if the second comes before the first. </simpara></listitem></varlistentry> <varlistentry><term><parameter>user_data</parameter> :</term> <listitem><simpara> user data passed to <parameter>compare_func</parameter> </simpara></listitem></varlistentry> </variablelist><para>Since 2.4 </para></refsect2> <refsect2> <title><anchor id="g-queue-push-head"/>g_queue_push_head ()</title> <indexterm><primary>g_queue_push_head</primary></indexterm><programlisting><link linkend="void">void</link> g_queue_push_head (<link linkend="GQueue">GQueue</link> *queue, <link linkend="gpointer">gpointer</link> data);</programlisting> <para> Adds a new element at the head of the queue.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link>. </simpara></listitem></varlistentry> <varlistentry><term><parameter>data</parameter> :</term> <listitem><simpara> the data for the new element. </simpara></listitem></varlistentry> </variablelist></refsect2> <refsect2> <title><anchor id="g-queue-push-tail"/>g_queue_push_tail ()</title> <indexterm><primary>g_queue_push_tail</primary></indexterm><programlisting><link linkend="void">void</link> g_queue_push_tail (<link linkend="GQueue">GQueue</link> *queue, <link linkend="gpointer">gpointer</link> data);</programlisting> <para> Adds a new element at the tail of the queue.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link>. </simpara></listitem></varlistentry> <varlistentry><term><parameter>data</parameter> :</term> <listitem><simpara> the data for the new element. </simpara></listitem></varlistentry> </variablelist></refsect2> <refsect2> <title><anchor id="g-queue-push-nth"/>g_queue_push_nth ()</title> <indexterm role="2.4"><primary>g_queue_push_nth</primary></indexterm><programlisting><link linkend="void">void</link> g_queue_push_nth (<link linkend="GQueue">GQueue</link> *queue, <link linkend="gpointer">gpointer</link> data, <link linkend="gint">gint</link> n);</programlisting> <para> Inserts a new element into <parameter>queue</parameter> at the given position</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link> </simpara></listitem></varlistentry> <varlistentry><term><parameter>data</parameter> :</term> <listitem><simpara> the data for the new element </simpara></listitem></varlistentry> <varlistentry><term><parameter>n</parameter> :</term> <listitem><simpara> the position to insert the new element. If <parameter>n</parameter> is negative or larger than the number of elements in the <parameter>queue</parameter>, the element is added to the end of the queue. </simpara></listitem></varlistentry> </variablelist><para>Since 2.4 </para></refsect2> <refsect2> <title><anchor id="g-queue-pop-head"/>g_queue_pop_head ()</title> <indexterm><primary>g_queue_pop_head</primary></indexterm><programlisting><link linkend="gpointer">gpointer</link> g_queue_pop_head (<link linkend="GQueue">GQueue</link> *queue);</programlisting> <para> Removes the first element of the queue.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link>. </simpara></listitem></varlistentry> <varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> the data of the first element in the queue, or <literal>NULL</literal> if the queue is empty. </simpara></listitem></varlistentry> </variablelist></refsect2> <refsect2> <title><anchor id="g-queue-pop-tail"/>g_queue_pop_tail ()</title> <indexterm><primary>g_queue_pop_tail</primary></indexterm><programlisting><link linkend="gpointer">gpointer</link> g_queue_pop_tail (<link linkend="GQueue">GQueue</link> *queue);</programlisting> <para> Removes the last element of the queue.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link>. </simpara></listitem></varlistentry> <varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> the data of the last element in the queue, or <literal>NULL</literal> if the queue is empty. </simpara></listitem></varlistentry> </variablelist></refsect2> <refsect2> <title><anchor id="g-queue-pop-nth"/>g_queue_pop_nth ()</title> <indexterm role="2.4"><primary>g_queue_pop_nth</primary></indexterm><programlisting><link linkend="gpointer">gpointer</link> g_queue_pop_nth (<link linkend="GQueue">GQueue</link> *queue, <link linkend="guint">guint</link> n);</programlisting> <para> Removes the <parameter>n</parameter>'th element of <parameter>queue</parameter>.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link> </simpara></listitem></varlistentry> <varlistentry><term><parameter>n</parameter> :</term> <listitem><simpara> the position of the element. </simpara></listitem></varlistentry> <varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> the element's data, or <literal>NULL</literal> if <parameter>n</parameter> is off the end of <parameter>queue</parameter>. </simpara></listitem></varlistentry> </variablelist><para>Since 2.4 </para></refsect2> <refsect2> <title><anchor id="g-queue-peek-head"/>g_queue_peek_head ()</title> <indexterm><primary>g_queue_peek_head</primary></indexterm><programlisting><link linkend="gpointer">gpointer</link> g_queue_peek_head (<link linkend="GQueue">GQueue</link> *queue);</programlisting> <para> Returns the first element of the queue.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link>. </simpara></listitem></varlistentry> <varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> the data of the first element in the queue, or <literal>NULL</literal> if the queue is empty. </simpara></listitem></varlistentry> </variablelist></refsect2> <refsect2> <title><anchor id="g-queue-peek-tail"/>g_queue_peek_tail ()</title> <indexterm><primary>g_queue_peek_tail</primary></indexterm><programlisting><link linkend="gpointer">gpointer</link> g_queue_peek_tail (<link linkend="GQueue">GQueue</link> *queue);</programlisting> <para> Returns the last element of the queue.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link>. </simpara></listitem></varlistentry> <varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> the data of the last element in the queue, or <literal>NULL</literal> if the queue is empty. </simpara></listitem></varlistentry> </variablelist></refsect2> <refsect2> <title><anchor id="g-queue-peek-nth"/>g_queue_peek_nth ()</title> <indexterm role="2.4"><primary>g_queue_peek_nth</primary></indexterm><programlisting><link linkend="gpointer">gpointer</link> g_queue_peek_nth (<link linkend="GQueue">GQueue</link> *queue, <link linkend="guint">guint</link> n);</programlisting> <para> Returns the <parameter>n</parameter>'th element of <parameter>queue</parameter>.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link> </simpara></listitem></varlistentry> <varlistentry><term><parameter>n</parameter> :</term> <listitem><simpara> the position of the element. </simpara></listitem></varlistentry> <varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> The data for the <parameter>n</parameter>'th element of <parameter>queue</parameter>, or <literal>NULL</literal> if <parameter>n</parameter> is off the end of <parameter>queue</parameter>. </simpara></listitem></varlistentry> </variablelist><para>Since 2.4 </para></refsect2> <refsect2> <title><anchor id="g-queue-index"/>g_queue_index ()</title> <indexterm role="2.4"><primary>g_queue_index</primary></indexterm><programlisting><link linkend="gint">gint</link> g_queue_index (<link linkend="GQueue">GQueue</link> *queue, <link linkend="gconstpointer">gconstpointer</link> data);</programlisting> <para> Returns the position of the first element in <parameter>queue</parameter> which contains <parameter>data</parameter>.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link> </simpara></listitem></varlistentry> <varlistentry><term><parameter>data</parameter> :</term> <listitem><simpara> the data to find. </simpara></listitem></varlistentry> <varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> The position of the first element in <parameter>queue</parameter> which contains <parameter>data</parameter>, or -1 if no element in <parameter>queue</parameter> contains <parameter>data</parameter>. </simpara></listitem></varlistentry> </variablelist><para>Since 2.4 </para></refsect2> <refsect2> <title><anchor id="g-queue-remove"/>g_queue_remove ()</title> <indexterm role="2.4"><primary>g_queue_remove</primary></indexterm><programlisting><link linkend="void">void</link> g_queue_remove (<link linkend="GQueue">GQueue</link> *queue, <link linkend="gconstpointer">gconstpointer</link> data);</programlisting> <para> Removes the first element in <parameter>queue</parameter> that contains <parameter>data</parameter>.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link> </simpara></listitem></varlistentry> <varlistentry><term><parameter>data</parameter> :</term> <listitem><simpara> data to remove. </simpara></listitem></varlistentry> </variablelist><para>Since 2.4 </para></refsect2> <refsect2> <title><anchor id="g-queue-remove-all"/>g_queue_remove_all ()</title> <indexterm role="2.4"><primary>g_queue_remove_all</primary></indexterm><programlisting><link linkend="void">void</link> g_queue_remove_all (<link linkend="GQueue">GQueue</link> *queue, <link linkend="gconstpointer">gconstpointer</link> data);</programlisting> <para> Remove all elemeents in <parameter>queue</parameter> which contains <parameter>data</parameter>.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link> </simpara></listitem></varlistentry> <varlistentry><term><parameter>data</parameter> :</term> <listitem><simpara> data to remove </simpara></listitem></varlistentry> </variablelist><para>Since 2.4 </para></refsect2> <refsect2> <title><anchor id="g-queue-insert-before"/>g_queue_insert_before ()</title> <indexterm role="2.4"><primary>g_queue_insert_before</primary></indexterm><programlisting><link linkend="void">void</link> g_queue_insert_before (<link linkend="GQueue">GQueue</link> *queue, <link linkend="GList">GList</link> *sibling, <link linkend="gpointer">gpointer</link> data);</programlisting> <para> Inserts <parameter>data</parameter> into <parameter>queue</parameter> before <parameter>sibling</parameter>. </para> <para> <parameter>sibling</parameter> must be part of <parameter>queue</parameter>.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link> </simpara></listitem></varlistentry> <varlistentry><term><parameter>sibling</parameter> :</term> <listitem><simpara> a <link linkend="GList"><type>GList</type></link> link that <emphasis>must</emphasis> be part of <parameter>queue</parameter> </simpara></listitem></varlistentry> <varlistentry><term><parameter>data</parameter> :</term> <listitem><simpara> the data to insert </simpara></listitem></varlistentry> </variablelist><para>Since 2.4 </para></refsect2> <refsect2> <title><anchor id="g-queue-insert-after"/>g_queue_insert_after ()</title> <indexterm role="2.4"><primary>g_queue_insert_after</primary></indexterm><programlisting><link linkend="void">void</link> g_queue_insert_after (<link linkend="GQueue">GQueue</link> *queue, <link linkend="GList">GList</link> *sibling, <link linkend="gpointer">gpointer</link> data);</programlisting> <para> Inserts <parameter>data</parameter> into <parameter>queue</parameter> after <parameter>sibling</parameter> </para> <para> <parameter>sibling</parameter> must be part of <parameter>queue</parameter></para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link> </simpara></listitem></varlistentry> <varlistentry><term><parameter>sibling</parameter> :</term> <listitem><simpara> a <link linkend="GList"><type>GList</type></link> link that <emphasis>must</emphasis> be part of <parameter>queue</parameter> </simpara></listitem></varlistentry> <varlistentry><term><parameter>data</parameter> :</term> <listitem><simpara> the data to insert </simpara></listitem></varlistentry> </variablelist><para>Since 2.4 </para></refsect2> <refsect2> <title><anchor id="g-queue-insert-sorted"/>g_queue_insert_sorted ()</title> <indexterm role="2.4"><primary>g_queue_insert_sorted</primary></indexterm><programlisting><link linkend="void">void</link> g_queue_insert_sorted (<link linkend="GQueue">GQueue</link> *queue, <link linkend="gpointer">gpointer</link> data, <link linkend="GCompareDataFunc">GCompareDataFunc</link> func, <link linkend="gpointer">gpointer</link> user_data);</programlisting> <para> Inserts <parameter>data</parameter> into <parameter>queue</parameter> using <parameter>func</parameter> to determine the new position.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link> </simpara></listitem></varlistentry> <varlistentry><term><parameter>data</parameter> :</term> <listitem><simpara> the data to insert </simpara></listitem></varlistentry> <varlistentry><term><parameter>func</parameter> :</term> <listitem><simpara> the <link linkend="GCompareDataFunc"><type>GCompareDataFunc</type></link> used to compare elements in the queue. It is called with two elements of the <parameter>queue</parameter> and <parameter>user_data</parameter>. It should return 0 if the elements are equal, a negative value if the first element comes before the second, and a positive value if the second element comes after the first. </simpara></listitem></varlistentry> <varlistentry><term><parameter>user_data</parameter> :</term> <listitem><simpara> user data passed to <parameter>func</parameter>. </simpara></listitem></varlistentry> </variablelist><para>Since 2.4 </para></refsect2> <refsect2> <title><anchor id="g-queue-push-head-link"/>g_queue_push_head_link ()</title> <indexterm><primary>g_queue_push_head_link</primary></indexterm><programlisting><link linkend="void">void</link> g_queue_push_head_link (<link linkend="GQueue">GQueue</link> *queue, <link linkend="GList">GList</link> *link_);</programlisting> <para> Adds a new element at the head of the queue.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link>. </simpara></listitem></varlistentry> <varlistentry><term><parameter>link_</parameter> :</term> <listitem><simpara> a single <link linkend="GList"><type>GList</type></link> element, <emphasis>not</emphasis> a list with more than one element. </simpara></listitem></varlistentry> </variablelist></refsect2> <refsect2> <title><anchor id="g-queue-push-tail-link"/>g_queue_push_tail_link ()</title> <indexterm><primary>g_queue_push_tail_link</primary></indexterm><programlisting><link linkend="void">void</link> g_queue_push_tail_link (<link linkend="GQueue">GQueue</link> *queue, <link linkend="GList">GList</link> *link_);</programlisting> <para> Adds a new element at the tail of the queue.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link>. </simpara></listitem></varlistentry> <varlistentry><term><parameter>link_</parameter> :</term> <listitem><simpara> a single <link linkend="GList"><type>GList</type></link> element, <emphasis>not</emphasis> a list with more than one element. </simpara></listitem></varlistentry> </variablelist></refsect2> <refsect2> <title><anchor id="g-queue-push-nth-link"/>g_queue_push_nth_link ()</title> <indexterm role="2.4"><primary>g_queue_push_nth_link</primary></indexterm><programlisting><link linkend="void">void</link> g_queue_push_nth_link (<link linkend="GQueue">GQueue</link> *queue, <link linkend="gint">gint</link> n, <link linkend="GList">GList</link> *link_);</programlisting> <para> Inserts <parameter>link</parameter> into <parameter>queue</parameter> at the given position.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link> </simpara></listitem></varlistentry> <varlistentry><term><parameter>n</parameter> :</term> <listitem><simpara> the position to insert the link. If this is negative or larger than the number of elements in <parameter>queue</parameter>, the link is added to the end of <parameter>queue</parameter>. </simpara></listitem></varlistentry> <varlistentry><term><parameter>link_</parameter> :</term> <listitem><simpara> the link to add to <parameter>queue</parameter> </simpara></listitem></varlistentry> </variablelist><para>Since 2.4 </para></refsect2> <refsect2> <title><anchor id="g-queue-pop-head-link"/>g_queue_pop_head_link ()</title> <indexterm><primary>g_queue_pop_head_link</primary></indexterm><programlisting><link linkend="GList">GList</link>* g_queue_pop_head_link (<link linkend="GQueue">GQueue</link> *queue);</programlisting> <para> Removes the first element of the queue.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link>. </simpara></listitem></varlistentry> <varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> the <link linkend="GList"><type>GList</type></link> element at the head of the queue, or <literal>NULL</literal> if the queue is empty. </simpara></listitem></varlistentry> </variablelist></refsect2> <refsect2> <title><anchor id="g-queue-pop-tail-link"/>g_queue_pop_tail_link ()</title> <indexterm><primary>g_queue_pop_tail_link</primary></indexterm><programlisting><link linkend="GList">GList</link>* g_queue_pop_tail_link (<link linkend="GQueue">GQueue</link> *queue);</programlisting> <para> Removes the last element of the queue.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link>. </simpara></listitem></varlistentry> <varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> the <link linkend="GList"><type>GList</type></link> element at the tail of the queue, or <literal>NULL</literal> if the queue is empty. </simpara></listitem></varlistentry> </variablelist></refsect2> <refsect2> <title><anchor id="g-queue-pop-nth-link"/>g_queue_pop_nth_link ()</title> <indexterm role="2.4"><primary>g_queue_pop_nth_link</primary></indexterm><programlisting><link linkend="GList">GList</link>* g_queue_pop_nth_link (<link linkend="GQueue">GQueue</link> *queue, <link linkend="guint">guint</link> n);</programlisting> <para> Removes and returns the link at the given position.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link> </simpara></listitem></varlistentry> <varlistentry><term><parameter>n</parameter> :</term> <listitem><simpara> the link's position </simpara></listitem></varlistentry> <varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> The <parameter>n</parameter>'th link, or <literal>NULL</literal> if <parameter>n</parameter> is off the end of <parameter>queue</parameter>. </simpara></listitem></varlistentry> </variablelist><para>Since 2.4 </para></refsect2> <refsect2> <title><anchor id="g-queue-peek-head-link"/>g_queue_peek_head_link ()</title> <indexterm role="2.4"><primary>g_queue_peek_head_link</primary></indexterm><programlisting><link linkend="GList">GList</link>* g_queue_peek_head_link (<link linkend="GQueue">GQueue</link> *queue);</programlisting> <para> Returns the first link in <parameter>queue</parameter></para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link> </simpara></listitem></varlistentry> <varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> the first link in <parameter>queue</parameter>, or <literal>NULL</literal> if <parameter>queue</parameter> is empty </simpara></listitem></varlistentry> </variablelist><para>Since 2.4 </para></refsect2> <refsect2> <title><anchor id="g-queue-peek-tail-link"/>g_queue_peek_tail_link ()</title> <indexterm role="2.4"><primary>g_queue_peek_tail_link</primary></indexterm><programlisting><link linkend="GList">GList</link>* g_queue_peek_tail_link (<link linkend="GQueue">GQueue</link> *queue);</programlisting> <para> Returns the last link <parameter>queue</parameter>.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link> </simpara></listitem></varlistentry> <varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> the last link in <parameter>queue</parameter>, or <literal>NULL</literal> if <parameter>queue</parameter> is empty </simpara></listitem></varlistentry> </variablelist><para>Since 2.4 </para></refsect2> <refsect2> <title><anchor id="g-queue-peek-nth-link"/>g_queue_peek_nth_link ()</title> <indexterm role="2.4"><primary>g_queue_peek_nth_link</primary></indexterm><programlisting><link linkend="GList">GList</link>* g_queue_peek_nth_link (<link linkend="GQueue">GQueue</link> *queue, <link linkend="guint">guint</link> n);</programlisting> <para> Returns the link at the given position</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link> </simpara></listitem></varlistentry> <varlistentry><term><parameter>n</parameter> :</term> <listitem><simpara> the position of the link </simpara></listitem></varlistentry> <varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> The link at the <parameter>n</parameter>'th position, or <literal>NULL</literal> if <parameter>n</parameter> is off the end of the list </simpara></listitem></varlistentry> </variablelist><para>Since 2.4 </para></refsect2> <refsect2> <title><anchor id="g-queue-link-index"/>g_queue_link_index ()</title> <indexterm role="2.4"><primary>g_queue_link_index</primary></indexterm><programlisting><link linkend="gint">gint</link> g_queue_link_index (<link linkend="GQueue">GQueue</link> *queue, <link linkend="GList">GList</link> *link_);</programlisting> <para> Returns the position of <parameter>link_</parameter> in <parameter>queue</parameter>.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="Gqueue"><type>Gqueue</type></link> </simpara></listitem></varlistentry> <varlistentry><term><parameter>link_</parameter> :</term> <listitem><simpara> A <link linkend="GList"><type>GList</type></link> link </simpara></listitem></varlistentry> <varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> The position of <parameter>link_</parameter>, or -1 if the link is not part of <parameter>queue</parameter> </simpara></listitem></varlistentry> </variablelist><para>Since 2.4 </para></refsect2> <refsect2> <title><anchor id="g-queue-unlink"/>g_queue_unlink ()</title> <indexterm role="2.4"><primary>g_queue_unlink</primary></indexterm><programlisting><link linkend="void">void</link> g_queue_unlink (<link linkend="GQueue">GQueue</link> *queue, <link linkend="GList">GList</link> *link_);</programlisting> <para> Unlinks <parameter>link_</parameter> so that it will no longer be part of <parameter>queue</parameter>. The link is not freed. </para> <para> <parameter>link_</parameter> must be part of <parameter>queue</parameter>,</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link> </simpara></listitem></varlistentry> <varlistentry><term><parameter>link_</parameter> :</term> <listitem><simpara> a <link linkend="GList"><type>GList</type></link> link that <emphasis>must</emphasis> be part of <parameter>queue</parameter> </simpara></listitem></varlistentry> </variablelist><para>Since 2.4 </para></refsect2> <refsect2> <title><anchor id="g-queue-delete-link"/>g_queue_delete_link ()</title> <indexterm role="2.4"><primary>g_queue_delete_link</primary></indexterm><programlisting><link linkend="void">void</link> g_queue_delete_link (<link linkend="GQueue">GQueue</link> *queue, <link linkend="GList">GList</link> *link_);</programlisting> <para> Removes <parameter>link_</parameter> from <parameter>queue</parameter> and frees it. </para> <para> <parameter>link_</parameter> must be part of <parameter>queue</parameter>.</para> <para> </para><variablelist role="params"> <varlistentry><term><parameter>queue</parameter> :</term> <listitem><simpara> a <link linkend="GQueue"><type>GQueue</type></link> </simpara></listitem></varlistentry> <varlistentry><term><parameter>link_</parameter> :</term> <listitem><simpara> a <link linkend="GList"><type>GList</type></link> link that <emphasis>must</emphasis> be part of <parameter>queue</parameter> </simpara></listitem></varlistentry> </variablelist><para>Since 2.4 </para></refsect2> </refsect1> </refentry>