मैं कार्यों का विस्तार करने का एक सेट विकसित करने की आवश्यकता glib2 GTreeके साथ:
- पहला तत्व को खोजने
- पिछले लगता है
- निकटतम लगता है (मंजिल, प्लस्तर लगाना, सबसे बड़ी कम, की तुलना में कम से कम से अधिक)
पहले ढूँढना आसान है। आप बस को रोकने के g_tree_foreach()लिए पहले के बाद calback। लेकिन यह कैसे पिछले तत्व को खोजने के लिए पूरे वृक्ष traversing के बिना ?
मुझे लगता है मैं इस्तेमाल कर सकते हैं सोचा g_tree_search()एक कॉलबैक कि पाया जब तक एक सकारात्मक मूल्य लौटने रहता है के साथ है, लेकिन मैं कैसे जानते हो मैं पिछले तत्व पर वर्तमान में कर रहा हूँ?
#include <stdio.h>
#include <sys/types.h>
#include <string.h>
#include <glib.h>
static
gint compare_int(gconstpointer p1, gconstpointer p2) {
int i1 = GPOINTER_TO_INT(p1);
int i2 = GPOINTER_TO_INT(p2);
//printf(%d %d\n, i1, i2);
return i1 == i2 ? 0 : i1 > i2 ? 1 : -1;
}
static
gboolean traverse(gpointer key, gpointer value, gpointer data) {
//int ikey = GPOINTER_TO_INT(key);
const char *sval = (const char *)value;
printf(%s\n, sval);
return FALSE;
}
static
gint find_last(gconstpointer p, gpointer user_data) {
return 1;
}
static inline const char *NULS(const char *s) {
return s ? s : NULL;
}
int main(int argc, char *argv[]) {
GTree *tree = g_tree_new(compare_int);
g_tree_insert(tree, GINT_TO_POINTER(10), ten);
g_tree_insert(tree, GINT_TO_POINTER(-99), minus ninety-nine);
g_tree_insert(tree, GINT_TO_POINTER(8), eight);
g_tree_foreach(tree, traverse, NULL);
printf(=======\n%s\n, NULS((const char*)g_tree_search(tree, (GCompareFunc)find_last, NULL)));
return 0;
}













