The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

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

Pointer Arrays

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

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


#include <glib.h>


            GPtrArray;
GPtrArray*  g_ptr_array_new                 (void);
GPtrArray*  g_ptr_array_sized_new           (guint reserved_size);
void        g_ptr_array_add                 (GPtrArray *array,
                                             gpointer data);
gboolean    g_ptr_array_remove              (GPtrArray *array,
                                             gpointer data);
gpointer    g_ptr_array_remove_index        (GPtrArray *array,
                                             guint index_);
gboolean    g_ptr_array_remove_fast         (GPtrArray *array,
                                             gpointer data);
gpointer    g_ptr_array_remove_index_fast   (GPtrArray *array,
                                             guint index_);
void        g_ptr_array_remove_range        (GPtrArray *array,
                                             guint index_,
                                             guint length);
void        g_ptr_array_sort                (GPtrArray *array,
                                             GCompareFunc compare_func);
void        g_ptr_array_sort_with_data      (GPtrArray *array,
                                             GCompareDataFunc compare_func,
                                             gpointer user_data);
void        g_ptr_array_set_size            (GPtrArray *array,
                                             gint length);
#define     g_ptr_array_index               (array,index_)
gpointer*   g_ptr_array_free                (GPtrArray *array,
                                             gboolean free_seg);
void        g_ptr_array_foreach             (GPtrArray *array,
                                             GFunc func,
                                             gpointer user_data);

Описание

Массивы указателей похожи на простые массивы, но используются только для хранения указатедей.

Примечание

Если вы удалите элементы из массива, элементы из конца массива переместятся в свободное пространство освобождённое удалёнными элементами. Это значит что вы не должны полагаться на сохраняющуюся нумерацию специфичных элементов. Вы должны быть так же внимательны удаляя элементы при перемещении через массив.

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

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

Для удаления элементов из массива указателей, используйте g_ptr_array_remove(), g_ptr_array_remove_index(), или g_ptr_array_remove_index_fast().

Для доступа к элементам в массиве указателей, используйте g_ptr_array_index().

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

Для освобождения массива указателей, используйте g_ptr_array_free().

Пример 7. Using a GPtrArray

  GPtrArray *gparray;
  gchar *string1 = "one", *string2 = "two", *string3 = "three";

  gparray = g_ptr_array_new ();
  g_ptr_array_add (gparray, (gpointer) string1);
  g_ptr_array_add (gparray, (gpointer) string2);
  g_ptr_array_add (gparray, (gpointer) string3);

  if (g_ptr_array_index (gparray, 0) != (gpointer) string1)
    g_print ("ERROR: got %p instead of %p\n",
             g_ptr_array_index (gparray, 0), string1);

  g_ptr_array_free (gparray, TRUE);

Детали

GPtrArray

typedef struct {
  gpointer *pdata;
  guint	    len;
} GPtrArray;

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

gpointer *pdata; пункты в массиве указателей, которые могут быть перемещёны при увеличении массива.
guint len; количество указателей в массиве.

g_ptr_array_new ()

GPtrArray*  g_ptr_array_new                 (void);

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

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

g_ptr_array_sized_new ()

GPtrArray*  g_ptr_array_sized_new           (guint reserved_size);

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

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

g_ptr_array_add ()

void        g_ptr_array_add                 (GPtrArray *array,
                                             gpointer data);

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

array : GPtrArray.
data : добавляемый указатель.

g_ptr_array_remove ()

gboolean    g_ptr_array_remove              (GPtrArray *array,
                                             gpointer data);

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

Она возвращает TRUE если указатель был удалён, или FALSE если указатель не найден.

array : GPtrArray.
data : указатель для удаления.
Возвращает : TRUE если указатель удалён. FALSE если указатель не найден в массиве.

g_ptr_array_remove_index ()

gpointer    g_ptr_array_remove_index        (GPtrArray *array,
                                             guint index_);

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

array : GPtrArray.
index_ : номер указателя для удаления.
Возвращает : указатель который был удалён.

g_ptr_array_remove_fast ()

gboolean    g_ptr_array_remove_fast         (GPtrArray *array,
                                             gpointer data);

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

Возвращает TRUE если указатель был удалён, или FALSE если указатель не найден в массиве.

array : GPtrArray.
data : указатель для удаления.
Возвращает : TRUE если был найден в массиве.

g_ptr_array_remove_index_fast ()

gpointer    g_ptr_array_remove_index_fast   (GPtrArray *array,
                                             guint index_);

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

array : GPtrArray.
index_ : номер указателя для удаления.
Возвращает : указатель который был удалён.

g_ptr_array_remove_range ()

void        g_ptr_array_remove_range        (GPtrArray *array,
                                             guint index_,
                                             guint length);

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

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

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


g_ptr_array_sort ()

void        g_ptr_array_sort                (GPtrArray *array,
                                             GCompareFunc compare_func);

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

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

Примечание

Функция сравнения для g_ptr_array_sort() не принимает указатели из массива как аргументы, она принимает указатели на указатели в массиве.

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

g_ptr_array_sort_with_data ()

void        g_ptr_array_sort_with_data      (GPtrArray *array,
                                             GCompareDataFunc compare_func,
                                             gpointer user_data);

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

Примечание

Функция сравнения для g_ptr_array_sort_with_data() не принимает указатели из массива как аргументы, она принимает указатели на указатели в массиве.

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

g_ptr_array_set_size ()

void        g_ptr_array_set_size            (GPtrArray *array,
                                             gint length);

Устанавливает размер массива, расширяя его если необходимо. Новые элементы устанавливаются в NULL.

array : GPtrArray.
length : новый размер массива указателей.

g_ptr_array_index()

#define     g_ptr_array_index(array,index_)

Возвращает указатель с полученным номером массива указателей.

array : GPtrArray.
index_ : номер возвращаемого указателя.
Возвращает : указатель с полученным номером.

g_ptr_array_free ()

gpointer*   g_ptr_array_free                (GPtrArray *array,
                                             gboolean free_seg);

Освобождает всю память распределённую для массива указателей.

array : GPtrArray.
free_seg : если TRUE массив указателей (pdata) освобождается.
Возвращает : NULL если free_seg это TRUE, иначе возвращает массив указателей (pdata).

g_ptr_array_foreach ()

void        g_ptr_array_foreach             (GPtrArray *array,
                                             GFunc func,
                                             gpointer user_data);

Вызывает функцию для каждого элемента GPtrArray.

array : GPtrArray
func : функция вызываемая для каждого элемента массива
user_data : пользовательские данные помещаемые в функцию

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




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру