Справочное описание GLib | ||||
---|---|---|---|---|
ArraysArrays — Массивы произвольных элементов, которые автоматически увеличиваются при добавлении элементов. |
#include <glib.h>
GArray;
GArray* g_array_new (gboolean zero_terminated,
gboolean clear_,
guint element_size);
GArray* g_array_sized_new (gboolean zero_terminated,
gboolean clear_,
guint element_size,
guint reserved_size);
#define g_array_append_val (a,v)
GArray* g_array_append_vals (GArray *array,
gconstpointer data,
guint len);
#define g_array_prepend_val (a,v)
GArray* g_array_prepend_vals (GArray *array,
gconstpointer data,
guint len);
#define g_array_insert_val (a,i,v)
GArray* g_array_insert_vals (GArray *array,
guint index_,
gconstpointer data,
guint len);
GArray* g_array_remove_index (GArray *array,
guint index_);
GArray* g_array_remove_index_fast (GArray *array,
guint index_);
GArray* g_array_remove_range (GArray *array,
guint index_,
guint length);
void g_array_sort (GArray *array,
GCompareFunc compare_func);
void g_array_sort_with_data (GArray *array,
GCompareDataFunc compare_func,
gpointer user_data);
#define g_array_index (a,t,i)
GArray* g_array_set_size (GArray *array,
guint length);
gchar* g_array_free (GArray *array,
gboolean free_segment);
Массивы подобные стандартным массивам C, за исключением того, что автоматически увеличиваются при добавлении элементов.
Массив элементов может быть любого размера (однако все элементы в пределах одного массива равны) и массив может автоматически очищаться до '0' и завершаться нулём.
Для создания нового массива используйте g_array_new()
.
Для добавления элементов в массив, используйте g_array_append_val()
, g_array_append_vals()
,
g_array_prepend_val()
и g_array_prepend_vals()
.
Для доступа к элементам массива, используйте g_array_index()
.
Для установки размера массива, используйте g_array_set_size()
.
Для освобождения массива, используйте g_array_free()
.
Пример 5. Using a GArray to store gint values
GArray *garray;
gint i;
/* Мы создаём новый массив для хранения значений gint.
Мы не хотим его завершать нулём или очищать до 0. */
garray = g_array_new (FALSE, FALSE, sizeof (gint));
for (i = 0; i < 10000; i++)
g_array_append_val (garray, i);
for (i = 0; i < 10000; i++)
if (g_array_index (garray, gint, i) != i)
g_print ("ERROR: got %d instead of %d\n",
g_array_index (garray, gint, i), i);
g_array_free (garray, TRUE);
GArray* g_array_new (gboolean zero_terminated,
gboolean clear_,
guint element_size);
Создаёт новый GArray.
GArray* g_array_sized_new (gboolean zero_terminated,
gboolean clear_,
guint element_size,
guint reserved_size);
Создаёт новый GArray с предварительно распределёнными элементами
reserved_size
. Это помогает избежать частых перераспределений,
если вы добавляете много элементов в массив. Однако помните, что размер массива остаётся 0.
zero_terminated : |
TRUE если массив должен иметь в конце дополнительный элемент
с полностью чистыми битами.
|
clear_ : |
TRUE если все биты в массиве должны быть очищены
до 0 при распределении.
|
element_size : |
размер каждого элемента в массиве. |
reserved_size : |
количество предварительно распределённых элементов. |
Возвращает : | новый GArray. |
#define g_array_append_val(a,v)
Добавляет значение в конец массива. Массив будет увеличивать размер автоматически, если необходимо.
g_array_append_val()
это макрос который использует ссылку на значение параметра v
.
Это значит что вы не можете использовать его с литеральными значениями, такими как "27".
Вы должны использовать переменные.
GArray* g_array_append_vals (GArray *array,
gconstpointer data,
guint len);
Добавляет len
элементов в конец массива.
#define g_array_prepend_val(a,v)
Добавляет значение в начало массива. Массив будет автоматически увеличиваться, если необходимо.
Эта операция медленнее чем g_array_append_val()
так как существующие элементы в массиве будут перемещаться освобождая пространство для нового элемента.
g_array_prepend_val()
это макрос который использует
ссылку на значение параметра v
. Это значит вы не можете использовать его с литеральными значениями,
такими как "27". Вы должны использовать переменные.
GArray* g_array_prepend_vals (GArray *array,
gconstpointer data,
guint len);
Добавляет len
элементов в начало массива.
Эта операция медленнее чем g_array_append_vals()
,
так как существующие элементы в массиве будут перемещаться освобождая пространство для новых элементов.
#define g_array_insert_val(a,i,v)
Вставляет элемент в массив в указанную позицию.
g_array_insert_val()
это макрос который использует
ссылку на значение параметра v
. Это значит что вы не можете использовать его с литеральными значениями
такими как "27". Вы должны использовать переменные.
GArray* g_array_insert_vals (GArray *array,
guint index_,
gconstpointer data,
guint len);
Вставляет len
элементов в GArray
в указанную позицию.
GArray* g_array_remove_index (GArray *array,
guint index_);
Удаляет элемент из указанной позиции в GArray. Следующие элементы перемещаются на одну позицию вниз.
GArray* g_array_remove_index_fast (GArray *array,
guint index_);
Удаляет элемент из указанной позиции в GArray.
Оставшиеся элементы в массиве используются для заполнения пространства, поэтому эта функция не сохраняет порядок
GArray. Но она быстрее чем
g_array_remove_index()
.
array : |
GArray .
|
index_ : |
позиция удаляемого элемента. |
Возвращает : | GArray. |
GArray* g_array_remove_range (GArray *array,
guint index_,
guint length);
Удаляет полученное количество элементов начиная с указанной позиции GArray. Следующие элементы перемещаются заполняя пустоту.
array : |
GArray .
|
index_ : |
позиция первого удаляемого элемента. |
length : |
количество удаляемых элементов. |
Возвращает : | GArray. |
Начиная с версии 2.4
void g_array_sort (GArray *array,
GCompareFunc compare_func);
Сортирует GArray используя
compare_func
которая должна быть в стиле функции сравнения qsort()
(возвращает значение меньше нуля если первый arg меньше чем второй arg,
ноль если они равны, больше нуля если первый arg больше чем второй arg).
Если два сравниваемых элемента массива равны, их порядок сортировки в массиве неопределён.
array : |
GArray. |
compare_func : |
функция сравнения. |
void g_array_sort_with_data (GArray *array,
GCompareDataFunc compare_func,
gpointer user_data);
Похожа на g_array_sort()
,
но функция сравнения получает дополнительный аргумент пользовательских данных.
array : |
GArray. |
compare_func : |
функция сравнения. |
user_data : |
данные помещаемые в compare_func .
|
#define g_array_index(a,t,i)
Возвращает элемент GArray в указанной позиции. Возвращаемое значение приводится к указанному типу.
Пример 6. Getting указатель на element in a GArray
EDayViewEvent *event;
/* Возвращает указатель на третий элемент в массиве структур EDayViewEvent. */
event = &g_array_index (events, EDayViewEvent, 3);
GArray* g_array_set_size (GArray *array,
guint length);
Устанавливает размер массива, расширяя его если необходимо.
Если массив создаётся с clear_
установленным в
TRUE
, новые элементы устанавливаются в 0.
gchar* g_array_free (GArray *array,
gboolean free_segment);
Освобождает память распределённую для GArray.
Если free_segment
это TRUE
она также освобождает блок памяти содержащей элементы.
Поместите FALSE
если вы хотите освободить оболочку GArray, но тем ни менее сохранить для использования основной массив.
Если массив элементов содержит динамически распределённую память, она должна освобождаться первой.