libnode/doc/man3/libnode.3

948 lines
23 KiB
Groff
Raw Permalink Normal View History

'\" 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 * " Deallocator ", 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_Deallocator_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 Deallocator
: 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_Deallocator
.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_Deallocator_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 * " Deallocator ", 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 Deallocator
: le nom de la fonction de desallocation memoire (fonction de type
.B NDT_Deallocator
) 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_Deallocator_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_Deallocator
)
.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)