Présentation
Documentation
L'équipe
Sérialisation
 
Programmes
Objets
Libs Utilitaires
Libs Internes
   
 
Editeur
Syntaxes
Windows
Versions
   

SCR/AL1 - TOME III. Les librairies utilitaires

11. Le groupe s_lst

Les fonctions de ce groupe permettent de gérer de manière simple et efficace, des tableaux ou listes d'objets. Par exemple, dans le cas d'un éditeur, les pointeurs vers les lignes du fichier peuvent être stockées dans un grand tableau de pointeurs, ce qui nécessite un espace contigu en mémoire considérable dès que le nombre de lignes dépasse quelques centaines.

Le groupe s_lst propose une solution alternative : les éléments des tableaux ou des listes sont stockées dans des tableaux séparés, chacun comportant un nombre déterminé d'éléments. Une tableau supplémentaire contient les pointeurs vers les sous tableaux.

Si par exemple, un texte contient 10000 lignes, dans la situation standard, le fait d'en ajouter une nécessite les opérations suivantes :

Une ligne supplémentaire demande de répéter l'opération, c'est-à-dire d'allouer 40008 bytes contigus nouveaux. Ceux-ci ne pourront être trouvés dans les 40000 originaux libérés depuis et devront donc être alloués plus loin dans la mémoire. En fait, il s'agira d'avoir 40000 + 40004 + 40008 bytes disponibles en contigu en mémoire pour pouvoir réaliser l'opération.

En DOS, cette opération risque d'échouer, sans compter qu'au-delà de 64K, les allocations deviennent hasardeuses.

Avec l'utilisation des listes, on choisira de définir des blocs de 500 lignes par exemple. La création d'une ligne supplémentaire nécessite donc les opérations suivantes :

A la seconde création, il ne faut plus allouer, puisqu'il reste 499 espaces libres sans le dernier bloc. L'espace contigu est donc de 21 x 2000 bytes + 84 bytes, ce qui correspond presque à l'espace mininum. De plus, le fait de libérer des lignes ne nécessite pas d'espace, le dernier bloc étant libéré dès que possible. L'espace est donc réellement rendu disponible.

Les fonctions de la librairie sont de deux niveaux : le niveau le plus bas se contente de gérer les listes (création, ajout, destruction). Le niveau supérieur permet de réaliser des opérations plus élaborées : transformer un texte en liste sur base de séparateurs, lire un fichier sous forme de listes, etc. Ce second niveau utilise les fonctions de la librairie s_swap pour le stockage des informations.

Fonctions de base

Fonctions exploitant les listes et le SWAP

11.1 LST_create (file s_lst1.c:26)

11.2 LST_nb (file s_lst1.c:284)

11.3 LST_free (file s_lst1.c:60)

11.4 LST_add_1 (file s_lst1.c:86)

11.5 LST_add (file s_lst1.c:120)

11.6 LST_del (file s_lst1.c:146)

11.7 LST_move (file s_lst1.c:179)

11.8 LST_get (file s_lst1.c:204)

11.9 LST_set (file s_lst1.c:236)

11.10 LST_strip (file s_lst1.c:258)

11.11 LST_vtol (file s_lst2.c:145)

11.12 LST_ltov (file s_lst2.c:168)

11.13 LST_free_text (file s_lst2.c:243)

11.14 LST_read_file (file s_lst2.c:280)

11.15 LST_save_file (file s_lst2.c:314)

Copyright © 1998-2015 Jean-Marc Paul and Bernard PAUL - Envoyez vos remarques ou commentaires à bernard@xon.be