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