Un paseo por GLib

Claudio Saavedra

claudio@codemonkey.cl

DUOC UC Antonio Varas - Santiago
09 de Octubre 2004

¿Que es GLib?

Librería multiproposito de bajo nivel que brinda muchas facilidades para el desarrollo de aplicaciones en C.

La base de toda aplicación GTK+/GNOME.

Es multiplataforma (Unix, Windows, OS/2, BeOS).

¿Que brinda?

Tipos de datos fundamentales portables (gint, gchar, gboolean).

Funciones para mensajes de salida estandares (errores, advertencias, depuración).

Manejo avanzado de strings. (UTF-8, GString).

¿Que brinda? (2)

Estructuras de datos de variado nivel de complejidad que pueden ser utilizadas transparentemente (listas encadenadas, arreglos, tablas hash).

Un sistema de objetos seguro (GObject).

Manejo del tiempo. (GTimer, GDate).

Numeros aleatorios (GRand).

¿Que brinda? (3)

Canales de comunicación (GIOChannel).

Macros para gestión de memoria.

Hebras (Gthread).

etc.

Compilar con GLib

Para utilizar Glib, incluimos la cabecera:
#include <glib.h>

Compilamos con:
gcc -o foo foo.c `pkg-config --cflags –libs glib-2.0`

Ojo con las comillas.

Compilar con Glib (2)

Ejemplo...

Tipos de Datos

Se antepone una 'g' a éstos.

gint

gchar

gdouble, etc

Punteros: gpointer, gconstpointer.

Booleanos: gboolean.

Mensajes

printf (), no permite redireccionar la salida.

g_print (), si, por lo que la preferimos.
g_print (“%s%i%c”, “size: ”, 5, '\n');
size: 5

Para mensajes de error, g_printerr ();

Mensajes (2)

Ejemplo....

GString

Estructura de datos 'inteligente' para manejo de cadenas de texto.

Se reubica en memoria si necesita más espacio del que tiene asignado.
GString *gs = g_string_new (“mi querido g_string”);
g_string_assign (gs, “mi mas que querido g_string”);

GString (2)

Para obtener el gchar * asociado a un GString, usamos:
gs->str;

Liberar un Gstring:
g_string_free (gs, TRUE);

Con el segundo argumento en FALSE, no se libera el contenido de gs->str.

Gstring (3)

Modificar Gstring's
GString gs = g_string_new (“o”);
g_string_append (gs, “/”);
g_string_prepend (gs, “_”);
g_print (“%s\n”, gs->str);

¿Que se despliega?

GString (4)

Miscelaneas:
g_string_ascii_{up,down} ()
g_string[_{a,pre}ppend]_printf ();
g_string_truncate ();
g_string_erase ();

UTF-8

Con UTF-8 tenemos más de 1 byte por caracter.

Muchas funciones sobre ascii no van a funcionar con UTF-8.

GLib brinda funciones para el manejo de UTF-8, analogas a las existentes para ascii.

GList

Lista doblemente enlazada.

No apta para estudiantes de estructura de datos.

Cuidado con el retorno de sus funciones. Generalmente, el primer elemento de la lista, cambia.

Glist (2)

Composicion de la estructura:
struct GList {
gpointer data;
GList *next;
GList *prev;
};

Glist (3)

Para crear una GList, simplemente se apunta a NULL.

Para agregar un elemento, usamos
gl = g_list_append (gl, element);

Para insertar en una posicion i:
gl = g_list_insert (gl, element, i);

GTimer

Para medir el tiempo.

Obtenemos uno nuevo con
GTimer * timer = g_timer_new ();

Comenzamos a medir con
g_timer_start (timer);

Obtenemos el tiempo transcurrido con:
gdouble time = g_timer_elapsed (timer,
mstime);

2004-08-13T00:21:41