948 lines
23 KiB
Groff
948 lines
23 KiB
Groff
'\" t
|
|
.\" @(#)LIBNODE.3 1.0 99/10/12 SMA;
|
|
.TH LIBNODE 3 "10 Oct 1999"
|
|
.SH NOM
|
|
LIBNODE (librairie de structure de donnees a base de noeuds)
|
|
.SH SYNOPSIS
|
|
.LP
|
|
.B cc [flag ...] file ... -lver -ldl -lnode [library ...]
|
|
.LP
|
|
.B #include <node.h>
|
|
.LP
|
|
.BI "NDT_Status ND_Library_Open ( int " Debug_Mode " );"
|
|
.LP
|
|
.BI "NDT_Status ND_Library_Close ( void );"
|
|
.LP
|
|
.BI "NDT_Status ND_Library_Stderr_Set ( FILE * " Out " );"
|
|
.LP
|
|
.BI "NDT_Status ND_DataStruct_Open ( NDT_Root ** " Root ", NDT_DataStruct_Type " Type ", const char * " Allocator ", const char * " Desallocator ", void * " User " );"
|
|
.LP
|
|
.BI "NDT_Status ND_DataStruct_Close ( NDT_Root * " Root " );"
|
|
.LP
|
|
.BI "NDT_Status ND_DataStruct_Reorg ( NDT_Root * " Root " );"
|
|
.LP
|
|
.BI "NDT_Status ND_DataStruct_Traverse ( NDT_Root * " Root ", NDT_Command, void * " Command ", void * " Data " );"
|
|
.LP
|
|
.BI "NDT_Status ND_DataStruct_Convert ( NDT_Root * " Root ", ND_Conversion_Type " Target_Type " );"
|
|
.LP
|
|
.BI "NDT_Status ND_DataStruct_Info_Print ( NDT_Root * " Root ", FILE * " Out " );"
|
|
.LP
|
|
.BI "NDT_Status ND_DataStruct_Print ( NDT_Root * " Root ", FILE * " Out " );"
|
|
.LP
|
|
.BI "NDT_Status ND_DataStruct_Check ( NDT_Root * " Root ", int * " Nb_Detected ", int * " Nb_Corrected " ,FILE * " Out " );"
|
|
.LP
|
|
.BI "NDT_Status ND_DataStruct_Dump ( NDT_Root * " Root ", FILE * " Out " );"
|
|
.LP
|
|
.BI "NDT_Status ND_Node_Root_Get ( NDT_Root ** " Root ", NDT_Node * " Node " );"
|
|
.LP
|
|
.BI "NDT_Status ND_Node_First_Get ( NDT_Root * " Root ", NDT_Node ** " Node " );"
|
|
.LP
|
|
.BI "NDT_Status ND_Node_Last_Get ( NDT_Root * " Root ", NDT_Node ** " Node " );"
|
|
.LP
|
|
.BI "NDT_Status ND_Node_Next_Get ( NDT_Node * " Node ", NDT_Node ** " Next_Node " );"
|
|
.LP
|
|
.BI "NDT_Status ND_Node_Previous_Get ( NDT_Node * " Node ", NDT_Node ** " Prev_Node " );"
|
|
.LP
|
|
.BI "NDT_Status ND_Node_Add ( NDT_Root * " Root ", NDT_Node * " Node " );"
|
|
.LP
|
|
.BI "NDT_Status ND_Node_Remove ( NDT_Node * " Node " );"
|
|
.LP
|
|
.BI "NDT_Status ND_Node_Find ( NDT_Root * " Root ", NDT_Node ** " Node ",void * " Value " , void * " Data " );"
|
|
.LP
|
|
.BI "NDT_Status ND_Value_Alloc ( NDT_Root * " Root ", void ** " Value ", ... );"
|
|
.LP
|
|
.BI "NDT_Status ND_Value_Add ( NDT_Root * " Root ", void * " Value " );"
|
|
.LP
|
|
.BI "NDT_Status ND_Value_Remove ( NDT_Root * " Root ", void * " Reference_Value " , void ** " Removed_Value " );"
|
|
.LP
|
|
.BI "NDT_Status ND_Value_Free ( NDT_Root * " Root ", void * " Value " );"
|
|
.LP
|
|
.BI "NDT_Status ND_Manager_Exec (const char * " Function_Name ", ...)"
|
|
.LP
|
|
.BI "NDT_Status ND_Allocator_Exec (const char * " Function_Name ", void ** " Ptr ", size_t " Size ", void * " Data " );"
|
|
.LP
|
|
.BI "NDT_Status ND_Desallocator_Exec (const char * " Function_Name ", void * " Ptr ", void * " Data " );"
|
|
.LP
|
|
.SH DESCRIPTION
|
|
.LP
|
|
La bibliotheque LIBNODE implemente deux types de structure de donnees a base de noeuds :
|
|
.LP
|
|
.RS 3
|
|
- liste chainee
|
|
.LP
|
|
- arbre binaire
|
|
.RS -3
|
|
.LP
|
|
Une structure de donnees est composee d'une racine ( voir le type
|
|
.B NDT_Root
|
|
) et de zero, un ou plusieurs noeuds (voir le type
|
|
.B NDT_Node
|
|
).
|
|
.LP
|
|
Fondamentalement, seul le chainage entre les noeuds distingue les differents types de structure implementes dans cette librairie.
|
|
.LP
|
|
La librairie LIBNODE implemente les fonctions minimales pour ce type de structure.
|
|
Elle pourra bien entendu etre enrichie suite aux remarques des utilisateurs.
|
|
.LP
|
|
.SH TYPES
|
|
.LP
|
|
La librairie LIBNODE definit les types suivants :
|
|
.LP
|
|
.BI NDT_Root
|
|
.LP
|
|
.RS 3
|
|
Designe le type d'une racine de structure de donnees
|
|
.LP
|
|
Il s'agit d'une structure qui contient toutes les informations statistiques de la structure de donnees sous-jacente :
|
|
.LP
|
|
.RS 3
|
|
- nombre de noeuds (
|
|
.B ND_Node_Number
|
|
)
|
|
.LP
|
|
- profondeur minimum (
|
|
.B Min_Depth
|
|
) (pour les arbres)
|
|
.LP
|
|
- profondeur maximum (
|
|
.B Max_Depth
|
|
) (pour les arbres)
|
|
.LP
|
|
- nombre de reequilibrages (
|
|
.B Nb_Equ
|
|
) (pour les arbres)
|
|
.RS -3
|
|
.LP
|
|
La structure racine pointe sur les noeuds de tete (
|
|
.B Head
|
|
) et de queue (
|
|
.B Queue
|
|
) de la structure de donnees.
|
|
Pour une liste chainee, le noeud de tete est le premier noeud de la liste et le noeud de queue est le dernier noeud de la liste.
|
|
Pour un arbre binaire, le noeud de tete et le noeud de queue correpondent tous deux au meme noeud racine de l'arbre.
|
|
.LP
|
|
La gestion des arbres binaires prend en compte un reequilibrage automatique.
|
|
La structure racine conserve pour cela la taille de la plus grande branche de l'arbre (
|
|
.B Max_Depth
|
|
) ainsi que celle de la plus courte (
|
|
.B Min_Depth
|
|
).
|
|
Pour un arbre auto-equilibre, le depassement d'un seuil (
|
|
.B Max_Dif
|
|
) provoque immediatement son reequilibrage.
|
|
.LP
|
|
La racine d'une structure reference enfin les fonctions suivantes par leur nom :
|
|
.LP
|
|
.RS 3
|
|
-
|
|
.B Manager
|
|
: fonction qui implemente les commandes specifiques a realiser sur les valeurs, notamment :
|
|
.RS 3
|
|
.LP
|
|
- la creation d'une valeur
|
|
.LP
|
|
- la suppression d'une valeur
|
|
.LP
|
|
- l'affichage d'une valeur
|
|
.LP
|
|
- la comparaison de deux valeurs
|
|
.RS -3
|
|
.LP
|
|
-
|
|
.B Allocator
|
|
: fonction qui realise l'allocation de memoire pour la structure
|
|
.LP
|
|
-
|
|
.B Desallocator
|
|
: fonction qui realise la desallocation de memoire pour la structure
|
|
.LP
|
|
.RS -3
|
|
.I NB
|
|
: une racine contient un pointeur librement utilisable par l'utilisateur (
|
|
.B User
|
|
).
|
|
.LP
|
|
.RS -3
|
|
.B NDT_DataStruct_Type
|
|
.LP
|
|
.RS 3
|
|
Ce type definit sur un entier long le type de chainage de la structure de donnees :
|
|
.LP
|
|
.RS 3
|
|
-
|
|
.B NDD_DS_LIST
|
|
: liste chainee
|
|
.LP
|
|
-
|
|
.B NDD_DS_TREE
|
|
: arbre binaire
|
|
.RS -3
|
|
.LP
|
|
et son mode de gestion :
|
|
.RS 3
|
|
.LP
|
|
-
|
|
.B NDD_MN_FIFO
|
|
(ou
|
|
.B NDD_MN_LILO
|
|
) : principe de la file d'attente (First In First Out)
|
|
.LP
|
|
-
|
|
.B NDD_MN_FILO
|
|
(ou
|
|
.B NDD_MN_LIFO
|
|
) : principe de la pile (First In Last Out)
|
|
.LP
|
|
-
|
|
.B NDD_MN_ORDERED
|
|
: ordonnancement des valeurs (liste triee).
|
|
Losque deux noeuds ont la meme valeur, ils seront ordonnes dans l'ordre chronologique d'insertion.
|
|
.LP
|
|
Toutefois, l'utilisateur pourra combiner par addition binaire les types
|
|
.B NDD_MN_ORDERED
|
|
et
|
|
.B NDD_MN_FILO
|
|
afin que deux noeuds de meme valeur soient ordonnes dans l'ordre inverse.
|
|
.LP
|
|
-
|
|
.B NDD_MN_AUTO_EQU
|
|
: auto-equilibre (arbre)
|
|
.RS -3
|
|
.LP
|
|
Les valeurs NDD_DS* et NDD_MN* peuvent etre utilisees de maniere combinee par addition binaire.
|
|
.LP
|
|
.I Exemple
|
|
:
|
|
.LP
|
|
Mon_Type =
|
|
.B NDD_DS_LIST
|
|
|
|
|
.B NDD_MN_ORDERED
|
|
;
|
|
.LP
|
|
Mon_Type =
|
|
.B NDD_DS_TREE
|
|
|
|
|
.B NDD_MN_AUTO_EQU
|
|
;
|
|
.LP
|
|
Des valeurs "masque" permettent de ne recuperer que l'une des deux parties du type :
|
|
.LP
|
|
.RS 3
|
|
-
|
|
.B NDD_DS_MSK
|
|
: masque sur le type de chainage
|
|
.LP
|
|
-
|
|
.B NDD_MN_MSK
|
|
: masque sur le mode de gestion
|
|
.LP
|
|
.RS -3
|
|
.I Exemple
|
|
:
|
|
.LP
|
|
(Mon_Type &
|
|
.B NDD_DS_MSK
|
|
) renverra la valeur
|
|
.B NDD_DS_LIST
|
|
ou
|
|
.B NDD_DS_TREE
|
|
.
|
|
.LP
|
|
(Mon_Type &
|
|
.B NDD_MN_MSK
|
|
) renverra l'une des valeurs
|
|
.B NDD_MN_FILO
|
|
,
|
|
.B NDD_MN_FIFO
|
|
,
|
|
.B NDD_MN_ORDERED
|
|
ou
|
|
.B NDD_MN_AUTO_EQU
|
|
.
|
|
.LP
|
|
.RS -3
|
|
.BI NDT_Node
|
|
.LP
|
|
.RS 3
|
|
Designe le type d'un noeud
|
|
.LP
|
|
Il s'agit d'une structure qui permet aux noeuds d'etre relies les uns aux autres :
|
|
.LP
|
|
.RS 3
|
|
- pointeur sur le noeud droite (
|
|
.B Right
|
|
)
|
|
.LP
|
|
- pointeur sur le noeud gauche (
|
|
.B Left
|
|
)
|
|
.RS -3
|
|
.LP
|
|
Pour une structure de type arbre, chaque noeud pointe aussi sur son noeud pere (
|
|
.B Parent
|
|
).
|
|
Chaque noeud possede enfin un pointeur sur sa structure racine (
|
|
.B Root
|
|
).
|
|
.LP
|
|
A chaque noeud sera associee une valeur dont l'utilisateur de la librairie devra lui meme definir le type.
|
|
.RS -3
|
|
.LP
|
|
.BI NDT_Value
|
|
.LP
|
|
.RS 3
|
|
Designe le type d'une valeur attachee a un noeud. Ce type sera surcharge par celui defini par l'utilisateur.
|
|
.LP
|
|
.RS -3
|
|
.BI NDT_Manager
|
|
.LP
|
|
.RS 3
|
|
Designe le type d'une fonction manager.
|
|
.LP
|
|
Une fonction manager est attachee a la racine de la structure via son nom et permet d'executer des commandes (voir
|
|
.B NDT_Command
|
|
) specifiques sur la structure ou sur ses valeurs.
|
|
.LP
|
|
L'implementation des ces commandes est a definir par l'utilisateur lui-meme.
|
|
.LP
|
|
Le premier argument d'une fonction manager correspond toujours au type de la commande a executer.
|
|
.LP
|
|
Les autres arguments dependent bien evidemment de la commande a executer.
|
|
.LP
|
|
Une fonction manager doit etre executee via la fonction
|
|
.B NDT_Manager_Exec
|
|
(voir FONCTIONS).
|
|
.LP
|
|
.RS -3
|
|
.BI NDT_Command
|
|
.LP
|
|
.RS 3
|
|
Designe le type d'une commande pouvant etre executee par le manager :
|
|
.RS 3
|
|
.LP
|
|
-
|
|
.B NDD_CMD_COMP_VALUE
|
|
: comparaison de valeurs
|
|
.LP
|
|
-
|
|
.B NDD_CMD_MAKE_VALUE
|
|
: creation de valeur
|
|
.LP
|
|
-
|
|
.B NDD_CMD_PRINT_VALUE
|
|
: affichage de valeur
|
|
.LP
|
|
-
|
|
.B NDD_CMD_DELETE_VALUE
|
|
: suppression de valeur
|
|
.LP
|
|
-
|
|
.B NDD_CMD_PRINT_INFO
|
|
: affichage des informations de la racine
|
|
.RS -3
|
|
.LP
|
|
.I NB
|
|
Toutes ces commandes ne doivent pas necessairement etre implementees par l'utilisateur. A priori, seule la commande permettant de detruire une valeur est obligatoire.
|
|
De nouvelles commandes pourront aussi etre definies par l'utilisateur, sous reserve qu'elles soient implementee par la fonction manager.
|
|
.RS -3
|
|
.LP
|
|
.BI NDT_Allocator
|
|
.LP
|
|
.RS 3
|
|
Designe le type d'une fonction d'allocation memoire.
|
|
.LP
|
|
Une fonction d'allocation est attachee a la racine de la structure par son nom et permet de d'allouer de la memoire pour le stockage de la structure (racine et noeuds).
|
|
.LP
|
|
Par defaut, une structure de donnees definira la fonction malloc() comme fonction d'allocation.
|
|
.LP
|
|
.I NB
|
|
: une fonction d'allocation devra etre executee via la fonction
|
|
.B NDT_Allocator_Exec
|
|
(voir FONCTIONS).
|
|
.LP
|
|
.RS -3
|
|
.BI NDT_Desallocator
|
|
.LP
|
|
.RS 3
|
|
Designe le type d'une fonction de desallocation memoire.
|
|
.LP
|
|
Une fonction de desallocation est attachee a la racine de la structure par son nom et permet de liberer la memoire allouee pour le stockage de la structure.
|
|
.LP
|
|
Par defaut, une structure de donnees definira la fonction free() comme fonction de desallocation.
|
|
.LP
|
|
.I NB
|
|
: une fonction de desallocation devra etre executee via la fonction
|
|
.B NDT_Desallocator_Exec
|
|
(voir FONCTIONS).
|
|
.LP
|
|
.RS -3
|
|
.SH FONCTIONS
|
|
.BI "ND_Library_Open ( int " Debug_Mode " )"
|
|
.RS 3
|
|
.LP
|
|
Cette fonction permet d'initialiser les eventuelles ressources de la librairie.
|
|
Elle doit etre systematiquement appelee au debut de chaque programme utilisant la librairie.
|
|
.LP
|
|
L'argument
|
|
.I Debug_Mode
|
|
(TRUE ou FALSE) permet d'utiliser la librairie en mode bavard ou non, ce qui sigifie que tous les messages d'erreur seront affiches par defaut sur la sortie standard.
|
|
.LP
|
|
.RS -3
|
|
.BI "ND_Library_Close ( void )"
|
|
.RS 3
|
|
.LP
|
|
Cette fonction permet de fermer les eventuelles ressources de la librairie.
|
|
Elle doit etre systematiquement appelee a la fin de chaque programme utilisant la librairie.
|
|
.LP
|
|
.RS -3
|
|
.BI "NDT_Status ND_Library_Stderr_Set ( FILE * " Out " );"
|
|
.LP
|
|
.RS 3
|
|
Cette fonction permet de definir
|
|
.I Out
|
|
comme la sortie standard des messages d'erreur de la librarie.
|
|
.RS -3
|
|
.LP
|
|
.BI "NDT_Status ND_DataStruct_Open ( NDT_Root ** " Root ", NDT_DataStruct_Type " Type ", const char * " Allocator ", const char * " Desallocator ", void * " User " , int " Own_Value " );"
|
|
.RS 3
|
|
.LP
|
|
Cette fonction permet de creer une structure de donnees.
|
|
.LP
|
|
Elle doit recevoir les arguments suivants :
|
|
.LP
|
|
.RS 3
|
|
* (Out)
|
|
.I Root
|
|
: l'adresse du pointeur sur la racine de la nouvelle structure de donnees
|
|
.LP
|
|
* (In)
|
|
.I Type
|
|
: le type de la nouvelle structure de donnees
|
|
.LP
|
|
* (In)
|
|
.I Allocator
|
|
: le nom de la fonction d'allocation memoire (fonction de type
|
|
.B NDT_Allocator
|
|
) associee a la nouvelle structure de donnees.
|
|
Si cet argument est positionne a NULL, alors la fonction d'allocation locale malloc() sera utilisee par defaut.
|
|
.LP
|
|
* (In)
|
|
.I Desallocator
|
|
: le nom de la fonction de desallocation memoire (fonction de type
|
|
.B NDT_Desallocator
|
|
) associee a la nouvelle structure de donnees.
|
|
Si cet argument est positionne a NULL, alors la fonction de desallocation locale free() sera utilisee par defaut.
|
|
.LP
|
|
* (In)
|
|
.I User
|
|
: un pointeur de donnees qui sera systematiquement passe au manager pour l'allocation et la desallocation.
|
|
.LP
|
|
* (In)
|
|
.I Own_Value
|
|
: valeur TRUE ou FALSE indiquant si la structure est proprietaire de ses valeurs.
|
|
.LP
|
|
.I NB
|
|
: si une structure est proprietaire de ses valeurs, alors sa destruction provoque aussi la desallocation des valeurs rattachees a ses noeuds
|
|
.LP
|
|
.RS -3
|
|
.RS -3
|
|
.BI "NDT_Status ND_DataStruct_Close ( NDT_Root * " Root " );"
|
|
.RS 3
|
|
.LP
|
|
Cette fonction permet de detruire une structure de donnees (desallocation des ressources).
|
|
.LP
|
|
L'argument
|
|
.I Root
|
|
est un pointeur sur la racine de la structure de donnees a detruire.
|
|
.LP
|
|
.I NB
|
|
: les valeurs de la structure seront desallouees en meme temps que leur noeud selon que la structure est proprietaire ou non de ses valeurs.
|
|
.LP
|
|
.RS -3
|
|
.BI "NDT_Status ND_DataStruct_Reorg ( NDT_Root * " Root " );"
|
|
.RS 3
|
|
.LP
|
|
Cette fonction permet de reorganiser les donnees d'une structure (tri pour une liste, reequilibrage pour un arbre).
|
|
.LP
|
|
L'argument
|
|
.I Root
|
|
est un pointeur sur la racine de la structure de donnees a reorganiser.
|
|
.LP
|
|
.RS -3
|
|
.BI "NDT_Status ND_DataStruct_Traverse ( NDT_Root * " Root ", NDT_Command, void * " Command ", void * " Data " );"
|
|
.RS 3
|
|
.LP
|
|
Cette fonction permet de parcourir tous les noeuds d'une structure de donnees avec execution d'une commande sur chacun d'eux.
|
|
.LP
|
|
Elle doit recevoir les arguments suivants :
|
|
.LP
|
|
.RS 3
|
|
* (In)
|
|
.I Root
|
|
: un pointeur sur la racine de la structure de donnees a parcourir.
|
|
.LP
|
|
* (In)
|
|
.I Command
|
|
: la commande a executer sur chaque noeud traverse
|
|
.LP
|
|
* (In)
|
|
.I Data
|
|
: un pointeur de donnees propre a la commande
|
|
.RS -3
|
|
.LP
|
|
.RS -3
|
|
.BI "NDT_Status ND_DataStruct_Convert ( NDT_Root * " Root ", ND_Conversion_Type " Target_Type " );"
|
|
.RS 3
|
|
.LP
|
|
Cette fonction permet de convertir une structure de donnees d'un type en un autre.
|
|
.LP
|
|
Elle doit recevoir les arguments suivants :
|
|
.LP
|
|
.RS 3
|
|
* (In)
|
|
.I Root
|
|
: un pointeur sur la racine de la structure de donnees a convertir.
|
|
.LP
|
|
* (In)
|
|
.I Target_Type
|
|
: le type cible de la structure
|
|
.LP
|
|
.RS -3
|
|
.RS -3
|
|
.BI "NDT_Status ND_DataStruct_Print ( NDT_Root * " Root ", FILE * " Out " );"
|
|
.LP
|
|
.RS 3
|
|
Cette fonction permet d'afficher toutes les valeurs des noeuds d'une structure de donnees.
|
|
.LP
|
|
Elle doit recevoir les arguments suivants :
|
|
.LP
|
|
.RS 3
|
|
* (In)
|
|
.I Root
|
|
: un pointeur sur la racine de la structure de donnees a afficher.
|
|
.LP
|
|
* (In)
|
|
.I Out
|
|
: un pointeur sur le flux de sortie
|
|
.RS -3
|
|
.LP
|
|
.RS -3
|
|
.BI "NDT_Status ND_DataStruct_Info_Print ( NDT_Root * " Root ", FILE * " Out " );"
|
|
.LP
|
|
.RS 3
|
|
Cette fonction permet d'afficher des informations concernant une structure de donnees.
|
|
.LP
|
|
Elle doit recevoir les arguments suivants :
|
|
.LP
|
|
.RS 3
|
|
* (In)
|
|
.I Root
|
|
: un pointeur sur la racine de la structure de donnees
|
|
.LP
|
|
* (In)
|
|
.I Out
|
|
: un pointeur sur le flux de sortie
|
|
.RS -3
|
|
.LP
|
|
.RS -3
|
|
.BI "NDT_Status ND_DataStruct_Check ( NDT_Root * " Root ", int * " Nb_Detected ", int * " Nb_Corrected " ,FILE * " Out " );"
|
|
.LP
|
|
.RS 3
|
|
Cette fonction permet de verifier et de corriger des incoherences contenues dans une structure de donnees.
|
|
Elle verifie notamment les liens entre les noeuds, supprime les noeuds sans valeur ou ceux dont les valeurs ne sont pas accessibles et met a jour les informations statistiques de la racine.
|
|
Un rapport de toutes les erreurs detectees ou corrigees est affiche.
|
|
.LP
|
|
Elle doit recevoir les arguments suivants :
|
|
.LP
|
|
.RS 3
|
|
* (In)
|
|
.I Root
|
|
: un pointeur sur la racine de la structure de donnees a verifier.
|
|
.LP
|
|
* (Out)
|
|
.I Nb_Detected
|
|
: un pointeur sur le nombre d'erreurs detectees
|
|
.LP
|
|
* (Out)
|
|
.I Nb_Corrected
|
|
: un pointeur sur le nombre d'erreurs corrigees
|
|
.LP
|
|
* (In)
|
|
.I Out
|
|
: un pointeur sur le flux de sortie du rapport
|
|
.RS -3
|
|
.LP
|
|
.RS -3
|
|
.BI "NDT_Status ND_DataStruct_Dump ( NDT_Root * " Root ", FILE * " Out " );"
|
|
.LP
|
|
.RS 3
|
|
Cette fonction permet d'afficher toutes les informations de la structure (racine et contenu).
|
|
.LP
|
|
Elle doit recevoir les arguments suivants :
|
|
.LP
|
|
.RS 3
|
|
* (In)
|
|
.I Root
|
|
: un pointeur sur la racine de la structure de donnees a afficher.
|
|
.LP
|
|
* (In)
|
|
.I Out
|
|
: un pointeur sur le flux de sortie
|
|
.RS -3
|
|
.LP
|
|
.I NB
|
|
: cette fonction a ete implementee dans une optique de deboggage.
|
|
.LP
|
|
.RS -3
|
|
.BI "NDT_Status ND_Node_Root_Get ( NDT_Root ** " Root ", NDT_Node * " Node " );"
|
|
.LP
|
|
.RS 3
|
|
Cette fonction permet de recuperer la racine d'une structure a partir d'un de ses noeuds.
|
|
.LP
|
|
Elle doit recevoir les arguments suivants :
|
|
.LP
|
|
.RS 3
|
|
* (Out)
|
|
.I Root
|
|
: l'adresse d'un pointeur sur la racine a recuperer
|
|
.LP
|
|
* (In)
|
|
.I Node
|
|
: un pointeur sur un noeud
|
|
.RS -3
|
|
.LP
|
|
.RS -3
|
|
.BI "NDT_Status ND_Node_First_Get ( NDT_Root * " Root ", NDT_Node ** " Node " );"
|
|
.LP
|
|
.RS 3
|
|
Cette fonction permet de recuperer le premier noeud d'une structure.
|
|
.LP
|
|
Elle doit recevoir les arguments suivants :
|
|
.LP
|
|
.RS 3
|
|
* (In)
|
|
.I Root
|
|
: un pointeur sur la racine de la structure
|
|
.LP
|
|
* (Out)
|
|
.I Node
|
|
: l'adresse d'un pointeur sur le premier noeud a recuperer
|
|
.RS -3
|
|
.LP
|
|
.RS -3
|
|
.BI "NDT_Status ND_Node_Last_Get ( NDT_Root * " Root ", NDT_Node ** " Node " );"
|
|
.LP
|
|
.RS 3
|
|
Cette fonction permet de recuperer le dernier noeud d'une structure.
|
|
.LP
|
|
Elle doit recevoir les arguments suivants :
|
|
.LP
|
|
.RS 3
|
|
* (In)
|
|
.I Root
|
|
: un pointeur sur la racine de la structure
|
|
.LP
|
|
* (Out)
|
|
.I Node
|
|
: un pointeur sur le dernier noeud a recuperer
|
|
.RS -3
|
|
.LP
|
|
.RS -3
|
|
.BI "NDT_Status ND_Node_Next_Get ( NDT_Node * " Node ", NDT_Node ** " Next_Node " );"
|
|
.LP
|
|
.RS 3
|
|
Cette fonction permet de recuperer le noeud qui suit immediatement un noeud particulier.
|
|
.LP
|
|
Elle doit recevoir les arguments suivants :
|
|
.LP
|
|
.RS 3
|
|
* (In)
|
|
.I Node
|
|
: un pointeur sur le noeud de reference
|
|
.LP
|
|
* (Out)
|
|
.I Next_Node
|
|
: l'adresse d'un pointeur sur le noeud qui suit le noeud de reference
|
|
.RS -3
|
|
.LP
|
|
.RS -3
|
|
.BI "NDT_Status ND_Node_Previous_Get ( NDT_Node * " Node ", NDT_Node ** " Prev_Node " );"
|
|
.LP
|
|
.RS 3
|
|
Cette fonction permet de recuperer le noeud qui precede immediatement un noeud particulier.
|
|
.LP
|
|
Elle doit recevoir les arguments suivants :
|
|
.LP
|
|
.RS 3
|
|
* (In)
|
|
.I Node
|
|
: un pointeur sur le noeud de reference
|
|
.LP
|
|
* (Out)
|
|
.I Prev_Node
|
|
: l'adresse d'un pointeur sur le noeud qui precede le noeud de reference
|
|
.RS -3
|
|
.LP
|
|
.RS -3
|
|
.BI "NDT_Status ND_Node_Add ( NDT_Root * " Root ", NDT_Node * " Node " );"
|
|
.LP
|
|
.RS 3
|
|
Cette fonction permet d'ajouter un noeud a une structure.
|
|
.LP
|
|
Elle doit recevoir les arguments suivants :
|
|
.LP
|
|
.RS 3
|
|
* (In)
|
|
.I Root
|
|
: un pointeur sur la racine de la structure de donnees
|
|
.LP
|
|
* (In)
|
|
.I Node
|
|
: un pointeur sur le noeud a ajouter
|
|
.RS -3
|
|
.LP
|
|
.RS -3
|
|
.BI "NDT_Status ND_Node_Remove ( NDT_Node * " Node " );"
|
|
.RS 3
|
|
.LP
|
|
Cette fonction permet de supprimer le noeud d'une structure de donnees.
|
|
.LP
|
|
L'argument
|
|
.I Node
|
|
est un pointeur sur le noeud a supprimer
|
|
.LP
|
|
.I NB
|
|
: le noeud supprime n'est pas detruit mais simplement detache de la structure
|
|
.LP
|
|
.RS -3
|
|
.BI "NDT_Status ND_Node_Find ( NDT_Root * " Root ", NDT_Node ** " Node ", void * " Value " , void * " Data " );"
|
|
.LP
|
|
.RS 3
|
|
Cette fonction permet de rechercher dans une structure de donnees le premier noeud correspondant a une valeur.
|
|
.LP
|
|
Elle doit recevoir les arguments suivants :
|
|
.LP
|
|
.RS 3
|
|
* (In)
|
|
.I Root
|
|
: un pointeur sur la racine de la structure de donnees
|
|
.LP
|
|
* (Out)
|
|
.I Node
|
|
: l'adresse d'un pointeur sur le noeud resultat
|
|
.LP
|
|
* (In)
|
|
.I Value
|
|
: un pointeur sur la valeur a rechercher
|
|
.LP
|
|
* (In)
|
|
.I Data
|
|
: un pointeur de donnees qui sera passe a la fonction manager pour la recherche
|
|
.RS -3
|
|
.LP
|
|
.RS -3
|
|
.LP
|
|
.BI "NDT_Status ND_Value_Alloc ( NDT_Root * " Root ", void ** " Value ", ... );"
|
|
.LP
|
|
.RS 3
|
|
Cette fonction permet d'allouer une valeur pour une structure de donnees.
|
|
.LP
|
|
Elle doit recevoir les arguments suivants :
|
|
.LP
|
|
.RS 3
|
|
* (In)
|
|
.I Root
|
|
: un pointeur sur la racine de la structure de donnees
|
|
.LP
|
|
* (Out)
|
|
.I Value
|
|
: l'adresse d'un pointeur sur la valeur a allouer
|
|
.LP
|
|
* (In)
|
|
.I ...
|
|
: des arguments supplementaires pour l'allocation de la valeur
|
|
.RS -3
|
|
.LP
|
|
.RS -3
|
|
.BI "NDT_Status ND_Value_Add ( NDT_Root * " Root ", void * " Value " );"
|
|
.LP
|
|
.RS 3
|
|
Cette fonction permet d'ajouter une valeur a une structure de donnees.
|
|
.LP
|
|
Elle doit recevoir les arguments suivants :
|
|
.LP
|
|
.RS 3
|
|
* (In)
|
|
.I Root
|
|
: un pointeur sur la racine de la structure de donnees
|
|
.LP
|
|
* (In)
|
|
.I Value
|
|
: un pointeur sur la valeur a ajouter
|
|
.RS -3
|
|
.LP
|
|
.RS -3
|
|
.BI "NDT_Status ND_Value_Remove ( NDT_Root * " Root ", void * " Reference_Value " , void ** " Removed_Value " );"
|
|
.RS 3
|
|
.LP
|
|
Cette fonction permet de supprimer le premier noeud correspondant a une valeur.
|
|
.LP
|
|
Elle doit recevoir les arguments suivants :
|
|
.RS 3
|
|
.LP
|
|
* (In)
|
|
.I Root
|
|
: un pointeur sur la racine de la structure de donnees
|
|
.LP
|
|
* (In)
|
|
.I Reference_Value
|
|
: un pointeur sur la valeur de reference
|
|
.LP
|
|
* (Out)
|
|
.I Removed_Value
|
|
: l'adresse d'un pointeur sur la valeur du noeud supprime
|
|
.LP
|
|
.RS -3
|
|
.I NB
|
|
: la suppression d'un noeud implique son retrait de la structure et sa desallocation.
|
|
.LP
|
|
Si la structure contient plusieurs fois la valeur, seul le premier noeud correspondant a cette valeur est detruit.
|
|
.LP
|
|
.RS -3
|
|
.BI "NDT_Status ND_Value_Free ( NDT_Root * " Root ", void * " Value " );"
|
|
.LP
|
|
.RS 3
|
|
Cette fonction permet de desallouer une valeur faisant partie d'une structure de donnees.
|
|
.LP
|
|
Elle doit recevoir les arguments suivants :
|
|
.LP
|
|
.RS 3
|
|
* (In)
|
|
.I Root
|
|
: un pointeur sur la racine de la structure de donnees
|
|
.LP
|
|
* (In)
|
|
.I Value
|
|
: un pointeur sur la valeur a desallouer
|
|
.RS -3
|
|
.LP
|
|
.RS -3
|
|
.BI "NDT_Status ND_Manager_Exec (const char * " Function_Name ", ...)"
|
|
.LP
|
|
.RS 3
|
|
Cette fonction permet d'executer une fonction manager a partir de son nom.
|
|
.LP
|
|
L'argument
|
|
.I Function_Name
|
|
est le nom de la fonction manager (fonction de type
|
|
.B NDT_Manager
|
|
), suivi de tous les arguments contextuels necessaires a son execution.
|
|
.LP
|
|
.RS -3
|
|
.BI "NDT_Status ND_Allocator_Exec (const char * " Function_Name ", void ** " Ptr ", size_t " Size ", void * " Data " );"
|
|
.LP
|
|
.RS 3
|
|
Cette fonction permet d'executer une fonction d'allocation a partir de son nom.
|
|
.LP
|
|
Elle doit recevoir les arguments suivants :
|
|
.RS 3
|
|
.LP
|
|
* (In)
|
|
.I Function_Name
|
|
: le nom de la fonction d'allocation (fonction de type
|
|
.B NDT_Allocator
|
|
)
|
|
.LP
|
|
* (Out)
|
|
.I Ptr
|
|
: l'adresse d'un pointeur sur la zone a allouer
|
|
.LP
|
|
* (In)
|
|
.I Size
|
|
: la taille a allouer
|
|
.LP
|
|
* (In)
|
|
.I Data
|
|
: un pointeur de donneees utile a la fonction d'allocation
|
|
.RS -3
|
|
.LP
|
|
.RS -3
|
|
.BI "NDT_Status ND_Desallocator_Exec (const char * " Function_Name ", void * " Ptr ", void * " Data " );"
|
|
.LP
|
|
.RS 3
|
|
Cette fonction permet d'executer une fonction de desallocation a partir de son nom.
|
|
.LP
|
|
Elle doit recevoir les arguments suivants :
|
|
.RS 3
|
|
.LP
|
|
* (In)
|
|
.I Function_Name
|
|
: le nom de la fonction de desallocation (fonction de type
|
|
.B NDT_Desallocator
|
|
)
|
|
.LP
|
|
* (In)
|
|
.I Ptr
|
|
: l'adresse de la zone memoire a desallouer
|
|
.LP
|
|
* (In)
|
|
.I Data
|
|
: un pointeur de donneees utile a la fonction de desallocation
|
|
.RS -3
|
|
.LP
|
|
.RS -3
|
|
.SH CODES RETOUR
|
|
.LP
|
|
Toutes les fonctions constituant l'API de la librairie LIBND retournent un code de type
|
|
.B NDT_Status
|
|
:
|
|
.LP
|
|
.RS 3
|
|
-
|
|
.B NDS_OK
|
|
: la fonction s'est correctement executee et a produit un resultat
|
|
.LP
|
|
-
|
|
.B NDS_KO
|
|
: la fonction s'est correctement executee mais n'a pas produit de resultat
|
|
.LP
|
|
-
|
|
.B NDS_ERRAPI
|
|
: la fonction a ete appelee avec des arguments de valeur incorrecte
|
|
.LP
|
|
-
|
|
.B NDS_ERRMEM
|
|
: la fonction ne s'est pas correctement executee pour un probleme d'allocation memoire
|
|
.RS -3
|
|
.LP
|
|
La macro
|
|
.B ND_ERROR(rc)
|
|
permet de tester si un code retour correspond a une erreur.
|
|
.LP
|
|
En cas d'erreur, la variable ND_Error_Msg contient un message du type :
|
|
.LP
|
|
.RS 3
|
|
Error <Nom fonction> : <message d'erreur>
|
|
.RS -3
|
|
.LP
|
|
Lorsque le manager est appele avec la commande
|
|
.B NDD_CMD_COMP_VALUE
|
|
(comparaison de valeurs), l'une des trois valeurs suivantes est retournee :
|
|
.RS 3
|
|
.LP
|
|
-
|
|
.B NDS_EQUAL
|
|
.LP
|
|
-
|
|
.B NDS_LOWER
|
|
.LP
|
|
-
|
|
.B NDS_GREATER
|
|
.LP
|
|
.RS -3
|
|
.LP
|
|
.SH VOIR AUSSI
|
|
.B libdatastr
|
|
(3)
|