Byte Arrays

Byte Arrays — Массив байт, который автоматически увеличивается при добавлении элементов.

Краткое описание

#include <glib.h> GByteArray; GByteArray* g_byte_array_new (void); GByteArray* g_byte_array_sized_new (guint reserved_size); GByteArray* g_byte_array_append (GByteArray *array, const guint8 *data, guint len); GByteArray* g_byte_array_prepend (GByteArray *array, const guint8 *data, guint len); GByteArray* g_byte_array_remove_index (GByteArray *array, guint index_); GByteArray* g_byte_array_remove_index_fast (GByteArray *array, guint index_); GByteArray* g_byte_array_remove_range (GByteArray *array, guint index_, guint length); void g_byte_array_sort (GByteArray *array, GCompareFunc compare_func); void g_byte_array_sort_with_data (GByteArray *array, GCompareDataFunc compare_func, gpointer user_data); GByteArray* g_byte_array_set_size (GByteArray *array, guint length); guint8* g_byte_array_free (GByteArray *array, gboolean free_segment);

Описание

GByteArray основан на GArray, для обеспечения массива байт который автоматически увеличивается при добавлении элементов.

Для создания нового GByteArray используйте g_byte_array_new().

Для добавления элементов в GByteArray, используйте g_byte_array_append() и g_byte_array_prepend().

Для установки размера GByteArray, используйте g_byte_array_set_size().

Для освобождения GByteArray, используйте g_byte_array_free().

Пример 8. Using a GByteArray

GByteArray *gbarray; gint i; gbarray = g_byte_array_new (); for (i = 0; i < 10000; i++) g_byte_array_append (gbarray, (guint8*) "abcd", 4); for (i = 0; i < 10000; i++) { g_assert (gbarray->data[4*i] == 'a'); g_assert (gbarray->data[4*i+1] == 'b'); g_assert (gbarray->data[4*i+2] == 'c'); g_assert (gbarray->data[4*i+3] == 'd'); } g_byte_array_free (gbarray, TRUE);

Детали

GByteArray

typedef struct { guint8 *data; guint len; } GByteArray;

Структура GByteArray позволяет доступ к общедоступным полям GByteArray.

guint8 *data; указатель на элемент данных. Данные могут перемещаться когда добавляются элементы в GByteArray.
guint len; количество элементов в GByteArray.

g_byte_array_new ()

GByteArray* g_byte_array_new (void);

Создаёт новый GByteArray.

Возвращает : новый GByteArray.

g_byte_array_sized_new ()

GByteArray* g_byte_array_sized_new (guint reserved_size);

Создаёт новый GByteArray с reserved_size предварительно распределённых байт. Это позволяет избегать частых перераспределений, если вы добавляете много байт в массив. Однако помните что размер массива остаётся 0.

reserved_size : количество предварительно распределённых байт.
Возвращает : новый GByteArray.

g_byte_array_append ()

GByteArray* g_byte_array_append (GByteArray *array, const guint8 *data, guint len);

Добавляет полученные байты в конец GByteArray. Массив автоматически увеличивает размер, если необходимо.

array : GByteArray.
data : байты данных для добавления.
len : количество добавляемых байт.
Возвращает : GByteArray.

g_byte_array_prepend ()

GByteArray* g_byte_array_prepend (GByteArray *array, const guint8 *data, guint len);

Добавляет полученные данные в начало GByteArray. Массив будет увеличиваться автоматически, если необходимо.

array : GByteArray.
data : байты данных для добавления.
len : количество добавляемых байт.
Возвращает : GByteArray.

g_byte_array_remove_index ()

GByteArray* g_byte_array_remove_index (GByteArray *array, guint index_);

Удаляет байт с полученным номером из GByteArray. Следующие байты перемещаются вниз на одну позицию.

array : GByteArray.
index_ : номер байта для удаления.
Возвращает : GByteArray.

g_byte_array_remove_index_fast ()

GByteArray* g_byte_array_remove_index_fast (GByteArray *array, guint index_);

Удаляет байт в полученной позиции GByteArray. Оставшиеся элементы в массиве используются для заполнения пространства, поэтому эта функция не сохраняет порядок GByteArray. Но она быстрее чем g_byte_array_remove_index().

array : GByteArray.
index_ : номер байта для удаления.
Возвращает : GByteArray.

g_byte_array_remove_range ()

GByteArray* g_byte_array_remove_range (GByteArray *array, guint index_, guint length);

Удаляет полученное количество байт на начиная с указанной позиции GByteArray. Следующие элементы перемещаются закрывая пустоту.

array : GByteArray.
index_ : номер первого байта для удаления.
length : количество байт для удаления.
Возвращает : GByteArray.

Начиная с версии 2.4


g_byte_array_sort ()

void g_byte_array_sort (GByteArray *array, GCompareFunc compare_func);

Сортирует массив байт, используя compare_func которая должна быть в стиле функции сравнения qsort() (возвращать отрицательное значение если первый arg меньше чем второй arg, ноль если они равны, положительное значение если первый arg больше чем второй arg).

Если два сравниваемых массива элементов равны, их порядок в сортируемом массиве не определён.

array : GByteArray.
compare_func : функция сравнения.

g_byte_array_sort_with_data ()

void g_byte_array_sort_with_data (GByteArray *array, GCompareDataFunc compare_func, gpointer user_data);

Похожа на g_byte_array_sort(), но функция сравнения принимает дополнительный аргумент пользовательских данных.

array : GByteArray.
compare_func : функция сравнения.
user_data : данные помещаемые в compare_func.

g_byte_array_set_size ()

GByteArray* g_byte_array_set_size (GByteArray *array, guint length);

Устанавливает размер GByteArray, расширяя если необходимо.

array : GByteArray.
length : новый размер GByteArray.
Возвращает : GByteArray.

g_byte_array_free ()

guint8* g_byte_array_free (GByteArray *array, gboolean free_segment);

Освобождает память распределённую для GByteArray. Если free_segment это TRUE, она освобождает фактические байты данных.

array : GByteArray.
free_segment : если TRUE фактические байты данных так же освобождаются.
Возвращает : элемент данных если free_segment это FALSE, иначе NULL