Re: Newbie
- From: Ian Liu Rodrigues <ian liu88 gmail com>
- To: Manu Kaul <manu kaul gmail com>, Gnome List <gtk-list gnome org>
- Subject: Re: Newbie
- Date: Wed, 16 Jun 2010 11:56:54 -0300
Attached there is an example of usage
Regards,
Ian L.
On Wed, Jun 16, 2010 at 10:32 AM, Manu Kaul
<manu kaul gmail com> wrote:
Hi Ian,I have already looked at that API but I am just wondering if I can see some sample code to see how it all hangs together and get a better idea?
Cheers!
On Wed, Jun 16, 2010 at 2:29 PM,
<ian liu88 gmail com> wrote:
GNode has a 'data' attribute, which you can set to any structure you want.
Take a look at the GNode API and you will see every function you need to manipulate the tree:
http://library.gnome.org/devel/glib/stable/glib-N-ary-Trees.html
Em , Manu Kaul <manu kaul gmail com> escreveu:
> Hi All,I am a newbie to this mailing list and I want to implement a n-ary tree and came across "GNode" in glib and wanted to see if there was some good sample code that I could look at to see how I can go about setting up this tree. Also I needed the ability to be able to work upwards from a node all the way to the root by just following the parent pointers. So I was unsure as to how I can do this using GNode. I also wanted to know how I can add additional pointers to the GNode node if I needed them?
>
>
>
> Cheers,
> CBro
>
>
>
>
--
The greater danger for most of us lies not in setting our aim too high and falling short; but in setting our aim too low, and achieving our mark.
- Michelangelo
#include <glib.h>
/*
* Defines a macro for casting an object into a 'Person'
*/
#define PERSON(o) (Person*)(o)
typedef struct {
gchar * name;
gint age;
} Person;
Person * person_new(const gchar * name, gint age) {
Person * p;
p = g_new(Person, 1);
p->name = g_strdup(name);
p->age = age;
return p;
}
void person_print(Person * p) {
g_printf("Name: %s\nAge: %d\n\n", p->name, p->age);
}
void person_free(Person * p) {
g_free(p->name);
g_free(p);
}
gboolean traverse_free_func(GNode * node, gpointer data) {
person_free(PERSON(node->data));
return FALSE;
}
int main(int argc, char *argv[])
{
GNode * father;
GNode * dother;
GNode * brother;
father = g_node_new(person_new("John", 50));
dother = g_node_new(person_new("Sophia", 21));
brother = g_node_new(person_new("Bob", 20));
g_node_append(father, dother);
g_node_insert_after(father, dother, brother);
/*
* Fetch data
*/
GNode * first_child;
GNode * sibling;
first_child = g_node_first_child(father);
sibling = g_node_next_sibling(first_child);
person_print(PERSON(father->data));
person_print(PERSON(first_child->data));
person_print(PERSON(sibling->data));
/*
* We must free everything now.
*/
g_node_traverse(father, G_IN_ORDER, G_TRAVERSE_ALL, -1,
traverse_free_func, NULL);
g_node_destroy(father);
return 0;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]