Classes d’id Tech 4 (neo/idlib)

Description des fichiers dans le dossier neo/idlib.

  • Chaque section prend le nom des deux fichiers C++ (.h et .cpp) auquelle elle fait référence. Ainsi, Dict indique les fichiers Dict.h et Dict.cpp.
  • Certaines sections ajouteront l'extension pour signaler un fichier unique, tel CVarSystem.h.
  • Une note « + description » indique que le fichier contient une description détaillée pour une ou plusieurs classes.
  • Une classe entre parenthèses indique qu'elle est héritée : SousClasse (ClasseDeBase).

Sous-dossiers : bv, math.

=Dict

La classe idDict est un « dictionnaire », c'est-à-dire un recueil de paires clé / valeur. Cette classe sert à plusieurs choses, dont déterminer les paramètres (spawnargs) des entités à leur création.

  • GetString(), GetFloat(), GetInt(), etc. retournent la valeur de la propriété (spécifiée en paramètre) dans leurs formats respectifs.

=Lexer (+ description)

Classe : idLexer

  • idLexer::ExpectAnyToken() lit le prochain token (mot / nombre) dans un fichier. Si la lecture échoue, on retourne 0 ; sinon, 1.
  • idLexer::ReadToken() insère le prochain mot ou expression d'une ligne de code dans un objet idToken.

=List

idList utilise les template pour fonctionner de façon générique. Le terme type ci-bas remplace le nom d'une classe particulière.

  • idList<type>::AssureSize() assure que la liste aura AU MOINS le nombre d'éléments voulu.
  • idList<type>::SetNum() redimensionne la liste au nombre exact d'éléments.

=Parser

idParser servirait à récupérer le texte d'un script (.script, .gui, etc.).

Chaque mot dans un script sera analysé individuellement, et présenté à la fonction qui utilise l'objet idParser. Plusieurs symboles sont utilisés pour séparer les mots (pas seulement les espaces).

Il est probable que chaque objet idParser ne corresponde qu'à un seul fichier ; un des constructeurs prend comme argument le nom d'un fichier :

idParser( const char *filename, int flags = 0, bool OSPath = false );

  • idParser::ReadToken() cherche le prochain mot dans le script. S'il en trouve un, il l'insère dans un objet idToken passé en argument.

=Str

Les chaînes de caractères. On peut créer un objet idStr à partir d'une chaîne littérale de façon intuitive :

idStr( "Ma chaîne" );

Noter qu'un objet idStr peut être interprété comme const char*, probablement à cause de cette méthode :

operator const char *( void );

On dirait qu'idStr surcharge une sorte d'opérateur d'interprétation... C'est la première fois que je vois une surcharge pareille.

La classe idStr contient plusieurs fonctions destinées à remplacer celles de la bibliothèque standard. Les méthodes précédées du nom de la classe sont statiques :

  • idStr::Append() ajoute du texte à la fin d'un idStr.
  • idStr::Cmp() (sensible à la classe) compare deux chaînes, et retourne 0 si elles sont égales (identiques), -1 si elles ne le sont pas, et 1 si elles sont de taille différente.
  • idStr::Icmp() : comme Cmp(), mais insensible à la casse.
  • idStr::Cmpn() compare deux chaînes jusqu'un index particulier (insensible à la casse), et retourne 0 si les chaînes sont égales avant cet index.
  • idStr::Icmpn() : comme Cmpn(), mais insensible à la casse :

    idStr::Icmpn( "Chose", "chose", 5 ) == 0
    idStr::Icmpn( "Choco", "chose", 5 ) == -1
    idStr::Icmpn( "Choco", "chose", 3 ) == 0

  • idStr::FindText() cherche une chaîne dans une autre, et retourne -1 si elle n'est pas trouvée.