The OpenNET Project / Index page

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

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

GTree

Для создания или удаления GTree, используйте пару конструктор-деструктор, приведенную в списке функций 2..12. GCompareFunc аналогична функции сравнения "qsort()", описанной для GSList; в данном случае она используется для сравнения ключей в дереве.

Список функций 2..12: Создание и удаление сбалансированных двоичных деревьев
"#include "<glib.h>
GTree *g_tree_new(GCompareFunc key_compare_func)
void g_tree_destroy(GTree *tree)

Функции для манипулирования содержимым дерева показаны в списке функций 2..13. Все очень прямолинейно; "g_tree_insert()" перезаписывает любое существующее значение, поэтому будьте осторожны, если существующее значение является указателем на область выделенной памяти. Если "g_tree_lookup()" не может найти ключ, она возвращает NULL, иначе она возвращает связанное с ключом значение. И ключи, и значения имеют тип gpointer, но макросы "GPOINTER_TO_INT()" и "GPOINTER_TO_UINT()" позволяют вам использовать целые числа.

Список функций 2..13: Манипулирование содержимым GTree
"#include "<glib.h>
void g_tree_insert(GTree *tree, gpointer key,
                   gpointer value)
void g_tree_remove(GTree *tree, gpointer key)
gpointer g_tree_lookup(GTree *tree, gpointer key)

Существуют две функции, показанные в списке функций 2..14, которые дают вам информацию, насколько большим является дерево.

Список функций 2..14: Определение размера GTree
"#include "<glib.h>
gint g_tree_nnodes(GTree *tree)
gint g_tree_height(GTree *tree)

Используя "g_tree_traverse()" (список функций 2..15), вы можете проходить все дерево. Для ее использования вы должны обеспечить GTraverseFunc, которой передается каждая пара ключ-значение и аргумент data, который вы передаете в "g_tree_traverse()". Прохождение дерева продолжается до тех пор, пока GTraverseFunc возвращает FALSE; если она возвращает TRUE, прохождение прекращается. Вы можете использовать это для поиска значения в дереве. Вот определение GTraverseFunc:

typedef gint (*GTraverseFunc) (gpointer key, gpointer value,
                               gpointer data);

GTraverseType - это перечисление; возможны 4 значения. Вот их смысл применительно к GTree.

Список функций 2..15: Прохождение GTree
"#include "<glib.h>
void g_tree_traverse(GTree *tree, GTraverseFunc traverse_func,
                     GTraverseType traverse_type, gpointer data)


Linux Land
2000-09-15



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

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