Portail / Le langage Vala(Sommaire)

Utilisation en Vala des fonction de la librairie glib.

Mise à jour du 13/05/2022.

La librairie GLib inclut un large ensemble d'utilitaires, y compris des adaptateurs pour la plupart des fonctions de la librairie libc standard et plus encore. Ces outils sont disponibles sur toutes les plates-formes Vala, même celles qui ne sont pas compatibles POSIX. Pour une description complète de tout ce que propose GLib, consultez le manuel de référence de GLib. Cette référence est liée à l'API C pour GLib, mais il est assez simple de l'utiliser en Vala.

Mécanisme.

Pour cela, Vala propose la classe GLib. Cette classe ne comporte que des méthodes statiques et chaque méthode statique traduit une fonction de la librairie GLib. La classe GLib est elle même décomposée en espaces de noms qui traduisent le domaine de la fonction C d'origine. Le nom de la fonction C d'origine commence par un identifiant suivi d'un caractère de soulignement. Cet identifiant correspond au à l'espace de nom de la classe GLib.

Par exemple, la fonction C path_get_dirname correpond à l'espace de noms Path. La méthode Vala correspondante est donc GLib.Path.get_dirname(string file_name).

Notez que la documentation de l'API Vala offre celle de la classe GLib.

Exemple : récupération de votre version GLib.

En analysant le documentation GLib, la fonction qui livre la version de la librairie est :

glib_check_version (
  guint required_major,
  guint required_minor,
  guint required_micro
)

On va voir que la règle ci-dessus n'est pas universelle. En effet, il n'existe pas d'espace de noms Check. En revanche, Vala dispose de l'espace de noms Version. Cet espace de nom offre des fonction de test de numéro de version mais ne traduit pas directement la fonction C. En analysant la documentation, on voit que la version est donnée par 3 entiers fixés par les constantes :

public const uint MAJOR
public const uint MINOR
public const uint MICRO

Écrivons un programme Vala qui retourne ce numéro de version sous la forme d'un tableau de 3 entiers non signés et sous la forme d'une chaîne de caractères :

/**
 * Cette classe non instantiable retrouve le numéro de version de la librairie GLib.
 */
class GLibHelper {

  /**
   * Retourne la version de la librairie GLib sous la forme d'un tableau de 3 entiers non signés.
   * Le premier entier (indice 0) est le numéro de version majeur.
   *
   * @return Version de la librairie GLib sous la forme d'un chaîne de caractères.
   */
  public static uint[] getVersionArray() {
    uint[] buffer = new uint[3];
    buffer[0] = GLib.Version.MAJOR;
    buffer[1] = GLib.Version.MINOR;
    buffer[2] = GLib.Version.MICRO;
    return buffer;
  }
  
  /**
   * Retourne la version de la librairie GLib sous la forme d'un chaîne de caractères.
   *
   * @return Version de la librairie GLib sous la forme d'un chaîne de caractères.
   */
  public static string getVersion() {
    uint[] buffer = getVersionArray();
    return buffer[0].to_string() + "." + buffer[1].to_string() + "." + buffer[2].to_string();
  }
}

/**
 * Ce programme lit le numéro de version de la librairie GLib.
 */
void main() {
  stdout.printf("Version de la librairie GLib : %s\n", GLibHelper.getVersion());
}

L'exécution de ce programme produira quelque chose du type :

Version de la librairie GLib : 2.66.8

Rédaction par Jean-Marie Piatte (1983-2021)