Synopsis#include <glib.h> GSequence; typedef GSequenceIter; gint (*GSequenceIterCompareFunc) (GSequenceIter *a, GSequenceIter *b, gpointer data); GSequence* g_sequence_new (GDestroyNotify data_destroy); void g_sequence_free (GSequence *seq); gint g_sequence_get_length (GSequence *seq); void g_sequence_foreach (GSequence *seq, GFunc func, gpointer user_data); void g_sequence_foreach_range (GSequenceIter *begin, GSequenceIter *end, GFunc func, gpointer user_data); void g_sequence_sort (GSequence *seq, GCompareDataFunc cmp_func, gpointer cmp_data); void g_sequence_sort_iter (GSequence *seq, GSequenceIterCompareFunc cmp_func, gpointer cmp_data); GSequenceIter* g_sequence_get_begin_iter (GSequence *seq); GSequenceIter* g_sequence_get_end_iter (GSequence *seq); GSequenceIter* g_sequence_get_iter_at_pos (GSequence *seq, gint pos); GSequenceIter* g_sequence_append (GSequence *seq, gpointer data); GSequenceIter* g_sequence_prepend (GSequence *seq, gpointer data); GSequenceIter* g_sequence_insert_before (GSequenceIter *iter, gpointer data); void g_sequence_move (GSequenceIter *src, GSequenceIter *dest); void g_sequence_swap (GSequenceIter *a, GSequenceIter *b); GSequenceIter* g_sequence_insert_sorted (GSequence *seq, gpointer data, GCompareDataFunc cmp_func, gpointer cmp_data); GSequenceIter* g_sequence_insert_sorted_iter (GSequence *seq, gpointer data, GSequenceIterCompareFunc iter_cmp, gpointer cmp_data); void g_sequence_sort_changed (GSequenceIter *iter, GCompareDataFunc cmp_func, gpointer cmp_data); void g_sequence_sort_changed_iter (GSequenceIter *iter, GSequenceIterCompareFunc iter_cmp, gpointer cmp_data); void g_sequence_remove (GSequenceIter *iter); void g_sequence_remove_range (GSequenceIter *begin, GSequenceIter *end); void g_sequence_move_range (GSequenceIter *dest, GSequenceIter *begin, GSequenceIter *end); GSequenceIter* g_sequence_search (GSequence *seq, gpointer data, GCompareDataFunc cmp_func, gpointer cmp_data); GSequenceIter* g_sequence_search_iter (GSequence *seq, gpointer data, GSequenceIterCompareFunc iter_cmp, gpointer cmp_data); gpointer g_sequence_get (GSequenceIter *iter); void g_sequence_set (GSequenceIter *iter, gpointer data); gboolean g_sequence_iter_is_begin (GSequenceIter *iter); gboolean g_sequence_iter_is_end (GSequenceIter *iter); GSequenceIter* g_sequence_iter_next (GSequenceIter *iter); GSequenceIter* g_sequence_iter_prev (GSequenceIter *iter); gint g_sequence_iter_get_position (GSequenceIter *iter); GSequenceIter* g_sequence_iter_move (GSequenceIter *iter, gint delta); GSequence* g_sequence_iter_get_sequence (GSequenceIter *iter); gint g_sequence_iter_compare (GSequenceIter *a, GSequenceIter *b); GSequenceIter* g_sequence_range_get_midpoint (GSequenceIter *begin, GSequenceIter *end); DescriptionThe GSequence data structure has the API of a list, but is implemented internally with a balanced binary tree. This means that it is possible to maintain a sorted list of n elements in time O(n log n). The data contained in each element can be either integer values, by using of the Type Conversion Macros, or simply pointers to any type of data. A GSequence is accessed through iterators, represented by a GSequenceIter. An iterator represents a position between two elements of the sequence. For example, the begin iterator represents the gap immediately before the first element of the sequence, and the end iterator represents the gap immediately after the last element. In an empty sequence, the begin and end iterators are the same.
Some methods on GSequence operate on ranges of items. For example
The function
Iterators are stable across most operations on a GSequence. For
example an iterator pointing to some element of a sequence will
continue to point to that element even after the sequence is
sorted. Even moving an element to another sequence using for example
DetailsGSequencetypedef struct _GSequence GSequence; The GSequence struct is an opaque data type representing a Sequence data type. GSequenceIterThe GSequenceIter struct is an opaque data type representing an iterator pointing into a GSequence. GSequenceIterCompareFunc ()gint (*GSequenceIterCompareFunc) (GSequenceIter *a, GSequenceIter *b, gpointer data);
A GSequenceIterCompareFunc is a function used to compare
iterators. It must return zero if the iterators compare equal, a
negative value if
g_sequence_new ()GSequence* g_sequence_new (GDestroyNotify data_destroy);
Creates a new GSequence. The
Since 2.14 g_sequence_free ()void g_sequence_free (GSequence *seq);
Frees the memory allocated for
Since 2.14 g_sequence_get_length ()gint g_sequence_get_length (GSequence *seq);
Returns the length of
Since 2.14 g_sequence_foreach ()void g_sequence_foreach (GSequence *seq, GFunc func, gpointer user_data);
Calls
Since 2.14 g_sequence_foreach_range ()void g_sequence_foreach_range (GSequenceIter *begin, GSequenceIter *end, GFunc func, gpointer user_data);
Calls
Since 2.14 g_sequence_sort ()void g_sequence_sort (GSequence *seq, GCompareDataFunc cmp_func, gpointer cmp_data);
Sorts
Since 2.14 g_sequence_sort_iter ()void g_sequence_sort_iter (GSequence *seq, GSequenceIterCompareFunc cmp_func, gpointer cmp_data);
Like
Since 2.14 g_sequence_get_begin_iter ()GSequenceIter* g_sequence_get_begin_iter (GSequence *seq);
Returns the begin iterator for
Since 2.14 g_sequence_get_end_iter ()GSequenceIter* g_sequence_get_end_iter (GSequence *seq);
Returns the end iterator for
Since 2.14 g_sequence_get_iter_at_pos ()GSequenceIter* g_sequence_get_iter_at_pos (GSequence *seq, gint pos);
Returns the iterator at position
Since 2.14 g_sequence_append ()GSequenceIter* g_sequence_append (GSequence *seq, gpointer data);
Adds a new item to the end of
Since 2.14 g_sequence_prepend ()GSequenceIter* g_sequence_prepend (GSequence *seq, gpointer data);
Adds a new item to the front of
Since 2.14 g_sequence_insert_before ()GSequenceIter* g_sequence_insert_before (GSequenceIter *iter, gpointer data);
Inserts a new item just before the item pointed to by
Since 2.14 g_sequence_move ()void g_sequence_move (GSequenceIter *src, GSequenceIter *dest);
Moves the item pointed to by
Since 2.14 g_sequence_swap ()void g_sequence_swap (GSequenceIter *a, GSequenceIter *b);
Swaps the items pointed to by
Since 2.14 g_sequence_insert_sorted ()GSequenceIter* g_sequence_insert_sorted (GSequence *seq, gpointer data, GCompareDataFunc cmp_func, gpointer cmp_data);
Inserts
Since 2.14 g_sequence_insert_sorted_iter ()GSequenceIter* g_sequence_insert_sorted_iter (GSequence *seq, gpointer data, GSequenceIterCompareFunc iter_cmp, gpointer cmp_data);
Like
Since 2.14 g_sequence_sort_changed ()void g_sequence_sort_changed (GSequenceIter *iter, GCompareDataFunc cmp_func, gpointer cmp_data);
Moves the data pointed to a new position as indicated by
Since 2.14 g_sequence_sort_changed_iter ()void g_sequence_sort_changed_iter (GSequenceIter *iter, GSequenceIterCompareFunc iter_cmp, gpointer cmp_data);
Like
Since 2.14 g_sequence_remove ()void g_sequence_remove (GSequenceIter *iter);
Removes the item pointed to by If the sequnce has a data destroy function associated with it, this function is called on the data for the removed item.
Since 2.14 g_sequence_remove_range ()void g_sequence_remove_range (GSequenceIter *begin, GSequenceIter *end);
Removes all items in the ( If the sequence has a data destroy function associated with it, this function is called on the data for the removed items.
Since 2.14 g_sequence_move_range ()void g_sequence_move_range (GSequenceIter *dest, GSequenceIter *begin, GSequenceIter *end);
Inserts the (
If
Since 2.14 g_sequence_search ()GSequenceIter* g_sequence_search (GSequence *seq, gpointer data, GCompareDataFunc cmp_func, gpointer cmp_data);
Returns an iterator pointing to the position where
Since 2.14 g_sequence_search_iter ()GSequenceIter* g_sequence_search_iter (GSequence *seq, gpointer data, GSequenceIterCompareFunc iter_cmp, gpointer cmp_data);
Like
Since 2.14 g_sequence_get ()gpointer g_sequence_get (GSequenceIter *iter);
Returns the data that
Since 2.14 g_sequence_set ()void g_sequence_set (GSequenceIter *iter, gpointer data);
Changes the data for the item pointed to by
Since 2.14 g_sequence_iter_is_begin ()gboolean g_sequence_iter_is_begin (GSequenceIter *iter);
Returns whether
Since 2.14 g_sequence_iter_is_end ()gboolean g_sequence_iter_is_end (GSequenceIter *iter);
Returns whether
Since 2.14 g_sequence_iter_next ()GSequenceIter* g_sequence_iter_next (GSequenceIter *iter);
Returns an iterator pointing to the next position after
Since 2.14 g_sequence_iter_prev ()GSequenceIter* g_sequence_iter_prev (GSequenceIter *iter);
Returns an iterator pointing to the previous position before
Since 2.14 g_sequence_iter_get_position ()gint g_sequence_iter_get_position (GSequenceIter *iter);
Returns the position of
Since 2.14 g_sequence_iter_move ()GSequenceIter* g_sequence_iter_move (GSequenceIter *iter, gint delta);
Returns the GSequenceIter which is
Since 2.14 g_sequence_iter_get_sequence ()GSequence* g_sequence_iter_get_sequence (GSequenceIter *iter);
Returns the GSequence that
Since 2.14 g_sequence_iter_compare ()gint g_sequence_iter_compare (GSequenceIter *a, GSequenceIter *b);
Returns a negative number if
The
Since 2.14 g_sequence_range_get_midpoint ()GSequenceIter* g_sequence_range_get_midpoint (GSequenceIter *begin, GSequenceIter *end);
Finds an iterator somewhere in the range (
The
Since 2.14 |