The OpenNET Project
 
Поиск (ключи):    ПРОГРАММЫ СТАТЬИ СОВЕТЫ ФОРУМ
  WIKI НОВОСТИ (+) MAN'ы ДОКУМЕНТАЦИЯ

Каталог документации / Раздел "Программирование, языки" / Оглавление документа

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

ПОДПИШИСЬ НА ЖУРНАЛ Linux Format 2012!

Журнал "Linux Format" (Линукс Формат)- Единственный в России и странах СНГ журнал на русском языке, посвящённый Linux и свободному ПО. Журнал для IT-директоров, IT-менеджеров, программистов, системных администраторов, учителей школ и преподавателей ВУЗов и всех пользователей ПК. В каждом выпуске: Новости индустрии OpenSource, обзоры новинок свободного ПО, обучающие и методические статьи.

Каждый, кто оформит подписку, получает бонусы и подарки- объёмные наклейки на системный блок, диск с архивом номеров за 2005-2011 г.г. и ежемесячно электронную версию журнала в pdf-формате.

Оформить подписку на год


  Закладки на сайте
  Проследить за страницей
Created 1996-2012 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
RUNNet TopList