From ed0f5062df2c649283e5bd1cdcc5d4a7f1d5cbf5 Mon Sep 17 00:00:00 2001 From: "Arnaud G. GIBERT" Date: Mon, 22 Apr 2024 00:24:37 +0200 Subject: [PATCH] - Fix Makefiles, - Comment out all functions exept DS_Library_Open , DS_Library_Close & DS_DataStruct_Open_I, and start to work on it! --- include/datastr.h | 723 ++++++++++++---------- lib/Makefile | 12 +- lib/libdatastr.c | 1492 ++++++++++++++++++++++++--------------------- lib/libdatastr.h | 90 ++- util/Makefile | 12 +- 5 files changed, 1297 insertions(+), 1032 deletions(-) diff --git a/include/datastr.h b/include/datastr.h index 453a344..362bcfe 100644 --- a/include/datastr.h +++ b/include/datastr.h @@ -1,8 +1,36 @@ +/*----------------------------------------------------------------------------*/ +/* datastr.h */ +/*----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------*/ +/* This file is part of LibDataStr. */ +/* */ +/* LibDataStr is free software: you can redistribute it and/or modify it */ +/* under the terms of the GNU Lesser General Public License as published */ +/* by the Free Software Foundation, either version 3 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* LibDataStr is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU Lesser General Public License for more details. */ +/* */ +/* You should have received a copy of the GNU Lesser General Public */ +/* License along with LibDataStr. If not, see */ +/* . */ +/*----------------------------------------------------------------------------*/ + + + +/*----------------------------------------------------------------------------*/ +/* Includes */ +/*----------------------------------------------------------------------------*/ + #ifndef _LIBDATASTR #define _LIBDATASTR #ifdef __cplusplus -extern "C" { +//extern "C" { #endif #include @@ -25,49 +53,57 @@ typedef long DST_Status; #define DS_ERROR(s) ((s) < 0) /* Tous les codes retour négatifs correspondent à des erreurs */ + + /* Indicateurs */ typedef int DST_Flags; #define DSD_UNDEF 0 + + /* Flags d'ouverture d'une data structure */ #define DSD_OPEN SMD_OPEN /* autorise l'ouverture d'une structure existante */ #define DSD_CREATE SMD_CREATE /* autorise la création de la structure */ #define DSD_NEW ~(DSD_OPEN|DSD_CREATE) /* crée une autre structure dans un heap existant */ + + /* Flags de debug sur l'ouverture de la librairie */ #define DSD_DEBUG_NONE 0 /* pour n'afficher aucun message généré par les diverses librairies */ #define DSD_DEBUG 1 /* pour afficher les messages générés par la librairie */ #define DSD_DEBUG_ALL 2 /* pour afficher les messages générés par toutes les librairies sous-jacentes */ -/*------------------------------------------------------------------------------*/ -/* Utilisations possibles des flags d'ouverture */ -/*------------------------------------------------------------------------------*/ -/* */ -/* DSD_OPEN */ -/* -> ouvrir une structure existante */ -/* -> ne pas la créer si elle n'existe pas */ -/* */ -/* DSD_OPEN | DSD_CREATE */ -/* -> ouvrir une structure si elle existe */ -/* -> la créer si elle n'existe pas */ -/* */ -/* DSD_CREATE */ -/* -> créer une structure */ -/* -> ne pas l'ouvrir si elle existe déjà */ -/* */ -/* DSD_CREATE | DSD_NEW */ -/* -> créer la structure si elle n'existe pas */ -/* -> créer une autre structure dans le même heap si elle existe déjà */ -/* */ -/* DSD_NEW */ -/* -> créer une autre structure dans le même heap si elle existe déjà */ -/* -> ne pas la créer si elle n'existe pas */ -/* */ -/*------------------------------------------------------------------------------*/ + + +/*----------------------------------------------------------------------------*/ +/* Utilisations possibles des flags d'ouverture */ +/*----------------------------------------------------------------------------*/ +/* */ +/* DSD_OPEN */ +/* -> ouvrir une structure existante */ +/* -> ne pas la créer si elle n'existe pas */ +/* */ +/* DSD_OPEN | DSD_CREATE */ +/* -> ouvrir une structure si elle existe */ +/* -> la créer si elle n'existe pas */ +/* */ +/* DSD_CREATE */ +/* -> créer une structure */ +/* -> ne pas l'ouvrir si elle existe déjà */ +/* */ +/* DSD_CREATE | DSD_NEW */ +/* -> créer la structure si elle n'existe pas */ +/* -> créer une autre structure dans le même heap si elle existe déjà */ +/* */ +/* DSD_NEW */ +/* -> créer une autre structure dans le même heap si elle existe déjà */ +/* -> ne pas la créer si elle n'existe pas */ +/* */ +/*----------------------------------------------------------------------------*/ /* Flags de verrouillage d'une data structure */ @@ -224,316 +260,387 @@ char DS_Error_Msg [512]; #endif -/*------------------------------------------------------------------------------*/ -/* Ouverture d'une instance de la librairie */ -/*------------------------------------------------------------------------------*/ -/* (I) Instance : numéro de l'instance de la librairie */ -/* (I) Context : nom du contexte */ -/* (I) Debug_Mode : mode d'affichage des messages d'erreur */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_Library_Open_I ( int Instance, const char * Context, \ - DST_Flags Debug_Mode ); -DST_Status DS_Library_Open_L ( int Instance, const char * Context, \ - DST_Flags Debug_Mode ); -DST_Status DS_Library_Open_CL ( int Instance, const char * Context, \ - DST_Flags Debug_Mode ); -/*------------------------------------------------------------------------------*/ -/* Fermeture de l'instance de la librairie */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_Library_Close_I ( void ); -DST_Status DS_Library_Close_L ( void ); -DST_Status DS_Library_Close_CL ( void ); -/*------------------------------------------------------------------------------*/ -/* Définition de la sortie standard des messages d'erreur de la librairie */ -/*------------------------------------------------------------------------------*/ -/* (I) Out : flux de sortie des messages d'erreur */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_Library_Stderr_Set_I ( FILE * Out ); -DST_Status DS_Library_Stderr_Set_L ( FILE * Out ); -DST_Status DS_Library_Stderr_Set_CL ( FILE * Out ); +/*----------------------------------------------------------------------------*/ +/* DSD_API definition */ +/*----------------------------------------------------------------------------*/ -/*------------------------------------------------------------------------------*/ -/* Création / ouverture d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) DS_Name : nom de la structure */ -/* (O) Root : adresse du pointeur sur la racine de la structure */ -/* (I) Type : type de la structure de données */ -/* (I) Manager_FileName : nom du fichier qui définit les fonctions manager */ -/* (I) Segment_Size : taille ds segments du heap sous-jacent */ -/* (I) Open_Mode : mode d'ouverture de la structure */ -/* (I) Own_Value : indique si la structure possède ses valeurs */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_DataStruct_Open_I ( const char * DS_Name, NDT_Root ** Root,\ - NDT_DataStruct_Type Type, const char * Manager_FileName, \ - size_t Segment_Size, DST_Flags Open_Mode, int Own_Value ); -DST_Status DS_DataStruct_Open_L ( const char * DS_Name, NDT_Root ** Root,\ - NDT_DataStruct_Type Type, const char * Manager_FileName, \ - size_t Segment_Size, DST_Flags Open_Mode, int Own_Value ); -DST_Status DS_DataStruct_Open_CL ( const char * DS_Name, NDT_Root ** Root,\ - NDT_DataStruct_Type Type, const char * Manager_FileName, \ - size_t Segment_Size, DST_Flags Open_Mode, int Own_Value ); +# ifdef _LIBDATASTR_C_ +# define DSD_API +# else +# define DSD_API extern +# endif -/*------------------------------------------------------------------------------*/ -/* Verrouillage d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure */ -/* (I) Lock_Mode : type de verrou à poser sur la structure */ -/* (O) Locked : verrou effectif (TRUE ou FALSE) */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_DataStruct_Lock_I ( NDT_Root * Root, DST_Flags Lock_Mode, \ - int * Locked ); -DST_Status DS_DataStruct_Lock_L ( NDT_Root * Root, DST_Flags Lock_Mode, \ - int * Locked ); -DST_Status DS_DataStruct_Lock_CL ( NDT_Root * Root, DST_Flags Lock_Mode, \ - int * Locked ); -/*------------------------------------------------------------------------------*/ -/* Déverrouillage d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_DataStruct_Unlock_I ( NDT_Root * Root ); -DST_Status DS_DataStruct_Unlock_L ( NDT_Root * Root ); -DST_Status DS_DataStruct_Unlock_CL ( NDT_Root * Root ); -/*------------------------------------------------------------------------------*/ -/* Fermeture d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Close_Mode : mode de fermeture de la structure (destruction ou non) */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_DataStruct_Close_I ( NDT_Root * Root, DST_Flags Close_Mode ); -DST_Status DS_DataStruct_Close_L ( NDT_Root * Root, DST_Flags Close_Mode ); -DST_Status DS_DataStruct_Close_CL ( NDT_Root * Root, DST_Flags Close_Mode ); +/*----------------------------------------------------------------------------*/ +/* Ouverture d'une instance de la librairie */ +/*----------------------------------------------------------------------------*/ +/* (I) Instance : numéro de l'instance de la librairie */ +/* (I) Context : nom du contexte */ +/* (I) Debug_Mode : mode d'affichage des messages d'erreur */ +/*----------------------------------------------------------------------------*/ -/*------------------------------------------------------------------------------*/ -/* Affiche les informations d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root: pointeur sur la racine de la structure de données */ -/* (I) Out : flux de sortie de l'affichage */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_DataStruct_Info_Print_I ( NDT_Root * Root, FILE * Out ); -DST_Status DS_DataStruct_Info_Print_L ( NDT_Root * Root, FILE * Out ); -DST_Status DS_DataStruct_Info_Print_CL ( NDT_Root * Root, FILE * Out ); +DSD_API DST_Status DS_Library_Open_I( int Instance, const char *Context, DST_Flags Debug_Mode); +DSD_API DST_Status DS_Library_Open_L( int Instance, const char *Context, DST_Flags Debug_Mode); +DSD_API DST_Status DS_Library_Open_CL( int Instance, const char *Context, DST_Flags Debug_Mode); -/*------------------------------------------------------------------------------*/ -/* Réorganisation d'une structure de données : */ -/* - ordonnancement d'une liste non ordonnée */ -/* - réquilibrage d'un arbre non auto-équilibré */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_DataStruct_Reorg_I ( NDT_Root * Root ); -DST_Status DS_DataStruct_Reorg_L ( NDT_Root * Root ); -DST_Status DS_DataStruct_Reorg_CL ( NDT_Root * Root ); -/*------------------------------------------------------------------------------*/ -/* Parcours de tous les noeuds d'une structure de données et exécution d'une */ -/* commande sur chacun d'eux */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Command : Commande à exécuter sur chaque noeud traversé */ -/* (I) Data : pointeur de données utilisateur */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_DataStruct_Traverse_I ( NDT_Root * Root, NDT_Command Command, \ - void * Data ); -DST_Status DS_DataStruct_Traverse_L ( NDT_Root * Root, NDT_Command Command, \ - void * Data ); -DST_Status DS_DataStruct_Traverse_CL ( NDT_Root * Root, NDT_Command Command, \ - void * Data ); -/*------------------------------------------------------------------------------*/ -/* Conversion d'une structure de données d'un type en un autre */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Target_Type : type de structure cible */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_DataStruct_Convert_I ( NDT_Root * Root, \ - NDT_DataStruct_Type Target_Type ); -DST_Status DS_DataStruct_Convert_L ( NDT_Root * Root, \ - NDT_DataStruct_Type Target_Type ); -DST_Status DS_DataStruct_Convert_CL ( NDT_Root * Root, \ - NDT_DataStruct_Type Target_Type ); +/*----------------------------------------------------------------------------*/ +/* Fermeture de l'instance de la librairie */ +/*----------------------------------------------------------------------------*/ -/*------------------------------------------------------------------------------*/ -/* Affichage de la valeur de tous les noeuds d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Out : flux de sortie */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_DataStruct_Print_I ( NDT_Root * Root, FILE * Out ); -DST_Status DS_DataStruct_Print_L ( NDT_Root * Root, FILE * Out ); -DST_Status DS_DataStruct_Print_CL ( NDT_Root * Root, FILE * Out ); +DSD_API DST_Status DS_Library_Close_I( void); +DSD_API DST_Status DS_Library_Close_L( void); +DSD_API DST_Status DS_Library_Close_CL( void); -/*------------------------------------------------------------------------------*/ -/* Fonction de vérification / réparation d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure */ -/* (O) Nb_Detected : pointeur sur le nombre d'erreurs détectées */ -/* (O) Nb_Corrected : pointeur sur le nombre d'erreurs corrigées */ -/* (I) Out : flux de sortie du rapport */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_DataStruct_Check_I ( NDT_Root * Root, int * Nb_Detected, \ - int * Nb_Corrected, FILE * Out ); -DST_Status DS_DataStruct_Check_L ( NDT_Root * Root, int * Nb_Detected, \ - int * Nb_Corrected, FILE * Out ); -DST_Status DS_DataStruct_Check_CL ( NDT_Root * Root, int * Nb_Detected, \ - int * Nb_Corrected, FILE * Out ); -/*------------------------------------------------------------------------------*/ -/* Affichage de la structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure */ -/* (I) Out : flux de sortie */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_DataStruct_Dump_I ( NDT_Root * Root, FILE * Out ); -DST_Status DS_DataStruct_Dump_L ( NDT_Root * Root, FILE * Out ); -DST_Status DS_DataStruct_Dump_CL ( NDT_Root * Root, FILE * Out ); -/*------------------------------------------------------------------------------*/ -/* Récupération du premier noeud d'une structure */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine dont on cherche le premier noeud */ -/* (O) Node : pointeur sur le noeud à récupérer */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_Node_First_Get_I ( NDT_Root * Root, NDT_Node ** Node ); -DST_Status DS_Node_First_Get_L ( NDT_Root * Root, NDT_Node ** Node ); -DST_Status DS_Node_First_Get_CL ( NDT_Root * Root, NDT_Node ** Node ); +/*----------------------------------------------------------------------------*/ +/* Définition de la sortie standard des messages d'erreur de la librairie */ +/*----------------------------------------------------------------------------*/ +/* (I) Out : flux de sortie des messages d'erreur */ +/*----------------------------------------------------------------------------*/ -/*------------------------------------------------------------------------------*/ -/* Récupération du dernier noeud d'une structure */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine dont on cherche le dernier noeud */ -/* (O) Node : pointeur sur le noeud à récupérer */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_Node_Last_Get_I ( NDT_Root * Root, NDT_Node ** Node ); -DST_Status DS_Node_Last_Get_L ( NDT_Root * Root, NDT_Node ** Node ); -DST_Status DS_Node_Last_Get_CL ( NDT_Root * Root, NDT_Node ** Node ); +DSD_API DST_Status DS_Library_Stderr_Set_I( FILE *Out); +DSD_API DST_Status DS_Library_Stderr_Set_L( FILE *Out); +DSD_API DST_Status DS_Library_Stderr_Set_CL( FILE *Out); -/*------------------------------------------------------------------------------*/ -/* Récupération du noeud suivant */ -/*------------------------------------------------------------------------------*/ -/* (I) Node : pointeur sur le noeud dont on cherche le suivant */ -/* (O) Next_Node : pointeur sur le noeud suivant */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_Node_Next_Get_I ( NDT_Node * Node, NDT_Node ** Next_Node ); -DST_Status DS_Node_Next_Get_L ( NDT_Node * Node, NDT_Node ** Next_Node ); -DST_Status DS_Node_Next_Get_CL ( NDT_Node * Node, NDT_Node ** Next_Node ); -/*------------------------------------------------------------------------------*/ -/* Récupération du noeud précédant */ -/*------------------------------------------------------------------------------*/ -/* (I) Node : pointeur sur le noeud dont on cherche le précédant */ -/* (O) Prev_Node : pointeur sur le noeud précédant */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_Node_Previous_Get_I ( NDT_Node * Node, NDT_Node ** Prev_Node ); -DST_Status DS_Node_Previous_Get_L ( NDT_Node * Node, NDT_Node ** Prev_Node ); -DST_Status DS_Node_Previous_Get_CL ( NDT_Node * Node, NDT_Node ** Prev_Node ); -/*------------------------------------------------------------------------------*/ -/* Ajout d'un noeud à une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Node : pointeur sur le noeud à ajouter */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_Node_Add_I ( NDT_Root * Root, NDT_Node * Node ); -DST_Status DS_Node_Add_L ( NDT_Root * Root, NDT_Node * Node ); -DST_Status DS_Node_Add_CL ( NDT_Root * Root, NDT_Node * Node ); +/*----------------------------------------------------------------------------*/ +/* Création / ouverture d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (O) Root : adresse du pointeur sur la racine de la structure */ +/* (I) DS_Name : nom de la structure */ +/* (I) Type : type de la structure de données */ +/* (I) Manager_FileName : nom du fichier qui définit les fonctions manager */ +/* (I) Segment_Size : taille ds segments du heap sous-jacent */ +/* (I) Open_Mode : mode d'ouverture de la structure */ +/* (I) Own_Value : indique si la structure possède ses valeurs */ +/*----------------------------------------------------------------------------*/ -/*------------------------------------------------------------------------------*/ -/* Suppression d'un noeud dans une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Node: pointeur sur le noeud à supprimer de la structure de données */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_Node_Remove_I ( NDT_Node * Node ); -DST_Status DS_Node_Remove_L ( NDT_Node * Node ); -DST_Status DS_Node_Remove_CL ( NDT_Node * Node ); +DSD_API DST_Status DS_DataStruct_Open_I( NDT_Root **Root, const char *DS_Name, NDT_Index_Nb, NDT_Index_Type *, const char * Manager_FileName, size_t Segment_Size, DST_Flags Open_Mode, int Own_Value); -/*------------------------------------------------------------------------------*/ -/* Recherche un noeud dans un arbre et retourne le pointeur sur le noeud */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de l'abre */ -/* (O) Node : adresse du pointeur sur le noeud à récuperer */ -/* (I) Value : pointeur sur la valeur à rechercher */ -/* (I) Data : pointeur de données */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_Node_Find_I ( NDT_Root * Root, NDT_Node ** Node, \ - void * Value, void * Data ); -DST_Status DS_Node_Find_L ( NDT_Root * Root, NDT_Node ** Node, \ - void * Value, void * Data ); -DST_Status DS_Node_Find_CL ( NDT_Root * Root, NDT_Node ** Node, \ - void * Value, void * Data ); +/* +DSD_API DST_Status DS_DataStruct_Open_I( const char *DS_Name, NDT_Root **Root, NDT_DataStruct_Type Type, const char * Manager_FileName, size_t Segment_Size, DST_Flags Open_Mode, int Own_Value); +DSD_API DST_Status DS_DataStruct_Open_L( const char *DS_Name, NDT_Root **Root, NDT_DataStruct_Type Type, const char * Manager_FileName, size_t Segment_Size, DST_Flags Open_Mode, int Own_Value); +DSD_API DST_Status DS_DataStruct_Open_CL( const char *DS_Name, NDT_Root **Root, NDT_DataStruct_Type Type, const char * Manager_FileName, size_t Segment_Size, DST_Flags Open_Mode, int Own_Value); -/*------------------------------------------------------------------------------*/ -/* Allocation d'une valeur d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (O) Value : adresse d'un pointeur sur la valeur à allouer */ -/* (I) ... : arguments relatifs à l'allocation de la valeur */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_Value_Alloc_I ( NDT_Root * Root, void ** Value, ... ); -DST_Status DS_Value_Alloc_L ( NDT_Root * Root, void ** Value, ... ); -DST_Status DS_Value_Alloc_CL ( NDT_Root * Root, void ** Value, ... ); -/*------------------------------------------------------------------------------*/ -/* Ajout d'une valeur à une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Value : pointeur sur la valeur à ajouter */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_Value_Add_I ( NDT_Root * Root, void * Value ); -DST_Status DS_Value_Add_L ( NDT_Root * Root, void * Value ); -DST_Status DS_Value_Add_CL ( NDT_Root * Root, void * Value ); -/*------------------------------------------------------------------------------*/ -/* Suppression du premier noeud correspondant à une valeur donnée */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Reference_Value : pointeur sur la valeur de référence */ -/* (I) Removed_Value : adresse d'un pointeur sur la valeur supprimée */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_Value_Remove_I ( NDT_Root * Root, void * Reference_Value, \ - void ** Removed_Value); -DST_Status DS_Value_Remove_L ( NDT_Root * Root, void * Reference_Value, \ - void ** Removed_Value); -DST_Status DS_Value_Remove_CL ( NDT_Root * Root, void * Reference_Value, \ - void ** Removed_Value); +/*----------------------------------------------------------------------------*/ +/* Verrouillage d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure */ +/* (I) Lock_Mode : type de verrou à poser sur la structure */ +/* (O) Locked : verrou effectif (TRUE ou FALSE) */ +/*----------------------------------------------------------------------------*/ +/* +DSD_API DST_Status DS_DataStruct_Lock_I( NDT_Root * Root, DST_Flags Lock_Mode, int * Locked); +DSD_API DST_Status DS_DataStruct_Lock_L( NDT_Root * Root, DST_Flags Lock_Mode, int * Locked); +DSD_API DST_Status DS_DataStruct_Lock_CL( NDT_Root * Root, DST_Flags Lock_Mode, int * Locked); -/*------------------------------------------------------------------------------*/ -/* Désallocation d'une valeur d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Value : pointeur sur la valeur à désallouer */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_Value_Free_I ( NDT_Root * Root, void * Value ); -DST_Status DS_Value_Free_L ( NDT_Root * Root, void * Value ); -DST_Status DS_Value_Free_CL ( NDT_Root * Root, void * Value ); -/*------------------------------------------------------------------------------*/ -/* Allocation de mémoire pour une structure de données : */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Size : taille mémoire à allouer */ -/* (O) Ptr : adresse du pointeur sur la zone de données allouée */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_Alloc_I ( NDT_Root * Root, size_t Size, void ** Ptr ); -DST_Status DS_Alloc_L ( NDT_Root * Root, size_t Size, void ** Ptr ); -DST_Status DS_Alloc_CL ( NDT_Root * Root, size_t Size, void ** Ptr ); -/*------------------------------------------------------------------------------*/ -/* Désallocation d'une ressource pour une structure de données : */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Ptr : pointeur sur la zone à désallouer */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_Free_I ( NDT_Root * Root, void * Ptr ); -DST_Status DS_Free_L ( NDT_Root * Root, void * Ptr ); -DST_Status DS_Free_CL ( NDT_Root * Root, void * Ptr ); +/*----------------------------------------------------------------------------*/ +/* Déverrouillage d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure */ +/*----------------------------------------------------------------------------*/ +/* +DSD_API DST_Status DS_DataStruct_Unlock_I( NDT_Root * Root); +DSD_API DST_Status DS_DataStruct_Unlock_L( NDT_Root * Root); +DSD_API DST_Status DS_DataStruct_Unlock_CL( NDT_Root * Root); + + + +/*----------------------------------------------------------------------------*/ +/* Fermeture d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Close_Mode : mode de fermeture de la structure (destruction ou non) */ +/*----------------------------------------------------------------------------*/ +/* +DSD_API DST_Status DS_DataStruct_Close_I( NDT_Root * Root, DST_Flags Close_Mode); +DSD_API DST_Status DS_DataStruct_Close_L( NDT_Root * Root, DST_Flags Close_Mode); +DSD_API DST_Status DS_DataStruct_Close_CL( NDT_Root * Root, DST_Flags Close_Mode); + + + +/*----------------------------------------------------------------------------*/ +/* Affiche les informations d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root: pointeur sur la racine de la structure de données */ +/* (I) Out : flux de sortie de l'affichage */ +/*----------------------------------------------------------------------------*/ +/* +DSD_API DST_Status DS_DataStruct_Info_Print_I( NDT_Root * Root, FILE * Out); +DSD_API DST_Status DS_DataStruct_Info_Print_L( NDT_Root * Root, FILE * Out); +DSD_API DST_Status DS_DataStruct_Info_Print_CL( NDT_Root * Root, FILE * Out); + + + +/*----------------------------------------------------------------------------*/ +/* Réorganisation d'une structure de données : */ +/* - ordonnancement d'une liste non ordonnée */ +/* - réquilibrage d'un arbre non auto-équilibré */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/*----------------------------------------------------------------------------*/ +/* +DSD_API DST_Status DS_DataStruct_Reorg_I( NDT_Root * Root); +DSD_API DST_Status DS_DataStruct_Reorg_L( NDT_Root * Root); +DSD_API DST_Status DS_DataStruct_Reorg_CL( NDT_Root * Root); + + + +/*----------------------------------------------------------------------------*/ +/* Parcours de tous les noeuds d'une structure de données et exécution d'une */ +/* commande sur chacun d'eux */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Command : Commande à exécuter sur chaque noeud traversé */ +/* (I) Data : pointeur de données utilisateur */ +/*----------------------------------------------------------------------------*/ +/* +DSD_API DST_Status DS_DataStruct_Traverse_I( NDT_Root * Root, NDT_Command Command, void * Data); +DSD_API DST_Status DS_DataStruct_Traverse_L( NDT_Root * Root, NDT_Command Command, void * Data); +DSD_API DST_Status DS_DataStruct_Traverse_CL( NDT_Root * Root, NDT_Command Command, void * Data); + + + +/*----------------------------------------------------------------------------*/ +/* Conversion d'une structure de données d'un type en un autre */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Target_Type : type de structure cible */ +/*----------------------------------------------------------------------------*/ +/* +DSD_API DST_Status DS_DataStruct_Convert_I( NDT_Root * Root, NDT_DataStruct_Type Target_Type); +DSD_API DST_Status DS_DataStruct_Convert_L( NDT_Root * Root, NDT_DataStruct_Type Target_Type); +DSD_API DST_Status DS_DataStruct_Convert_CL( NDT_Root * Root, NDT_DataStruct_Type Target_Type); + + + +/*----------------------------------------------------------------------------*/ +/* Affichage de la valeur de tous les noeuds d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Out : flux de sortie */ +/*----------------------------------------------------------------------------*/ +/* +DSD_API DST_Status DS_DataStruct_Print_I( NDT_Root * Root, FILE * Out); +DSD_API DST_Status DS_DataStruct_Print_L( NDT_Root * Root, FILE * Out); +DSD_API DST_Status DS_DataStruct_Print_CL( NDT_Root * Root, FILE * Out); + + + +/*----------------------------------------------------------------------------*/ +/* Fonction de vérification / réparation d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure */ +/* (O) Nb_Detected : pointeur sur le nombre d'erreurs détectées */ +/* (O) Nb_Corrected : pointeur sur le nombre d'erreurs corrigées */ +/* (I) Out : flux de sortie du rapport */ +/*----------------------------------------------------------------------------*/ +/* +DSD_API DST_Status DS_DataStruct_Check_I( NDT_Root * Root, int * Nb_Detected, int * Nb_Corrected, FILE * Out); +DSD_API DST_Status DS_DataStruct_Check_L( NDT_Root * Root, int * Nb_Detected, int * Nb_Corrected, FILE * Out); +DSD_API DST_Status DS_DataStruct_Check_CL( NDT_Root * Root, int * Nb_Detected, int * Nb_Corrected, FILE * Out); + + + +/*----------------------------------------------------------------------------*/ +/* Affichage de la structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure */ +/* (I) Out : flux de sortie */ +/*----------------------------------------------------------------------------*/ +/* +DSD_API DST_Status DS_DataStruct_Dump_I( NDT_Root * Root, FILE * Out); +DSD_API DST_Status DS_DataStruct_Dump_L( NDT_Root * Root, FILE * Out); +DSD_API DST_Status DS_DataStruct_Dump_CL( NDT_Root * Root, FILE * Out); + + + +/*----------------------------------------------------------------------------*/ +/* Récupération du premier noeud d'une structure */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine dont on cherche le premier noeud */ +/* (O) Node : pointeur sur le noeud à récupérer */ +/*----------------------------------------------------------------------------*/ +/* +DSD_API DST_Status DS_Node_First_Get_I( NDT_Root * Root, NDT_Node ** Node); +DSD_API DST_Status DS_Node_First_Get_L( NDT_Root * Root, NDT_Node ** Node); +DSD_API DST_Status DS_Node_First_Get_CL( NDT_Root * Root, NDT_Node ** Node); + + + +/*----------------------------------------------------------------------------*/ +/* Récupération du dernier noeud d'une structure */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine dont on cherche le dernier noeud */ +/* (O) Node : pointeur sur le noeud à récupérer */ +/*----------------------------------------------------------------------------*/ +/* +DSD_API DST_Status DS_Node_Last_Get_I( NDT_Root * Root, NDT_Node ** Node); +DSD_API DST_Status DS_Node_Last_Get_L( NDT_Root * Root, NDT_Node ** Node); +DSD_API DST_Status DS_Node_Last_Get_CL( NDT_Root * Root, NDT_Node ** Node); + + + +/*----------------------------------------------------------------------------*/ +/* Récupération du noeud suivant */ +/*----------------------------------------------------------------------------*/ +/* (I) Node : pointeur sur le noeud dont on cherche le suivant */ +/* (O) Next_Node : pointeur sur le noeud suivant */ +/*----------------------------------------------------------------------------*/ +/* +DSD_API DST_Status DS_Node_Next_Get_I( NDT_Node * Node, NDT_Node ** Next_Node); +DSD_API DST_Status DS_Node_Next_Get_L( NDT_Node * Node, NDT_Node ** Next_Node); +DSD_API DST_Status DS_Node_Next_Get_CL( NDT_Node * Node, NDT_Node ** Next_Node); + + + +/*----------------------------------------------------------------------------*/ +/* Récupération du noeud précédant */ +/*----------------------------------------------------------------------------*/ +/* (I) Node : pointeur sur le noeud dont on cherche le précédant */ +/* (O) Prev_Node : pointeur sur le noeud précédant */ +/*----------------------------------------------------------------------------*/ +/* +DSD_API DST_Status DS_Node_Previous_Get_I( NDT_Node * Node, NDT_Node ** Prev_Node); +DSD_API DST_Status DS_Node_Previous_Get_L( NDT_Node * Node, NDT_Node ** Prev_Node); +DSD_API DST_Status DS_Node_Previous_Get_CL( NDT_Node * Node, NDT_Node ** Prev_Node); + + + +/*----------------------------------------------------------------------------*/ +/* Ajout d'un noeud à une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Node : pointeur sur le noeud à ajouter */ +/*----------------------------------------------------------------------------*/ +/* +DSD_API DST_Status DS_Node_Add_I( NDT_Root * Root, NDT_Node * Node); +DSD_API DST_Status DS_Node_Add_L( NDT_Root * Root, NDT_Node * Node); +DSD_API DST_Status DS_Node_Add_CL( NDT_Root * Root, NDT_Node * Node); + + + +/*----------------------------------------------------------------------------*/ +/* Suppression d'un noeud dans une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Node: pointeur sur le noeud à supprimer de la structure de données */ +/*----------------------------------------------------------------------------*/ +/* +DSD_API DST_Status DS_Node_Remove_I( NDT_Node * Node); +DSD_API DST_Status DS_Node_Remove_L( NDT_Node * Node); +DSD_API DST_Status DS_Node_Remove_CL( NDT_Node * Node); + + + +/*----------------------------------------------------------------------------*/ +/* Recherche un noeud dans un arbre et retourne le pointeur sur le noeud */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de l'abre */ +/* (O) Node : adresse du pointeur sur le noeud à récuperer */ +/* (I) Value : pointeur sur la valeur à rechercher */ +/* (I) Data : pointeur de données */ +/*----------------------------------------------------------------------------*/ +/* +DSD_API DST_Status DS_Node_Find_I( NDT_Root * Root, NDT_Node ** Node, void * Value, void * Data); +DSD_API DST_Status DS_Node_Find_L( NDT_Root * Root, NDT_Node ** Node, void * Value, void * Data); +DSD_API DST_Status DS_Node_Find_CL( NDT_Root * Root, NDT_Node ** Node, void * Value, void * Data); + + + +/*----------------------------------------------------------------------------*/ +/* Allocation d'une valeur d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (O) Value : adresse d'un pointeur sur la valeur à allouer */ +/* (I) ... : arguments relatifs à l'allocation de la valeur */ +/*----------------------------------------------------------------------------*/ +/* +DSD_API DST_Status DS_Value_Alloc_I( NDT_Root * Root, void ** Value, ...); +DSD_API DST_Status DS_Value_Alloc_L( NDT_Root * Root, void ** Value, ...); +DSD_API DST_Status DS_Value_Alloc_CL( NDT_Root * Root, void ** Value, ...); + + + +/*----------------------------------------------------------------------------*/ +/* Ajout d'une valeur à une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Value : pointeur sur la valeur à ajouter */ +/*----------------------------------------------------------------------------*/ +/* +DSD_API DST_Status DS_Value_Add_I( NDT_Root * Root, void * Value); +DSD_API DST_Status DS_Value_Add_L( NDT_Root * Root, void * Value); +DSD_API DST_Status DS_Value_Add_CL( NDT_Root * Root, void * Value); + + + +/*----------------------------------------------------------------------------*/ +/* Suppression du premier noeud correspondant à une valeur donnée */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Reference_Value : pointeur sur la valeur de référence */ +/* (I) Removed_Value : adresse d'un pointeur sur la valeur supprimée */ +/*----------------------------------------------------------------------------*/ +/* +DSD_API DST_Status DS_Value_Remove_I( NDT_Root * Root, void * Reference_Value, void ** Removed_Value); +DSD_API DST_Status DS_Value_Remove_L( NDT_Root * Root, void * Reference_Value, void ** Removed_Value); +DSD_API DST_Status DS_Value_Remove_CL( NDT_Root * Root, void * Reference_Value, void ** Removed_Value); + + + +/*----------------------------------------------------------------------------*/ +/* Désallocation d'une valeur d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Value : pointeur sur la valeur à désallouer */ +/*----------------------------------------------------------------------------*/ +/* +DSD_API DST_Status DS_Value_Free_I( NDT_Root * Root, void * Value); +DSD_API DST_Status DS_Value_Free_L( NDT_Root * Root, void * Value); +DSD_API DST_Status DS_Value_Free_CL( NDT_Root * Root, void * Value); + + + +/*----------------------------------------------------------------------------*/ +/* Allocation de mémoire pour une structure de données : */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Size : taille mémoire à allouer */ +/* (O) Ptr : adresse du pointeur sur la zone de données allouée */ +/*----------------------------------------------------------------------------*/ +/* +DSD_API DST_Status DS_Alloc_I( NDT_Root * Root, size_t Size, void ** Ptr); +DSD_API DST_Status DS_Alloc_L( NDT_Root * Root, size_t Size, void ** Ptr); +DSD_API DST_Status DS_Alloc_CL( NDT_Root * Root, size_t Size, void ** Ptr); + + + +/*----------------------------------------------------------------------------*/ +/* Désallocation d'une ressource pour une structure de données : */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Ptr : pointeur sur la zone à désallouer */ +/*----------------------------------------------------------------------------*/ +/* +DSD_API DST_Status DS_Free_I( NDT_Root * Root, void * Ptr); +DSD_API DST_Status DS_Free_L( NDT_Root * Root, void * Ptr); +DSD_API DST_Status DS_Free_CL( NDT_Root * Root, void * Ptr); +*/ + #ifdef __cplusplus -} +//} #endif #endif diff --git a/lib/Makefile b/lib/Makefile index 767e834..67579e1 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -1,6 +1,6 @@ -SRC := libdatatstr.c -TARGETS := libdatatstr.a libdatatstr.so -FILE_LIB := libdatatstr.a libdatatstr.so +SRC := libdatastr.c +TARGETS := libdatastr.a libdatastr.so +FILE_LIB := libdatastr.a libdatastr.so @@ -9,8 +9,8 @@ include ../Makefile.rule -DEP += libdatatstr.h ../include/datatstr.h ../../liblog/include/log.h Makefile -INCLUDE += -I . -I ../include -I ../../liblog/include +DEP += libdatastr.h ../include/datastr.h ../../liblog/include/log.h ../../libnode/include/node.h ../../libshmem/include/shmem.h Makefile +INCLUDE += -I . -I ../include -I ../../liblog/include -I ../../libnode/include -I ../../libshmem/include ifdef _LIBVER_SUPPORT DEP += ../../libver/ver.h @@ -19,4 +19,4 @@ endif -libdatatstr.o : libdatatstr.c $(DEP) +libdatastr.o : libdatastr.c $(DEP) diff --git a/lib/libdatastr.c b/lib/libdatastr.c index 3f5d02a..4f6a5f2 100644 --- a/lib/libdatastr.c +++ b/lib/libdatastr.c @@ -1,3 +1,35 @@ +/*----------------------------------------------------------------------------*/ +/* libdatastr.c */ +/*----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------*/ +/* This file is part of LibDataStr. */ +/* */ +/* LibDataStr is free software: you can redistribute it and/or modify it */ +/* under the terms of the GNU Lesser General Public License as published */ +/* by the Free Software Foundation, either version 3 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* LibDataStr is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU Lesser General Public License for more details. */ +/* */ +/* You should have received a copy of the GNU Lesser General Public */ +/* License along with LibDataStr. If not, see */ +/* . */ +/*----------------------------------------------------------------------------*/ + + + +/*----------------------------------------------------------------------------*/ +/* Includes */ +/*----------------------------------------------------------------------------*/ + +#define _LIBDATASTR_C_ + + + /* Utilisation des API sans vérification des arguments */ #define ND_MODE 1 @@ -5,25 +37,26 @@ #include -VER_INFO_EXPORT (libdatastr,"$Revision: 1.1 $", "$Name: $",__FILE__,"$Author: smas $") +//VER_INFO_EXPORT (libdatastr,"$Revision: 1.1 $", "$Name: $",__FILE__,"$Author: smas $") -/*------------------------------------------------------------------------------*/ -/*------------------------------------------------------------------------------*/ -/* FONCTIONS PUBLIQUES */ -/*------------------------------------------------------------------------------*/ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* FONCTIONS PUBLIQUES */ +/*----------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ -/*------------------------------------------------------------------------------*/ -/* FONCTIONS OPTIMISATION MAXIMALE (DS_MODE = 2) */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* FONCTIONS OPTIMISATION MAXIMALE (DS_MODE = 2) */ +/*----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------*/ +/* Ouverture d'une instance de la librairie */ +/*----------------------------------------------------------------------------*/ +/* (I) Instance : numéro de l'instance de la librairie */ +/* (I) Context : nom du contexte */ +/* (I) Debug_Mode : mode d'affichage des messages d'erreur */ +/*----------------------------------------------------------------------------*/ -/*------------------------------------------------------------------------------*/ -/* Ouverture d'une instance de la librairie */ -/*------------------------------------------------------------------------------*/ -/* (I) Instance : numéro de l'instance de la librairie */ -/* (I) Context : nom du contexte */ -/* (I) Debug_Mode : mode d'affichage des messages d'erreur */ -/*------------------------------------------------------------------------------*/ DST_Status DS_Library_Open_I ( int Instance, const char * Context, DST_Flags Debug_Mode ) { DST_Status rc; @@ -57,7 +90,7 @@ DST_Status DS_Library_Open_I ( int Instance, const char * Context, DST_Flags Deb Lors de la première ouverture de la librairie LIBDATASTR, on crée une structure locale permettant de référencer les data structures ouvertes. - */ + */ if (DS_Open_Counter == 0) { @@ -77,9 +110,12 @@ DST_Status DS_Library_Open_I ( int Instance, const char * Context, DST_Flags Deb return DSS_OK; } -/*------------------------------------------------------------------------------*/ -/* Fermeture de l'instance de la librairie */ -/*------------------------------------------------------------------------------*/ + + +/*----------------------------------------------------------------------------*/ +/* Fermeture de l'instance de la librairie */ +/*----------------------------------------------------------------------------*/ + DST_Status DS_Library_Close_I ( void ) { DST_Status rc; @@ -87,7 +123,7 @@ DST_Status DS_Library_Close_I ( void ) /* A la dernière fermeture de la librairie LIBDATASTR, on détruit la structure locale qui référence les data structures ouvertes. - */ + */ if (DS_Open_Counter == 1) { @@ -117,29 +153,35 @@ DST_Status DS_Library_Close_I ( void ) return rc; } -/*------------------------------------------------------------------------------*/ -/* Définition de la sortie standard des messages d'erreur de la librairie */ -/*------------------------------------------------------------------------------*/ -/* (I) Out : flux de sortie des messages d'erreur */ -/*------------------------------------------------------------------------------*/ + + +/*----------------------------------------------------------------------------*/ +/* Définition de la sortie standard des messages d'erreur de la librairie */ +/*----------------------------------------------------------------------------*/ +/* (I) Out : flux de sortie des messages d'erreur */ +/*----------------------------------------------------------------------------*/ + DST_Status DS_Library_Stderr_Set_I ( FILE * Out ) { DS_stderr = Out; return DSS_OK; } -/*------------------------------------------------------------------------------*/ -/* Création / ouverture d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) DS_Name : nom de la structure */ -/* (O) Root : adresse du pointeur sur la racine de la structure */ -/* (I) Type : type de la structure de données */ -/* (I) Manager_FileName : nom du fichier qui définit les fonctions manager */ -/* (I) Segment_Size : taille ds segments du heap sous-jacent */ -/* (I) Open_Mode : mode d'ouverture de la structure */ -/* (I) Own_Values : indique si la structure possède ses valeurs */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_DataStruct_Open_I ( const char * DS_Name, NDT_Root ** Root,\ + + +/*----------------------------------------------------------------------------*/ +/* Création / ouverture d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) DS_Name : nom de la structure */ +/* (O) Root : adresse du pointeur sur la racine de la structure */ +/* (I) Type : type de la structure de données */ +/* (I) Manager_FileName : nom du fichier qui définit les fonctions manager */ +/* (I) Segment_Size : taille ds segments du heap sous-jacent */ +/* (I) Open_Mode : mode d'ouverture de la structure */ +/* (I) Own_Values : indique si la structure possède ses valeurs */ +/*----------------------------------------------------------------------------*/ + +DST_Status DS_DataStruct_Open_I ( const char * DS_Name, NDT_Root ** Root, \ NDT_DataStruct_Type Type, const char * Manager_FileName, \ size_t Segment_Size, DST_Flags Open_Mode, int Own_Values ) { @@ -181,7 +223,7 @@ DST_Status DS_DataStruct_Open_I ( const char * DS_Name, NDT_Root ** Root,\ { case 1: - /*--------------- Création d'une nouvelle data structure dans un heap existant ---------------*/ + /*--------------- Création d'une nouvelle data structure dans un heap existant -------------*/ /* Ouverture du heap en écriture */ @@ -264,7 +306,7 @@ DST_Status DS_DataStruct_Open_I ( const char * DS_Name, NDT_Root ** Root,\ case 2: - /*--------------- Ouverture d'une data structure existante --------------------*/ + /*--------------- Ouverture d'une data structure existante ------------------*/ /* Si la structure a déjà été ouverte, on ne recommence pas */ @@ -314,7 +356,7 @@ DST_Status DS_DataStruct_Open_I ( const char * DS_Name, NDT_Root ** Root,\ case 3: - /*--------------- Création d'une nouvelle structure de données dans un nouveau heap -------------------*/ + /*--------------- Création d'une nouvelle structure de données dans un nouveau heap -----------------*/ if (!Manager_FileName) { @@ -472,13 +514,15 @@ DST_Status DS_DataStruct_Open_I ( const char * DS_Name, NDT_Root ** Root,\ return DSS_OK; } -/*------------------------------------------------------------------------------*/ -/* Verrouillage d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure */ -/* (I) Lock_Mode : type de verrou à poser sur la structure */ -/* (O) Locked : verrou effectif (TRUE ou FALSE) */ -/*------------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------*/ +/* Verrouillage d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure */ +/* (I) Lock_Mode : type de verrou à poser sur la structure */ +/* (O) Locked : verrou effectif (TRUE ou FALSE) */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Lock_I ( NDT_Root * Root, DST_Flags Lock_Mode, int * Locked ) { DST_Status rc; @@ -486,7 +530,7 @@ DST_Status DS_DataStruct_Lock_I ( NDT_Root * Root, DST_Flags Lock_Mode, int * Lo char * Heap_Name = ((DST_RootDesc *)(Root->User))->Heap_Name; /* Réouverture du heap sous-jacent (rafraîchissement des segments) + verrouillage */ - +/* rc = SM_Heap_Open (Heap_Name, &Heap, 0, SMD_OPEN | Lock_Mode, Locked); if (rc != SMS_OK) { @@ -500,11 +544,12 @@ DST_Status DS_DataStruct_Lock_I ( NDT_Root * Root, DST_Flags Lock_Mode, int * Lo return DSS_OK; } -/*------------------------------------------------------------------------------*/ -/* Déverrouillage d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Déverrouillage d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Unlock_I ( NDT_Root * Root ) { DST_Status rc; @@ -532,12 +577,13 @@ DST_Status DS_DataStruct_Unlock_I ( NDT_Root * Root ) return DSS_OK; } -/*------------------------------------------------------------------------------*/ -/* Fermeture d'une structure de données */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Fermeture d'une structure de données */ +/*----------------------------------------------------------------------------*/ /* (I) Root : pointeur sur la racine de la structure de données à fermer */ -/* (I) Close_Mode : mode de fermeture de la structure (destruction ou non) */ -/*------------------------------------------------------------------------------*/ +/* (I) Close_Mode : mode de fermeture de la structure (destruction ou non) */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Close_I ( NDT_Root * Root, DST_Flags Close_Mode ) { DST_Status rc; @@ -554,13 +600,13 @@ DST_Status DS_DataStruct_Close_I ( NDT_Root * Root, DST_Flags Close_Mode ) else DS_Name = Heap_Name; if (Close_Mode == DSD_DESTROY) /* Destruction de la data structure */ - { +/* { /* La data structure est-elle propriétaire du heap sous-jacent ? */ - +/* if (RootDesc->Heap_Owner == TRUE) { /* On vérifie qu'aucun autre processus n'a ouvert la data structure */ - +/* rc = DS_Semaphore_Operate (RootDesc->OpenSemID, DS_SemOp_Destroy, 2); if (rc != DSS_OK) { @@ -572,7 +618,7 @@ DST_Status DS_DataStruct_Close_I ( NDT_Root * Root, DST_Flags Close_Mode ) } /* On supprime la structure proprement (toutes les valeurs sont supprimées les unes après les autres) */ - +/* rc = ND_DataStruct_Close (Root); if (rc != NDS_OK) { @@ -583,11 +629,11 @@ DST_Status DS_DataStruct_Close_I ( NDT_Root * Root, DST_Flags Close_Mode ) } /* Suppression du sémaphore */ - +/* semctl (RootDesc->OpenSemID, 0, IPC_RMID, Sem_Ctl); /* On supprime maintenant le heap */ - +/* rc = SM_Heap_End (Heap_Name); if (rc != SMS_OK) { @@ -604,8 +650,8 @@ DST_Status DS_DataStruct_Close_I ( NDT_Root * Root, DST_Flags Close_Mode ) on ne peut pas garantir qu'aucun autre processus ne l'a ouverte. On la supprime donc sans contrôle. - */ - + */ +/* rc = ND_DataStruct_Close (Root); if (rc != NDS_OK) { @@ -619,9 +665,9 @@ DST_Status DS_DataStruct_Close_I ( NDT_Root * Root, DST_Flags Close_Mode ) } } else /* Fermeture simple de la data structure */ - { +/* { /* On décrémente le sémaphore qui compte le nombre de processus ayant ouvert la data structure */ - +/* rc = DS_Semaphore_Operate (RootDesc->OpenSemID, DS_SemOp_Close, 1); if (rc != DSS_OK) { @@ -632,7 +678,7 @@ DST_Status DS_DataStruct_Close_I ( NDT_Root * Root, DST_Flags Close_Mode ) } /* Fermeture simple du heap */ - +/* rc = SM_Heap_IsOpen (Heap_Name, &Heap); if (rc == SMS_YES) { @@ -648,7 +694,7 @@ DST_Status DS_DataStruct_Close_I ( NDT_Root * Root, DST_Flags Close_Mode ) } /* Suppression de la data structure de la liste des structures ouvertes */ - +/* To_Remove.Name = DS_Name; rc = ND_Value_Remove (OpenedDS_List, &To_Remove, (void **)&Opened_DataStruct); if (rc == NDS_OK) ND_Value_Free (OpenedDS_List, Opened_DataStruct); @@ -656,25 +702,26 @@ DST_Status DS_DataStruct_Close_I ( NDT_Root * Root, DST_Flags Close_Mode ) return DSS_OK; } -/*------------------------------------------------------------------------------*/ -/* Affiche les informations d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root: pointeur sur la racine de la structure de données */ -/* (I) Out : flux de sortie de l'affichage */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Affiche les informations d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root: pointeur sur la racine de la structure de données */ +/* (I) Out : flux de sortie de l'affichage */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Info_Print_I ( NDT_Root * Root, FILE * Out ) { DST_Status rc; DST_RootDesc * RootDesc = (DST_RootDesc *)(Root->User); /* On vérifie que la data structure est valide */ - +/* if (RootDesc->Valid == FALSE) { int Nb_Detected, Nb_Corrected; /* On vérifie la structure */ - +/* Nb_Detected = Nb_Corrected = 0; rc = DS_DataStruct_Check_L (Root, &Nb_Detected, &Nb_Corrected, DS_stderr); @@ -688,7 +735,7 @@ DST_Status DS_DataStruct_Info_Print_I ( NDT_Root * Root, FILE * Out ) } /* Affichage des informations sur la structure */ - +/* rc = ND_DataStruct_Info_Print (Root, Out); if (rc != NDS_OK) { @@ -701,24 +748,25 @@ DST_Status DS_DataStruct_Info_Print_I ( NDT_Root * Root, FILE * Out ) return DSS_OK; } -/*------------------------------------------------------------------------------*/ -/* Réorganisation d'une structure de données */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Réorganisation d'une structure de données */ +/*----------------------------------------------------------------------------*/ /* (I) Root : pointeur sur la racine de la structure de données à réorganiser */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Reorg_I ( NDT_Root * Root ) { DST_Status rc; DST_RootDesc * RootDesc = (DST_RootDesc *)(Root->User); /* On vérifie que la data structure est valide */ - +/* if (RootDesc->Valid == FALSE) { int Nb_Detected, Nb_Corrected; /* On vérifie la structure */ - +/* Nb_Detected = Nb_Corrected = 0; rc = DS_DataStruct_Check_L (Root, &Nb_Detected, &Nb_Corrected, DS_stderr); @@ -732,11 +780,11 @@ DST_Status DS_DataStruct_Reorg_I ( NDT_Root * Root ) } /* On rend la structure invalide, le temps de sa réorganisation */ - +/* RootDesc->Valid = FALSE; /* Réorganisation de la node structure */ - +/* rc = ND_DataStruct_Reorg (Root); if (rc != NDS_OK) { @@ -751,33 +799,34 @@ DST_Status DS_DataStruct_Reorg_I ( NDT_Root * Root ) } /* On rend la structure à nouveau valide */ - +/* RootDesc->Valid = TRUE; return DSS_OK; } -/*------------------------------------------------------------------------------*/ -/* Parcours de tous les noeuds d'une structure de données et exécution d'une */ -/* commande sur chacun d'eux */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données à parcourir */ -/* (I) Command : commande à exécuter sur chaque noeud traversé */ -/* (I) Data : pointeur de données utilisateur */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Parcours de tous les noeuds d'une structure de données et exécution d'une */ +/* commande sur chacun d'eux */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données à parcourir*/ +/* (I) Command : commande à exécuter sur chaque noeud traversé */ +/* (I) Data : pointeur de données utilisateur */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Traverse_I ( NDT_Root * Root, NDT_Command Command, void * Data ) { DST_Status rc; DST_RootDesc * RootDesc = (DST_RootDesc *)(Root->User); /* On vérifie que la data structure est valide */ - +/* if (RootDesc->Valid == FALSE) { int Nb_Detected, Nb_Corrected; /* On vérifie la structure */ - +/* Nb_Detected = Nb_Corrected = 0; rc = DS_DataStruct_Check_L (Root, &Nb_Detected, &Nb_Corrected, DS_stderr); @@ -791,7 +840,7 @@ DST_Status DS_DataStruct_Traverse_I ( NDT_Root * Root, NDT_Command Command, void } /* On rend éventuellement la structure invalide le temps de sa traversée */ - +/* switch ((int)Command) { case NDD_CMD_PRINT_VALUE: @@ -803,7 +852,7 @@ DST_Status DS_DataStruct_Traverse_I ( NDT_Root * Root, NDT_Command Command, void } /* Traversée de la node structure */ - +/* rc = ND_DataStruct_Traverse (Root, Command, Data); if (rc != NDS_OK) { @@ -816,31 +865,32 @@ DST_Status DS_DataStruct_Traverse_I ( NDT_Root * Root, NDT_Command Command, void } /* On rend la structure valide */ - +/* RootDesc->Valid = TRUE; return DSS_OK; } -/*------------------------------------------------------------------------------*/ -/* Conversion d'une structure de données d'un type en un autre */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Target_Type : type de structure cible */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Conversion d'une structure de données d'un type en un autre */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Target_Type : type de structure cible */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Convert_I ( NDT_Root * Root, NDT_DataStruct_Type Target_Type ) { DST_Status rc; DST_RootDesc * RootDesc = (DST_RootDesc *)(Root->User); /* On vérifie que la data structure est valide */ - +/* if (RootDesc->Valid == FALSE) { int Nb_Detected, Nb_Corrected; /* On vérifie la structure */ - +/* Nb_Detected = Nb_Corrected = 0; rc = DS_DataStruct_Check_L (Root, &Nb_Detected, &Nb_Corrected, DS_stderr); @@ -854,11 +904,11 @@ DST_Status DS_DataStruct_Convert_I ( NDT_Root * Root, NDT_DataStruct_Type Target } /* On rend la structure invalide le temps de sa conversion */ - +/* RootDesc->Valid = FALSE; /* Conversion de la node structure */ - +/* rc = ND_DataStruct_Convert (Root, Target_Type); if (rc != NDS_OK) { @@ -871,31 +921,33 @@ DST_Status DS_DataStruct_Convert_I ( NDT_Root * Root, NDT_DataStruct_Type Target } /* On rend la structure à nouveau valide */ - +/* RootDesc->Valid = TRUE; return DSS_OK; } -/*------------------------------------------------------------------------------*/ -/* Affichage d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données à afficher */ -/* (I) Out : flux de sortie */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Affichage d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données à afficher */ +/* (I) Out : flux de sortie */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Print_I ( NDT_Root * Root, FILE * Out ) { return DS_DataStruct_Traverse_I (Root, NDD_CMD_PRINT_VALUE, Out); } -/*------------------------------------------------------------------------------*/ -/* Fonction de vérification / réparation d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure */ -/* (O) Nb_Detected : pointeur sur le nombre d'erreurs détectées */ -/* (O) Nb_Corrected : pointeur sur le nombre d'erreurs corrigées */ -/* (I) Out : flux de sortie du rapport */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Fonction de vérification / réparation d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure */ +/* (O) Nb_Detected : pointeur sur le nombre d'erreurs détectées */ +/* (O) Nb_Corrected : pointeur sur le nombre d'erreurs corrigées */ +/* (I) Out : flux de sortie du rapport */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Check_I ( NDT_Root * Root, int * Nb_Detected, int * Nb_Corrected, FILE * Out ) { DST_Status rc; @@ -908,7 +960,7 @@ DST_Status DS_DataStruct_Check_I ( NDT_Root * Root, int * Nb_Detected, int * Nb_ Heap_Name = RootDesc->Heap_Name; /* On sauvegarde l'état de verrouillage précédent */ - +/* rc = SM_Heap_IsOpen (Heap_Name, &Heap); if (rc != SMS_YES) { @@ -921,7 +973,7 @@ DST_Status DS_DataStruct_Check_I ( NDT_Root * Root, int * Nb_Detected, int * Nb_ Previous_Lock = Heap->Lock_Mode; /* Verrouillage de la data structure en écriture */ - +/* rc = DS_DataStruct_Lock_I (Root, SMD_WRITE, &Locked); if (rc != DSS_OK) { @@ -932,7 +984,7 @@ DST_Status DS_DataStruct_Check_I ( NDT_Root * Root, int * Nb_Detected, int * Nb_ } /* Vérification du heap sous-jacent à la data structure */ - +/* rc = SM_Heap_Check (Heap, Nb_Detected, Nb_Corrected, Out); if (rc != SMS_OK) { @@ -944,24 +996,24 @@ DST_Status DS_DataStruct_Check_I ( NDT_Root * Root, int * Nb_Detected, int * Nb_ else { /* Vérification de la structure de noeuds */ - +/* fprintf (Out, "Checking the node structure ...\n"); rc = ND_DataStruct_Check (Root, Nb_Detected, Nb_Corrected, Out); } /* On valide ou invalide la structure selon le résultat */ - +/* if (*Nb_Corrected == *Nb_Detected) RootDesc->Valid = TRUE; else RootDesc->Valid = FALSE; /* Retour au mode de verrouillage précédent */ - +/* if (Previous_Lock == SMD_UNDEF) DS_DataStruct_Unlock_I (Root); else DS_DataStruct_Lock_I (Root, Previous_Lock, &Locked); /* Affichage du résultat de la procédure de vérification */ - +/* if (*Nb_Detected) { fprintf (Out, "%d/%d error(s) corrected in the data structure\n", *Nb_Corrected, *Nb_Detected); @@ -973,25 +1025,26 @@ DST_Status DS_DataStruct_Check_I ( NDT_Root * Root, int * Nb_Detected, int * Nb_ return rc; } -/*------------------------------------------------------------------------------*/ -/* Affiche la structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure */ -/* (I) Out : flux de sortie */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Affiche la structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure */ +/* (I) Out : flux de sortie */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Dump_I ( NDT_Root * Root, FILE * Out ) { DST_Status rc; DST_RootDesc * RootDesc = (DST_RootDesc *)(Root->User); /* On vérifie que la data structure est valide */ - +/* if (RootDesc->Valid == FALSE) { int Nb_Detected, Nb_Corrected; /* On vérifie la structure */ - +/* Nb_Detected = Nb_Corrected = 0; rc = DS_DataStruct_Check_L (Root, &Nb_Detected, &Nb_Corrected, DS_stderr); if (rc != DSS_OK) @@ -1004,7 +1057,7 @@ DST_Status DS_DataStruct_Dump_I ( NDT_Root * Root, FILE * Out ) } /* Affichage de la node structure */ - +/* rc = ND_DataStruct_Dump (Root, Out); if (rc != NDS_OK) { @@ -1017,25 +1070,26 @@ DST_Status DS_DataStruct_Dump_I ( NDT_Root * Root, FILE * Out ) return DSS_OK; } -/*------------------------------------------------------------------------------*/ -/* Récupération du premier noeud d'une structure */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine dont on cherche le premier noeud */ -/* (O) Node : pointeur sur le noeud à récupérer */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Récupération du premier noeud d'une structure */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine dont on cherche le premier noeud */ +/* (O) Node : pointeur sur le noeud à récupérer */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Node_First_Get_I ( NDT_Root * Root, NDT_Node ** Node ) { DST_Status rc; DST_RootDesc * RootDesc = (DST_RootDesc *)(Root->User); /* On vérifie que la data structure est valide */ - +/* if (RootDesc->Valid == FALSE) { int Nb_Detected, Nb_Corrected; /* On vérifie la structure */ - +/* Nb_Detected = Nb_Corrected = 0; rc = DS_DataStruct_Check_L (Root, &Nb_Detected, &Nb_Corrected, DS_stderr); if (rc != DSS_OK) @@ -1048,31 +1102,32 @@ DST_Status DS_Node_First_Get_I ( NDT_Root * Root, NDT_Node ** Node ) } /* Récupération du premier noeud */ - +/* rc = ND_Node_First_Get (Root, Node); return rc; } -/*------------------------------------------------------------------------------*/ -/* Récupération du dernier noeud d'une structure */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine dont on cherche le dernier noeud */ -/* (O) Node : pointeur sur le noeud à récupérer */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Récupération du dernier noeud d'une structure */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine dont on cherche le dernier noeud */ +/* (O) Node : pointeur sur le noeud à récupérer */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Node_Last_Get_I ( NDT_Root * Root, NDT_Node ** Node ) { DST_Status rc; DST_RootDesc * RootDesc = (DST_RootDesc *)(Root->User); /* On vérifie que la data structure est valide */ - +/* if (RootDesc->Valid == FALSE) { int Nb_Detected, Nb_Corrected; /* On vérifie la structure */ - +/* Nb_Detected = Nb_Corrected = 0; rc = DS_DataStruct_Check_L (Root, &Nb_Detected, &Nb_Corrected, DS_stderr); if (rc != DSS_OK) @@ -1085,30 +1140,31 @@ DST_Status DS_Node_Last_Get_I ( NDT_Root * Root, NDT_Node ** Node ) } /* Récupération du dernier noeud */ - +/* rc = ND_Node_Last_Get (Root, Node); return rc; } -/*------------------------------------------------------------------------------*/ -/* Récupération du noeud suivant */ -/*------------------------------------------------------------------------------*/ -/* (I) Node : pointeur sur le noeud dont on cherche le suivant */ -/* (O) Next_Node : pointeur sur le noeud suivant */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Récupération du noeud suivant */ +/*----------------------------------------------------------------------------*/ +/* (I) Node : pointeur sur le noeud dont on cherche le suivant */ +/* (O) Next_Node : pointeur sur le noeud suivant */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Node_Next_Get_I ( NDT_Node * Node, NDT_Node ** Next_Node ) { DST_Status rc; DST_RootDesc * RootDesc = (DST_RootDesc *)(Node->Root->User); /* On vérifie que la data structure est valide */ - +/* if (RootDesc->Valid == FALSE) { int Nb_Detected, Nb_Corrected; /* On vérifie la structure */ - +/* Nb_Detected = Nb_Corrected = 0; rc = DS_DataStruct_Check_L (Node->Root, &Nb_Detected, &Nb_Corrected, DS_stderr); @@ -1122,31 +1178,32 @@ DST_Status DS_Node_Next_Get_I ( NDT_Node * Node, NDT_Node ** Next_Node ) } /* Récupération du noeud suivant */ - +/* rc = ND_Node_Next_Get (Node, Next_Node); return rc; } -/*------------------------------------------------------------------------------*/ -/* Récupération du noeud précédant */ -/*------------------------------------------------------------------------------*/ -/* (I) Node : pointeur sur le noeud dont on cherche le précédant */ -/* (O) Prev_Node : pointeur sur le noeud précédant */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Récupération du noeud précédant */ +/*----------------------------------------------------------------------------*/ +/* (I) Node : pointeur sur le noeud dont on cherche le précédant */ +/* (O) Prev_Node : pointeur sur le noeud précédant */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Node_Previous_Get_I ( NDT_Node * Node, NDT_Node ** Prev_Node ) { DST_Status rc; DST_RootDesc * RootDesc = (DST_RootDesc *)(Node->Root->User); /* On vérifie que la data structure est valide */ - +/* if (RootDesc->Valid == FALSE) { int Nb_Detected, Nb_Corrected; /* On vérifie la structure */ - +/* Nb_Detected = Nb_Corrected = 0; rc = DS_DataStruct_Check_L (Node->Root, &Nb_Detected, &Nb_Corrected, DS_stderr); @@ -1160,31 +1217,32 @@ DST_Status DS_Node_Previous_Get_I ( NDT_Node * Node, NDT_Node ** Prev_Node ) } /* Récupération du noeud précédent */ - +/* rc = ND_Node_Previous_Get (Node, Prev_Node); return rc; } -/*------------------------------------------------------------------------------*/ -/* Ajout d'un noeud à une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Node : pointeur sur le noeud à ajouter */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Ajout d'un noeud à une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Node : pointeur sur le noeud à ajouter */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Node_Add_I ( NDT_Root * Root, NDT_Node * Node ) { DST_Status rc; DST_RootDesc * RootDesc = (DST_RootDesc *)(Root->User); /* On vérifie que la data structure est valide */ - +/* if (RootDesc->Valid == FALSE) { int Nb_Detected, Nb_Corrected; /* On vérifie la structure */ - +/* Nb_Detected = Nb_Corrected = 0; rc = DS_DataStruct_Check_L (Root, &Nb_Detected, &Nb_Corrected, DS_stderr); if (rc != DSS_OK) @@ -1197,11 +1255,11 @@ DST_Status DS_Node_Add_I ( NDT_Root * Root, NDT_Node * Node ) } /* On rend la structure invalide le temps de l'ajout */ - +/* RootDesc->Valid = FALSE; /* Ajout du noeud */ - +/* rc = ND_Node_Add (Root, Node); if (rc != NDS_OK) { @@ -1214,17 +1272,18 @@ DST_Status DS_Node_Add_I ( NDT_Root * Root, NDT_Node * Node ) } /* On rend la structure à nouveau valide */ - +/* RootDesc->Valid = TRUE; return DSS_OK; } -/*------------------------------------------------------------------------------*/ -/* Suppression d'un noeud dans une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Node : pointeur sur le noeud à supprimer */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Suppression d'un noeud dans une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Node : pointeur sur le noeud à supprimer */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Node_Remove_I ( NDT_Node * Node ) { DST_Status rc; @@ -1234,13 +1293,13 @@ DST_Status DS_Node_Remove_I ( NDT_Node * Node ) Root = Node->Root; /* On vérifie que la data structure est valide */ - +/* if (RootDesc->Valid == FALSE) { int Nb_Detected, Nb_Corrected; /* On vérifie la structure */ - +/* Nb_Detected = Nb_Corrected = 0; rc = DS_DataStruct_Check_L (Root, &Nb_Detected, &Nb_Corrected, DS_stderr); if (rc != DSS_OK) @@ -1253,11 +1312,11 @@ DST_Status DS_Node_Remove_I ( NDT_Node * Node ) } /* On rend la structure invalide le temps de la suppression du noeud */ - +/* RootDesc->Valid = FALSE; /* Suppression dans la node structure */ - +/* rc = ND_Node_Remove (Node); if (rc != NDS_OK) { @@ -1270,20 +1329,21 @@ DST_Status DS_Node_Remove_I ( NDT_Node * Node ) } /* On rend la structure à nouveau valide */ - +/* RootDesc->Valid = TRUE; return DSS_OK; } -/*------------------------------------------------------------------------------*/ -/* Recherche un noeud dans un arbre et retourne le pointeur sur le noeud */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de l'abre */ -/* (O) Node : adresse du pointeur sur le noeud à récuperer */ -/* (I) Value : pointeur sur la valeur à rechercher */ -/* (I) Data : pointeur de données */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Recherche un noeud dans un arbre et retourne le pointeur sur le noeud */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de l'abre */ +/* (O) Node : adresse du pointeur sur le noeud à récuperer */ +/* (I) Value : pointeur sur la valeur à rechercher */ +/* (I) Data : pointeur de données */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Node_Find_I ( NDT_Root * Root, NDT_Node ** Node, void * Value, void * Data ) { DST_Status rc; @@ -1292,13 +1352,13 @@ DST_Status DS_Node_Find_I ( NDT_Root * Root, NDT_Node ** Node, void * Value, voi *Node = NULL; /* On vérifie que la data structure est valide */ - +/* if (RootDesc->Valid == FALSE) { int Nb_Detected, Nb_Corrected; /* On vérifie la structure */ - +/* Nb_Detected = Nb_Corrected = 0; rc = DS_DataStruct_Check_L (Root, &Nb_Detected, &Nb_Corrected, DS_stderr); if (rc != DSS_OK) @@ -1311,30 +1371,31 @@ DST_Status DS_Node_Find_I ( NDT_Root * Root, NDT_Node ** Node, void * Value, voi } /* Recherche dans la node structure */ - +/* rc = ND_Node_Find (Root, Node, Value, Data); return rc; } -/*------------------------------------------------------------------------------*/ -/* Allocation d'une valeur d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (O) Value : adresse d'un pointeur sur la valeur à allouer */ -/* (I) ... : arguments relatifs à l'allocation de la valeur */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Allocation d'une valeur d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (O) Value : adresse d'un pointeur sur la valeur à allouer */ +/* (I) ... : arguments relatifs à l'allocation de la valeur */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Value_Alloc_I ( NDT_Root * Root, void ** Value, ... ) { DST_Status rc; va_list Args; /* Récupération des arguments pour l'allocation de la valeur */ - +/* va_start (Args, Value); /* Appel du manager */ - +/* rc = ND_Manager_Exec (Root->Manager, NDD_CMD_MAKE_VALUE, Root, Value, Args); va_end (Args); @@ -1342,25 +1403,26 @@ DST_Status DS_Value_Alloc_I ( NDT_Root * Root, void ** Value, ... ) return rc; } -/*------------------------------------------------------------------------------*/ -/* Ajout d'une valeur à une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Value : pointeur sur la valeur à ajouter à la structure de données */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Ajout d'une valeur à une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Value : pointeur sur la valeur à ajouter à la structure de données */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Value_Add_I ( NDT_Root * Root, void * Value ) { DST_Status rc; DST_RootDesc * RootDesc = (DST_RootDesc *)(Root->User); /* On vérifie que la data structure est valide */ - +/* if (RootDesc->Valid == FALSE) { int Nb_Detected, Nb_Corrected; /* On vérifie la structure */ - +/* Nb_Detected = Nb_Corrected = 0; rc = DS_DataStruct_Check_L (Root, &Nb_Detected, &Nb_Corrected, DS_stderr); if (rc != DSS_OK) @@ -1373,11 +1435,11 @@ DST_Status DS_Value_Add_I ( NDT_Root * Root, void * Value ) } /* On rend la structure invalide le temps de l'ajout */ - +/* RootDesc->Valid = FALSE; /* Ajout de la valeur */ - +/* rc = ND_Value_Add (Root, Value); if (rc != NDS_OK) { @@ -1390,32 +1452,33 @@ DST_Status DS_Value_Add_I ( NDT_Root * Root, void * Value ) } /* On rend la structure à nouveau valide */ - +/* RootDesc->Valid = TRUE; return DSS_OK; } -/*------------------------------------------------------------------------------*/ -/* Suppression du premier noeud correspondant à une valeur donnée */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Reference_Value : pointeur sur la valeur de référence */ -/* (I) Removed_Value : adresse d'un pointeur sur la valeur supprimée */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Suppression du premier noeud correspondant à une valeur donnée */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Reference_Value : pointeur sur la valeur de référence */ +/* (I) Removed_Value : adresse d'un pointeur sur la valeur supprimée */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Value_Remove_I ( NDT_Root * Root, void * Reference_Value, void ** Removed_Value ) { DST_Status rc; DST_RootDesc * RootDesc = (DST_RootDesc *)(Root->User); /* On vérifie que la data structure est valide */ - +/* if (RootDesc->Valid == FALSE) { int Nb_Detected, Nb_Corrected; /* On vérifie la structure */ - +/* Nb_Detected = Nb_Corrected = 0; rc = DS_DataStruct_Check_L (Root, &Nb_Detected, &Nb_Corrected, DS_stderr); if (rc != DSS_OK) @@ -1428,11 +1491,11 @@ DST_Status DS_Value_Remove_I ( NDT_Root * Root, void * Reference_Value, void ** } /* On rend la structure invalide le temps de la suppression de valeur */ - +/* RootDesc->Valid = FALSE; /* Suppression du noeud correspondant à la valeur de référence */ - +/* rc = ND_Value_Remove (Root, Reference_Value, Removed_Value); if (rc != NDS_OK) { @@ -1445,145 +1508,156 @@ DST_Status DS_Value_Remove_I ( NDT_Root * Root, void * Reference_Value, void ** } /* On rend la structure à nouveau valide */ - +/* RootDesc->Valid = TRUE; return DSS_OK; } -/*------------------------------------------------------------------------------*/ -/* Désallocation d'une valeur d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Value : pointeur sur la valeur à désallouer */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Désallocation d'une valeur d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Value : pointeur sur la valeur à désallouer */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Value_Free_I ( NDT_Root * Root, void * Value ) { return ND_Value_Free (Root, Value); } -/*------------------------------------------------------------------------------*/ -/* Allocation de mémoire pour une structure de données : */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Size : taille mémoire à allouer */ -/* (O) Ptr : adresse du pointeur sur la zone de données allouée */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Allocation de mémoire pour une structure de données : */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Size : taille mémoire à allouer */ +/* (O) Ptr : adresse du pointeur sur la zone de données allouée */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Alloc_I ( NDT_Root * Root, size_t Size, void ** Ptr ) { return DS_DataStruct_Alloc (Size, Ptr, Root->User); } -/*------------------------------------------------------------------------------*/ -/* Désallocation d'une ressource pour une structure de données : */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Ptr : pointeur sur la zone à désallouer */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Désallocation d'une ressource pour une structure de données : */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Ptr : pointeur sur la zone à désallouer */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Free_I ( NDT_Root * Root, void * Ptr ) { return DS_DataStruct_Free (Ptr, Root->User); } -/*------------------------------------------------------------------------------*/ -/* FONCTIONS OPTIMISATION MOYENNE (DS_MODE = 1) */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* FONCTIONS OPTIMISATION MOYENNE (DS_MODE = 1) */ +/*----------------------------------------------------------------------------*/ -/*------------------------------------------------------------------------------*/ -/* Ouverture d'une instance de la librairie */ -/*------------------------------------------------------------------------------*/ -/* (I) Instance : numéro de l'instance de la librairie */ -/* (I) Context : nom du contexte */ -/* (I) Debug_Mode : mode d'affichage des messages d'erreur */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Ouverture d'une instance de la librairie */ +/*----------------------------------------------------------------------------*/ +/* (I) Instance : numéro de l'instance de la librairie */ +/* (I) Context : nom du contexte */ +/* (I) Debug_Mode : mode d'affichage des messages d'erreur */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Library_Open_L ( int Instance, const char * Context, DST_Flags Debug_Mode ) { return DS_Library_Open_I (Instance, Context, Debug_Mode); } -/*------------------------------------------------------------------------------*/ -/* Fermeture de l'instance de la librairie */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Fermeture de l'instance de la librairie */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Library_Close_L ( void ) { return DS_Library_Close_I (); } -/*------------------------------------------------------------------------------*/ -/* Définition de la sortie standard des messages d'erreur de la librairie */ -/*------------------------------------------------------------------------------*/ -/* (I) Out : flux de sortie des messages d'erreur */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Définition de la sortie standard des messages d'erreur de la librairie */ +/*----------------------------------------------------------------------------*/ +/* (I) Out : flux de sortie des messages d'erreur */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Library_Stderr_Set_L ( FILE * Out ) { return DS_Library_Stderr_Set_I (Out); } -/*------------------------------------------------------------------------------*/ -/* Création / ouverture d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) DS_Name : nom de la structure */ -/* (O) Root : adresse du pointeur sur la racine de la structure */ -/* (I) Type : type de la structure de données */ -/* (I) Manager_FileName : nom du fichier qui définit les fonctions manager */ -/* (I) Segment_Size : taille ds segments du heap sous-jacent */ -/* (I) Open_Mode : mode d'ouverture de la structure */ -/* (I) Own_Values : indique si la structure possède ses valeurs */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_DataStruct_Open_L ( const char * DS_Name, NDT_Root ** Root,\ +/*----------------------------------------------------------------------------*/ +/* Création / ouverture d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) DS_Name : nom de la structure */ +/* (O) Root : adresse du pointeur sur la racine de la structure */ +/* (I) Type : type de la structure de données */ +/* (I) Manager_FileName : nom du fichier qui définit les fonctions manager */ +/* (I) Segment_Size : taille ds segments du heap sous-jacent */ +/* (I) Open_Mode : mode d'ouverture de la structure */ +/* (I) Own_Values : indique si la structure possède ses valeurs */ +/*----------------------------------------------------------------------------*/ +/* +DST_Status DS_DataStruct_Open_L ( const char * DS_Name, NDT_Root ** Root, \ NDT_DataStruct_Type Type, const char * Manager_FileName, \ size_t Segment_Size, DST_Flags Open_Mode, int Own_Values ) { return DS_DataStruct_Open_I (DS_Name, Root, Type, Manager_FileName, Segment_Size, Open_Mode, Own_Values); } -/*------------------------------------------------------------------------------*/ -/* Verrouillage d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure */ -/* (I) Lock_Mode : type de verrou à poser sur la structure */ -/* (O) Locked : verrou effectif (TRUE ou FALSE) */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Verrouillage d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure */ +/* (I) Lock_Mode : type de verrou à poser sur la structure */ +/* (O) Locked : verrou effectif (TRUE ou FALSE) */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Lock_L ( NDT_Root * Root, DST_Flags Lock_Mode, int * Locked ) { return DS_DataStruct_Lock_I (Root, Lock_Mode, Locked); } -/*------------------------------------------------------------------------------*/ -/* Déverrouillage d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Déverrouillage d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Unlock_L ( NDT_Root * Root ) { return DS_DataStruct_Unlock_I (Root); } -/*------------------------------------------------------------------------------*/ -/* Fermeture d'une structure de données */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Fermeture d'une structure de données */ +/*----------------------------------------------------------------------------*/ /* (I) Root : pointeur sur la racine de la structure de données à fermer */ -/* (I) Close_Mode : mode de fermeture de la structure (destruction ou non) */ -/*------------------------------------------------------------------------------*/ +/* (I) Close_Mode : mode de fermeture de la structure (destruction ou non) */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Close_L ( NDT_Root * Root, DST_Flags Close_Mode ) { return DS_DataStruct_Close_I (Root, Close_Mode); } -/*------------------------------------------------------------------------------*/ -/* Affiche les informations d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root: pointeur sur la racine de la structure de données */ -/* (I) Out : flux de sortie de l'affichage */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Affiche les informations d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root: pointeur sur la racine de la structure de données */ +/* (I) Out : flux de sortie de l'affichage */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Info_Print_L ( NDT_Root * Root, FILE * Out ) { DST_Status rc; int Locked; /* Verrouillage de la data structure en lecture */ - +/* rc = DS_DataStruct_Lock_I (Root, SMD_READ, &Locked); if (rc != DSS_OK) { @@ -1596,24 +1670,25 @@ DST_Status DS_DataStruct_Info_Print_L ( NDT_Root * Root, FILE * Out ) rc = DS_DataStruct_Info_Print_I (Root, Out); /* Déverrouillage de la data structure si besoin */ - +/* if (Locked == TRUE) DS_DataStruct_Unlock_I (Root); return rc; } -/*------------------------------------------------------------------------------*/ -/* Réorganisation d'une structure de données */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Réorganisation d'une structure de données */ +/*----------------------------------------------------------------------------*/ /* (I) Root : pointeur sur la racine de la structure de données à réorganiser */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Reorg_L ( NDT_Root * Root ) { DST_Status rc; int Locked; /* Verrouillage de la data structure en écriture */ - +/* rc = DS_DataStruct_Lock_I (Root, SMD_WRITE, &Locked); if (rc != DSS_OK) { @@ -1626,20 +1701,21 @@ DST_Status DS_DataStruct_Reorg_L ( NDT_Root * Root ) rc = DS_DataStruct_Reorg_I (Root); /* Déverrouillage de la data structure si besoin */ - +/* if (Locked == TRUE) DS_DataStruct_Unlock_I (Root); return rc; } -/*------------------------------------------------------------------------------*/ -/* Parcours de tous les noeuds d'une structure de données et exécution d'une */ -/* commande sur chacun d'eux */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données à parcourir */ -/* (I) Command : commande à exécuter sur chaque noeud traversé */ -/* (I) Data : pointeur de données utilisateur */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Parcours de tous les noeuds d'une structure de données et exécution d'une */ +/* commande sur chacun d'eux */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données à parcourir*/ +/* (I) Command : commande à exécuter sur chaque noeud traversé */ +/* (I) Data : pointeur de données utilisateur */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Traverse_L ( NDT_Root * Root, NDT_Command Command, void * Data ) { DST_Status rc; @@ -1647,7 +1723,7 @@ DST_Status DS_DataStruct_Traverse_L ( NDT_Root * Root, NDT_Command Command, void int Locked; /* Définition du mode de verrouillage de la data structure selon le type de commande */ - +/* switch ((int)Command) { case NDD_CMD_PRINT_VALUE: @@ -1662,7 +1738,7 @@ DST_Status DS_DataStruct_Traverse_L ( NDT_Root * Root, NDT_Command Command, void } /* Verrouillage de la data structure */ - +/* rc = DS_DataStruct_Lock_I (Root, Lock_Mode, &Locked); if (rc != DSS_OK) { @@ -1676,25 +1752,26 @@ DST_Status DS_DataStruct_Traverse_L ( NDT_Root * Root, NDT_Command Command, void rc = DS_DataStruct_Traverse_I (Root, Command, Data); /* Déverrouillage de la data structure si besoin */ - +/* if (Locked == TRUE) DS_DataStruct_Unlock_I (Root); return rc; } -/*------------------------------------------------------------------------------*/ -/* Conversion d'une structure de données d'un type en un autre */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Target_Type : type de structure cible */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Conversion d'une structure de données d'un type en un autre */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Target_Type : type de structure cible */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Convert_L ( NDT_Root * Root, NDT_DataStruct_Type Target_Type ) { DST_Status rc; int Locked; /* Verrouillage de la data structure en écriture */ - +/* rc = DS_DataStruct_Lock_I (Root, SMD_WRITE, &Locked); if (rc != DSS_OK) { @@ -1707,49 +1784,52 @@ DST_Status DS_DataStruct_Convert_L ( NDT_Root * Root, NDT_DataStruct_Type Target rc = DS_DataStruct_Convert_I (Root, Target_Type); /* Déverrouillage de la data structure si besoin */ - +/* if (Locked == TRUE) DS_DataStruct_Unlock_I (Root); return rc; } -/*------------------------------------------------------------------------------*/ -/* Affichage d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données à afficher */ -/* (I) Out : flux de sortie */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Affichage d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données à afficher */ +/* (I) Out : flux de sortie */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Print_L ( NDT_Root * Root, FILE * Out ) { return DS_DataStruct_Traverse_L (Root, NDD_CMD_PRINT_VALUE, Out); } -/*------------------------------------------------------------------------------*/ -/* Fonction de vérification / réparation d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure */ -/* (O) Nb_Detected : pointeur sur le nombre d'erreurs détectées */ -/* (O) Nb_Corrected : pointeur sur le nombre d'erreurs corrigées */ -/* (I) Out : flux de sortie du rapport */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Fonction de vérification / réparation d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure */ +/* (O) Nb_Detected : pointeur sur le nombre d'erreurs détectées */ +/* (O) Nb_Corrected : pointeur sur le nombre d'erreurs corrigées */ +/* (I) Out : flux de sortie du rapport */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Check_L ( NDT_Root * Root, int * Nb_Detected, int * Nb_Corrected, FILE * Out ) { return DS_DataStruct_Check_I (Root, Nb_Detected, Nb_Corrected, Out); } -/*------------------------------------------------------------------------------*/ -/* Affiche la structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure */ -/* (I) Out : flux de sortie */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Affiche la structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure */ +/* (I) Out : flux de sortie */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Dump_L ( NDT_Root * Root, FILE * Out ) { DST_Status rc; int Locked; /* Verrouillage de la data structure en lecture */ - +/* rc = DS_DataStruct_Lock_I (Root, SMD_READ, &Locked); if (rc != DSS_OK) { @@ -1762,25 +1842,26 @@ DST_Status DS_DataStruct_Dump_L ( NDT_Root * Root, FILE * Out ) rc = DS_DataStruct_Dump_I (Root, Out); /* Déverrouillage de la data structure si besoin */ - +/* if (Locked == TRUE) DS_DataStruct_Unlock_I (Root); return rc; } -/*------------------------------------------------------------------------------*/ -/* Récupération du premier noeud d'une structure */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine dont on cherche le premier noeud */ -/* (O) Node : pointeur sur le noeud à récupérer */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Récupération du premier noeud d'une structure */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine dont on cherche le premier noeud */ +/* (O) Node : pointeur sur le noeud à récupérer */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Node_First_Get_L ( NDT_Root * Root, NDT_Node ** Node ) { DST_Status rc; int Locked; /* Verrouillage de la data structure en lecture */ - +/* rc = DS_DataStruct_Lock_I (Root, SMD_READ, &Locked); if (rc != DSS_OK) { @@ -1793,25 +1874,26 @@ DST_Status DS_Node_First_Get_L ( NDT_Root * Root, NDT_Node ** Node ) rc = DS_Node_First_Get_I (Root, Node); /* Déverrouillage de la data structure si besoin */ - +/* if (Locked == TRUE) DS_DataStruct_Unlock_I (Root); return rc; } -/*------------------------------------------------------------------------------*/ -/* Récupération du dernier noeud d'une structure */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine dont on cherche le dernier noeud */ -/* (O) Node : pointeur sur le noeud à récupérer */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Récupération du dernier noeud d'une structure */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine dont on cherche le dernier noeud */ +/* (O) Node : pointeur sur le noeud à récupérer */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Node_Last_Get_L ( NDT_Root * Root, NDT_Node ** Node ) { DST_Status rc; int Locked; /* Verrouillage de la data structure en lecture */ - +/* rc = DS_DataStruct_Lock_I (Root, SMD_READ, &Locked); if (rc != DSS_OK) { @@ -1824,24 +1906,25 @@ DST_Status DS_Node_Last_Get_L ( NDT_Root * Root, NDT_Node ** Node ) rc = DS_Node_Last_Get_I (Root, Node); /* Déverrouillage de la data structure si besoin */ - +/* if (Locked == TRUE) DS_DataStruct_Unlock_I (Root); return rc; } -/*------------------------------------------------------------------------------*/ -/* Récupération du noeud suivant */ -/*------------------------------------------------------------------------------*/ -/* (I) Node : pointeur sur le noeud dont on cherche le suivant */ -/* (O) Next_Node : pointeur sur le noeud suivant */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Récupération du noeud suivant */ +/*----------------------------------------------------------------------------*/ +/* (I) Node : pointeur sur le noeud dont on cherche le suivant */ +/* (O) Next_Node : pointeur sur le noeud suivant */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Node_Next_Get_L ( NDT_Node * Node, NDT_Node ** Next_Node ) { DST_Status rc; int Locked; /* Verrouillage de la data structure en lecture */ - +/* rc = DS_DataStruct_Lock_I (Node->Root, SMD_READ, &Locked); if (rc != DSS_OK) { @@ -1854,25 +1937,26 @@ DST_Status DS_Node_Next_Get_L ( NDT_Node * Node, NDT_Node ** Next_Node ) rc = DS_Node_Next_Get_I (Node, Next_Node); /* Déverrouillage de la data structure si besoin */ - +/* if (Locked == TRUE) DS_DataStruct_Unlock_I (Node->Root); return rc; } -/*------------------------------------------------------------------------------*/ -/* Récupération du noeud précédant */ -/*------------------------------------------------------------------------------*/ -/* (I) Node : pointeur sur le noeud dont on cherche le précédant */ -/* (O) Prev_Node : pointeur sur le noeud précédant */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Récupération du noeud précédant */ +/*----------------------------------------------------------------------------*/ +/* (I) Node : pointeur sur le noeud dont on cherche le précédant */ +/* (O) Prev_Node : pointeur sur le noeud précédant */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Node_Previous_Get_L ( NDT_Node * Node, NDT_Node ** Prev_Node ) { DST_Status rc; int Locked; /* Verrouillage de la data structure en lecture */ - +/* rc = DS_DataStruct_Lock_I (Node->Root, SMD_READ, &Locked); if (rc != DSS_OK) { @@ -1885,25 +1969,26 @@ DST_Status DS_Node_Previous_Get_L ( NDT_Node * Node, NDT_Node ** Prev_Node ) rc = DS_Node_Previous_Get_I (Node, Prev_Node); /* Déverrouillage de la data structure si besoin */ - +/* if (Locked == TRUE) DS_DataStruct_Unlock_I (Node->Root); return rc; } -/*------------------------------------------------------------------------------*/ -/* Ajout d'un noeud à une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Node : pointeur sur le noeud à ajouter */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Ajout d'un noeud à une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Node : pointeur sur le noeud à ajouter */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Node_Add_L ( NDT_Root * Root, NDT_Node * Node ) { DST_Status rc; int Locked; /* Verrouillage de la data structure en écriture */ - +/* rc = DS_DataStruct_Lock_I (Root, SMD_WRITE, &Locked); if (rc != DSS_OK) { @@ -1916,17 +2001,18 @@ DST_Status DS_Node_Add_L ( NDT_Root * Root, NDT_Node * Node ) rc = DS_Node_Add_I (Root, Node); /* Déverrouillage de la data structure si besoin */ - +/* if (Locked == TRUE) DS_DataStruct_Unlock_I (Root); return rc; } -/*------------------------------------------------------------------------------*/ -/* Suppression d'un noeud dans une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Node : pointeur sur le noeud à supprimer */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Suppression d'un noeud dans une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Node : pointeur sur le noeud à supprimer */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Node_Remove_L ( NDT_Node * Node ) { DST_Status rc; @@ -1934,7 +2020,7 @@ DST_Status DS_Node_Remove_L ( NDT_Node * Node ) NDT_Root * Root = Node->Root; /* Verrouillage de la data structure en écriture */ - +/* rc = DS_DataStruct_Lock_I (Root, SMD_WRITE, &Locked); if (rc != DSS_OK) { @@ -1947,27 +2033,28 @@ DST_Status DS_Node_Remove_L ( NDT_Node * Node ) rc = DS_Node_Remove_I (Node); /* Déverrouillage de la data structure si besoin */ - +/* if (Locked == TRUE) DS_DataStruct_Unlock_I (Root); return rc; } -/*------------------------------------------------------------------------------*/ -/* Recherche un noeud dans un arbre et retourne le pointeur sur le noeud */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de l'abre */ -/* (O) Node : adresse du pointeur sur le noeud à récuperer */ -/* (I) Value : pointeur sur la valeur à rechercher */ -/* (I) Data : pointeur de données */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Recherche un noeud dans un arbre et retourne le pointeur sur le noeud */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de l'abre */ +/* (O) Node : adresse du pointeur sur le noeud à récuperer */ +/* (I) Value : pointeur sur la valeur à rechercher */ +/* (I) Data : pointeur de données */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Node_Find_L ( NDT_Root * Root, NDT_Node ** Node, void * Value, void * Data ) { DST_Status rc; int Locked; /* Verrouillage de la data structure en lecture */ - +/* rc = DS_DataStruct_Lock_I (Root, SMD_READ, &Locked); if (rc != DSS_OK) { @@ -1980,30 +2067,31 @@ DST_Status DS_Node_Find_L ( NDT_Root * Root, NDT_Node ** Node, void * Value, voi rc = DS_Node_Find_I (Root, Node, Value, Data); /* Déverrouillage de la data structure si besoin */ - +/* if (Locked == TRUE) DS_DataStruct_Unlock_I (Root); return rc; } -/*------------------------------------------------------------------------------*/ -/* Allocation d'une valeur d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (O) Value : adresse d'un pointeur sur la valeur à allouer */ -/* (I) ... : arguments relatifs à l'allocation de la valeur */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Allocation d'une valeur d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (O) Value : adresse d'un pointeur sur la valeur à allouer */ +/* (I) ... : arguments relatifs à l'allocation de la valeur */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Value_Alloc_L ( NDT_Root * Root, void ** Value, ... ) { DST_Status rc; va_list Args; /* Récupération des arguments pour l'allocation de la valeur */ - +/* va_start (Args, Value); /* Appel du manager */ - +/* rc = ND_Manager_Exec (Root->Manager, NDD_CMD_MAKE_VALUE, Root, Value, Args); va_end (Args); @@ -2011,19 +2099,20 @@ DST_Status DS_Value_Alloc_L ( NDT_Root * Root, void ** Value, ... ) return rc; } -/*------------------------------------------------------------------------------*/ -/* Ajout d'une valeur à une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Value : pointeur sur la valeur à ajouter à la structure de données */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Ajout d'une valeur à une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Value : pointeur sur la valeur à ajouter à la structure de données */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Value_Add_L ( NDT_Root * Root, void * Value ) { DST_Status rc; int Locked; /* Verrouillage de la data structure en écriture */ - +/* rc = DS_DataStruct_Lock_I (Root, SMD_WRITE, &Locked); if (rc != DSS_OK) { @@ -2034,30 +2123,31 @@ DST_Status DS_Value_Add_L ( NDT_Root * Root, void * Value ) } /* Ajout de la valeur */ - +/* rc = DS_Value_Add_I (Root, Value); /* Déverrouillage de la data structure si besoin */ - +/* if (Locked == TRUE) DS_DataStruct_Unlock_I (Root); return rc; } -/*------------------------------------------------------------------------------*/ -/* Suppression du premier noeud correspondant à une valeur donnée */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Reference_Value : pointeur sur la valeur de référence */ -/* (I) Removed_Value : adresse d'un pointeur sur la valeur supprimée */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Suppression du premier noeud correspondant à une valeur donnée */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Reference_Value : pointeur sur la valeur de référence */ +/* (I) Removed_Value : adresse d'un pointeur sur la valeur supprimée */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Value_Remove_L ( NDT_Root * Root, void * Reference_Value, void ** Removed_Value ) { DST_Status rc; int Locked; /* Verrouillage de la data structure en écriture */ - +/* rc = DS_DataStruct_Lock_I (Root, SMD_WRITE, &Locked); if (rc != DSS_OK) { @@ -2070,92 +2160,99 @@ DST_Status DS_Value_Remove_L ( NDT_Root * Root, void * Reference_Value, void ** rc = DS_Value_Remove_I (Root, Reference_Value, Removed_Value); /* Déverrouillage de la data structure si besoin */ - +/* if (Locked == TRUE) DS_DataStruct_Unlock_I (Root); return DSS_OK; } -/*------------------------------------------------------------------------------*/ -/* Désallocation d'une valeur d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Value : pointeur sur la valeur à désallouer */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Désallocation d'une valeur d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Value : pointeur sur la valeur à désallouer */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Value_Free_L ( NDT_Root * Root, void * Value ) { return ND_Value_Free (Root, Value); } -/*------------------------------------------------------------------------------*/ -/* Allocation de mémoire pour une structure de données : */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Size : taille mémoire à allouer */ -/* (O) Ptr : adresse du pointeur sur la zone de données allouée */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Allocation de mémoire pour une structure de données : */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Size : taille mémoire à allouer */ +/* (O) Ptr : adresse du pointeur sur la zone de données allouée */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Alloc_L ( NDT_Root * Root, size_t Size, void ** Ptr ) { return DS_DataStruct_Alloc (Size, Ptr, Root->User); } -/*------------------------------------------------------------------------------*/ -/* Désallocation d'une ressource pour une structure de données : */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Ptr : pointeur sur la zone à désallouer */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Désallocation d'une ressource pour une structure de données : */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Ptr : pointeur sur la zone à désallouer */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Free_L ( NDT_Root * Root, void * Ptr ) { return DS_DataStruct_Free (Ptr, Root->User); } -/*------------------------------------------------------------------------------*/ -/* FONCTIONS SECURISEES (DS_MODE = 0) */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* FONCTIONS SECURISEES (DS_MODE = 0) */ +/*----------------------------------------------------------------------------*/ -/*------------------------------------------------------------------------------*/ -/* Ouverture d'une instance de la librairie */ -/*------------------------------------------------------------------------------*/ -/* (I) Instance : numéro de l'instance de la librairie */ -/* (I) Context : nom du contexte */ -/* (I) Debug_Mode : mode d'affichage des messages d'erreur */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Ouverture d'une instance de la librairie */ +/*----------------------------------------------------------------------------*/ +/* (I) Instance : numéro de l'instance de la librairie */ +/* (I) Context : nom du contexte */ +/* (I) Debug_Mode : mode d'affichage des messages d'erreur */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Library_Open_CL ( int Instance, const char * Context, DST_Flags Debug_Mode ) { return DS_Library_Open_I (Instance, Context, Debug_Mode ); } -/*------------------------------------------------------------------------------*/ -/* Fermeture de l'instance de la librairie */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Fermeture de l'instance de la librairie */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Library_Close_CL ( void ) { return DS_Library_Close_I (); } -/*------------------------------------------------------------------------------*/ -/* Définition de la sortie standard des messages d'erreur de la librairie */ -/*------------------------------------------------------------------------------*/ -/* (I) Out : flux de sortie des messages d'erreur */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Définition de la sortie standard des messages d'erreur de la librairie */ +/*----------------------------------------------------------------------------*/ +/* (I) Out : flux de sortie des messages d'erreur */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Library_Stderr_Set_CL ( FILE * Out ) { return DS_Library_Stderr_Set_I (Out); } -/*------------------------------------------------------------------------------*/ -/* Création / ouverture d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) DS_Name : nom de la structure */ -/* (O) Root : adresse du pointeur sur la racine de la structure */ -/* (I) Type : type de la structure de données */ -/* (I) Manager_FileName : nom du fichier qui définit les fonctions manager */ -/* (I) Segment_Size : taille ds segments du heap sous-jacent */ -/* (I) Open_Mode : mode d'ouverture de la structure */ -/* (I) Own_Values : indique si la structure possède ses valeurs */ -/*------------------------------------------------------------------------------*/ -DST_Status DS_DataStruct_Open_CL ( const char * DS_Name, NDT_Root ** Root,\ +/*----------------------------------------------------------------------------*/ +/* Création / ouverture d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) DS_Name : nom de la structure */ +/* (O) Root : adresse du pointeur sur la racine de la structure */ +/* (I) Type : type de la structure de données */ +/* (I) Manager_FileName : nom du fichier qui définit les fonctions manager */ +/* (I) Segment_Size : taille ds segments du heap sous-jacent */ +/* (I) Open_Mode : mode d'ouverture de la structure */ +/* (I) Own_Values : indique si la structure possède ses valeurs */ +/*----------------------------------------------------------------------------*/ +/* +DST_Status DS_DataStruct_Open_CL ( const char * DS_Name, NDT_Root ** Root, \ NDT_DataStruct_Type Type, const char * Manager_FileName, \ size_t Segment_Size, DST_Flags Open_Mode, int Own_Values ) { @@ -2186,13 +2283,14 @@ DST_Status DS_DataStruct_Open_CL ( const char * DS_Name, NDT_Root ** Root,\ return DS_DataStruct_Open_I (DS_Name, Root, Type, Manager_FileName, Segment_Size, Open_Mode, Own_Values); } -/*------------------------------------------------------------------------------*/ -/* Verrouillage d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure */ -/* (I) Lock_Mode : type de verrou à poser sur la structure */ -/* (O) Locked : verrou effectif (TRUE ou FALSE) */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Verrouillage d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure */ +/* (I) Lock_Mode : type de verrou à poser sur la structure */ +/* (O) Locked : verrou effectif (TRUE ou FALSE) */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Lock_CL ( NDT_Root * Root, DST_Flags Lock_Mode, int * Locked ) { if (!Root) @@ -2214,11 +2312,12 @@ DST_Status DS_DataStruct_Lock_CL ( NDT_Root * Root, DST_Flags Lock_Mode, int * L return DS_DataStruct_Lock_I (Root, Lock_Mode, Locked); } -/*------------------------------------------------------------------------------*/ -/* Déverrouillage d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Déverrouillage d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Unlock_CL ( NDT_Root * Root ) { if (!Root) @@ -2232,12 +2331,13 @@ DST_Status DS_DataStruct_Unlock_CL ( NDT_Root * Root ) return DS_DataStruct_Unlock_I (Root); } -/*------------------------------------------------------------------------------*/ -/* Fermeture d'une structure de données */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Fermeture d'une structure de données */ +/*----------------------------------------------------------------------------*/ /* (I) Root : pointeur sur la racine de la structure de données à fermer */ -/* (I) Close_Mode : mode de fermeture de la structure (destruction ou non) */ -/*------------------------------------------------------------------------------*/ +/* (I) Close_Mode : mode de fermeture de la structure (destruction ou non) */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Close_CL ( NDT_Root * Root, DST_Flags Close_Mode ) { if (!Root) @@ -2251,12 +2351,13 @@ DST_Status DS_DataStruct_Close_CL ( NDT_Root * Root, DST_Flags Close_Mode ) return DS_DataStruct_Close_I (Root, Close_Mode); } -/*------------------------------------------------------------------------------*/ -/* Affiche les informations d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root: pointeur sur la racine de la structure de données */ -/* (I) Out : flux de sortie de l'affichage */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Affiche les informations d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root: pointeur sur la racine de la structure de données */ +/* (I) Out : flux de sortie de l'affichage */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Info_Print_CL ( NDT_Root * Root, FILE * Out ) { if (!Root) @@ -2278,11 +2379,12 @@ DST_Status DS_DataStruct_Info_Print_CL ( NDT_Root * Root, FILE * Out ) return DS_DataStruct_Info_Print_L (Root, Out); } -/*------------------------------------------------------------------------------*/ -/* Réorganisation d'une structure de données */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Réorganisation d'une structure de données */ +/*----------------------------------------------------------------------------*/ /* (I) Root : pointeur sur la racine de la structure de données à réorganiser */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Reorg_CL ( NDT_Root * Root ) { if (!Root) @@ -2296,14 +2398,15 @@ DST_Status DS_DataStruct_Reorg_CL ( NDT_Root * Root ) return DS_DataStruct_Reorg_L (Root); } -/*------------------------------------------------------------------------------*/ -/* Parcours de tous les noeuds d'une structure de données et exécution d'une */ -/* commande sur chacun d'eux */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données à parcourir */ -/* (I) Command : commande à exécuter sur chaque noeud traversé */ -/* (I) Data : pointeur de données utilisateur */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Parcours de tous les noeuds d'une structure de données et exécution d'une */ +/* commande sur chacun d'eux */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données à parcourir*/ +/* (I) Command : commande à exécuter sur chaque noeud traversé */ +/* (I) Data : pointeur de données utilisateur */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Traverse_CL ( NDT_Root * Root, NDT_Command Command, void * Data ) { if (!Root) @@ -2317,12 +2420,13 @@ DST_Status DS_DataStruct_Traverse_CL ( NDT_Root * Root, NDT_Command Command, voi return DS_DataStruct_Traverse_L (Root, Command, Data); } -/*------------------------------------------------------------------------------*/ -/* Conversion d'une structure de données d'un type en un autre */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Target_Type : type de structure cible */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Conversion d'une structure de données d'un type en un autre */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Target_Type : type de structure cible */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Convert_CL ( NDT_Root * Root, NDT_DataStruct_Type Target_Type ) { if (!Root) @@ -2336,25 +2440,27 @@ DST_Status DS_DataStruct_Convert_CL ( NDT_Root * Root, NDT_DataStruct_Type Targe return DS_DataStruct_Convert_L (Root, Target_Type); } -/*------------------------------------------------------------------------------*/ -/* Affichage d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données à afficher */ -/* (I) Out : flux de sortie */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Affichage d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données à afficher */ +/* (I) Out : flux de sortie */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Print_CL ( NDT_Root * Root, FILE * Out ) { return DS_DataStruct_Traverse_CL (Root, NDD_CMD_PRINT_VALUE, Out); } -/*------------------------------------------------------------------------------*/ -/* Fonction de vérification / réparation d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure */ -/* (O) Nb_Detected : pointeur sur le nombre d'erreurs détectées */ -/* (O) Nb_Corrected : pointeur sur le nombre d'erreurs corrigées */ -/* (I) Out : flux de sortie du rapport */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Fonction de vérification / réparation d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure */ +/* (O) Nb_Detected : pointeur sur le nombre d'erreurs détectées */ +/* (O) Nb_Corrected : pointeur sur le nombre d'erreurs corrigées */ +/* (I) Out : flux de sortie du rapport */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Check_CL ( NDT_Root * Root, int * Nb_Detected, int * Nb_Corrected, FILE * Out ) { if (!Root) @@ -2384,12 +2490,13 @@ DST_Status DS_DataStruct_Check_CL ( NDT_Root * Root, int * Nb_Detected, int * Nb return DS_DataStruct_Check_I (Root, Nb_Detected, Nb_Corrected, Out); } -/*------------------------------------------------------------------------------*/ -/* Affiche la structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure */ -/* (I) Out : flux de sortie */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Affiche la structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure */ +/* (I) Out : flux de sortie */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Dump_CL ( NDT_Root * Root, FILE * Out ) { if (!Root) @@ -2411,12 +2518,13 @@ DST_Status DS_DataStruct_Dump_CL ( NDT_Root * Root, FILE * Out ) return DS_DataStruct_Dump_L (Root, Out); } -/*------------------------------------------------------------------------------*/ -/* Récupération du premier noeud d'une structure */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine dont on cherche le premier noeud */ -/* (O) First_Node : adresse d'un pointeur sur le premier noeud à récupérer */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Récupération du premier noeud d'une structure */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine dont on cherche le premier noeud */ +/* (O) First_Node : adresse d'un pointeur sur le premier noeud à récupérer */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Node_First_Get_CL ( NDT_Root * Root, NDT_Node ** First_Node ) { if (!Root) @@ -2438,12 +2546,13 @@ DST_Status DS_Node_First_Get_CL ( NDT_Root * Root, NDT_Node ** First_Node ) return DS_Node_First_Get_L (Root, First_Node); } -/*------------------------------------------------------------------------------*/ -/* Récupération du dernier noeud d'une structure */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la data structure */ -/* (O) Last_Node : adresse d'un pointeur sur le dernier noeud */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Récupération du dernier noeud d'une structure */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la data structure */ +/* (O) Last_Node : adresse d'un pointeur sur le dernier noeud */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Node_Last_Get_CL ( NDT_Root * Root, NDT_Node ** Last_Node ) { if (!Root) @@ -2464,12 +2573,13 @@ DST_Status DS_Node_Last_Get_CL ( NDT_Root * Root, NDT_Node ** Last_Node ) return DS_Node_Last_Get_L (Root, Last_Node); } -/*------------------------------------------------------------------------------*/ -/* Récupération du noeud suivant */ -/*------------------------------------------------------------------------------*/ -/* (I) Node : pointeur sur le noeud dont on cherche le suivant */ -/* (O) Next_Node : pointeur sur le noeud suivant */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Récupération du noeud suivant */ +/*----------------------------------------------------------------------------*/ +/* (I) Node : pointeur sur le noeud dont on cherche le suivant */ +/* (O) Next_Node : pointeur sur le noeud suivant */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Node_Next_Get_CL ( NDT_Node * Node, NDT_Node ** Next_Node ) { if (!Node) @@ -2491,12 +2601,13 @@ DST_Status DS_Node_Next_Get_CL ( NDT_Node * Node, NDT_Node ** Next_Node ) return DS_Node_Next_Get_L (Node, Next_Node); } -/*------------------------------------------------------------------------------*/ -/* Récupération du noeud précédant */ -/*------------------------------------------------------------------------------*/ -/* (I) Node : pointeur sur le noeud dont on cherche le précédant */ -/* (O) Prev_Node : pointeur sur le noeud précédant */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Récupération du noeud précédant */ +/*----------------------------------------------------------------------------*/ +/* (I) Node : pointeur sur le noeud dont on cherche le précédant */ +/* (O) Prev_Node : pointeur sur le noeud précédant */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Node_Previous_Get_CL ( NDT_Node * Node, NDT_Node ** Prev_Node ) { if (!Node) @@ -2518,12 +2629,13 @@ DST_Status DS_Node_Previous_Get_CL ( NDT_Node * Node, NDT_Node ** Prev_Node ) return DS_Node_Previous_Get_L (Node, Prev_Node); } -/*------------------------------------------------------------------------------*/ -/* Ajout d'un noeud à une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Node : pointeur sur le noeud à ajouter */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Ajout d'un noeud à une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Node : pointeur sur le noeud à ajouter */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Node_Add_CL ( NDT_Root * Root, NDT_Node * Node ) { if (!Root) @@ -2545,11 +2657,12 @@ DST_Status DS_Node_Add_CL ( NDT_Root * Root, NDT_Node * Node ) return DS_Node_Add_L (Root, Node); } -/*------------------------------------------------------------------------------*/ -/* Suppression d'un noeud dans une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Node : pointeur sur le noeud à supprimer */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Suppression d'un noeud dans une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Node : pointeur sur le noeud à supprimer */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Node_Remove_CL ( NDT_Node * Node ) { if (!Node) @@ -2563,14 +2676,15 @@ DST_Status DS_Node_Remove_CL ( NDT_Node * Node ) return DS_Node_Remove_L (Node); } -/*------------------------------------------------------------------------------*/ -/* Recherche un noeud dans un arbre et retourne le pointeur sur le noeud */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de l'abre */ -/* (O) Node : adresse du pointeur sur le noeud à récuperer */ -/* (I) Value : pointeur sur la valeur à rechercher */ -/* (I) Data : pointeur de données */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Recherche un noeud dans un arbre et retourne le pointeur sur le noeud */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de l'abre */ +/* (O) Node : adresse du pointeur sur le noeud à récuperer */ +/* (I) Value : pointeur sur la valeur à rechercher */ +/* (I) Data : pointeur de données */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Node_Find_CL ( NDT_Root * Root, NDT_Node ** Node, void * Value, void * Data ) { if (!Root) @@ -2600,13 +2714,14 @@ DST_Status DS_Node_Find_CL ( NDT_Root * Root, NDT_Node ** Node, void * Value, vo return DS_Node_Find_L (Root, Node, Value, Data); } -/*------------------------------------------------------------------------------*/ -/* Allocation d'une valeur d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (O) Value : adresse d'un pointeur sur la valeur à allouer */ -/* (I) ... : arguments relatifs à l'allocation de la valeur */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Allocation d'une valeur d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (O) Value : adresse d'un pointeur sur la valeur à allouer */ +/* (I) ... : arguments relatifs à l'allocation de la valeur */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Value_Alloc_CL ( NDT_Root * Root, void ** Value, ... ) { DST_Status rc; @@ -2627,11 +2742,11 @@ DST_Status DS_Value_Alloc_CL ( NDT_Root * Root, void ** Value, ... ) } /* Récupération des arguments pour l'allocation de la valeur */ - +/* va_start (Args, Value); /* Appel du manager */ - +/* rc = ND_Manager_Exec (Root->Manager, NDD_CMD_MAKE_VALUE, Root, Value, Args); va_end (Args); @@ -2639,12 +2754,13 @@ DST_Status DS_Value_Alloc_CL ( NDT_Root * Root, void ** Value, ... ) return rc; } -/*------------------------------------------------------------------------------*/ -/* Ajout d'une valeur à une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Value : pointeur sur la valeur à ajouter à la structure de données */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Ajout d'une valeur à une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Value : pointeur sur la valeur à ajouter à la structure de données */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Value_Add_CL ( NDT_Root * Root, void * Value ) { if (!Root) @@ -2666,13 +2782,14 @@ DST_Status DS_Value_Add_CL ( NDT_Root * Root, void * Value ) return DS_Value_Add_L (Root, Value); } -/*------------------------------------------------------------------------------*/ -/* Suppression du premier noeud correspondant à une valeur donnée */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Reference_Value : pointeur sur la valeur de référence */ -/* (I) Removed_Value : adresse d'un pointeur sur la valeur supprimée */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Suppression du premier noeud correspondant à une valeur donnée */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Reference_Value : pointeur sur la valeur de référence */ +/* (I) Removed_Value : adresse d'un pointeur sur la valeur supprimée */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Value_Remove_CL ( NDT_Root * Root, void * Reference_Value, void ** Removed_Value ) { if (!Root) @@ -2702,12 +2819,13 @@ DST_Status DS_Value_Remove_CL ( NDT_Root * Root, void * Reference_Value, void ** return DS_Value_Remove_L (Root, Reference_Value, Removed_Value); } -/*------------------------------------------------------------------------------*/ -/* Désallocation d'une valeur d'une structure de données */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Value : pointeur sur la valeur à désallouer */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Désallocation d'une valeur d'une structure de données */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Value : pointeur sur la valeur à désallouer */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Value_Free_CL ( NDT_Root * Root, void * Value ) { if (!Root) @@ -2729,13 +2847,14 @@ DST_Status DS_Value_Free_CL ( NDT_Root * Root, void * Value ) return DS_Value_Free_L (Root, Value); } -/*------------------------------------------------------------------------------*/ -/* Allocation de mémoire pour une structure de données : */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Size : taille mémoire à allouer */ -/* (O) Ptr : adresse du pointeur sur la zone de données allouée */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Allocation de mémoire pour une structure de données : */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Size : taille mémoire à allouer */ +/* (O) Ptr : adresse du pointeur sur la zone de données allouée */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Alloc_CL ( NDT_Root * Root, size_t Size, void ** Ptr ) { if (!Root) @@ -2765,12 +2884,13 @@ DST_Status DS_Alloc_CL ( NDT_Root * Root, size_t Size, void ** Ptr ) return DS_Alloc_L (Root, Size, Ptr); } -/*------------------------------------------------------------------------------*/ -/* Désallocation d'une ressource pour une structure de données : */ -/*------------------------------------------------------------------------------*/ -/* (I) Root : pointeur sur la racine de la structure de données */ -/* (I) Ptr : pointeur sur la zone à désallouer */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Désallocation d'une ressource pour une structure de données : */ +/*----------------------------------------------------------------------------*/ +/* (I) Root : pointeur sur la racine de la structure de données */ +/* (I) Ptr : pointeur sur la zone à désallouer */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Free_CL ( NDT_Root * Root, void * Ptr ) { if (!Root) @@ -2792,18 +2912,19 @@ DST_Status DS_Free_CL ( NDT_Root * Root, void * Ptr ) return DS_Free_L (Root, Ptr); } -/*------------------------------------------------------------------------------*/ -/*------------------------------------------------------------------------------*/ -/* FONCTIONS PRIVEES */ -/*------------------------------------------------------------------------------*/ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* FONCTIONS PRIVEES */ +/*----------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ -/*------------------------------------------------------------------------------*/ -/* Teste si une data structure a déjà été ouverte par le processus courant : */ -/*------------------------------------------------------------------------------*/ -/* (I) DS_Name : nom de la data structure */ -/* (O) Root : adresse du pointeur sur la racine de la structure */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Teste si une data structure a déjà été ouverte par le processus courant : */ +/*----------------------------------------------------------------------------*/ +/* (I) DS_Name : nom de la data structure */ +/* (O) Root : adresse du pointeur sur la racine de la structure */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_IsOpen ( const char * DS_Name, NDT_Root ** Root ) { DST_Status rc; @@ -2823,9 +2944,10 @@ DST_Status DS_DataStruct_IsOpen ( const char * DS_Name, NDT_Root ** Root ) return DSS_YES; } -/*------------------------------------------------------------------------------*/ -/* Fonction d'allocation attachée à une structure de données : */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Fonction d'allocation attachée à une structure de données : */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Alloc ( size_t Size, void ** Ptr, void * Data ) { DST_Status rc; @@ -2844,7 +2966,7 @@ DST_Status DS_DataStruct_Alloc ( size_t Size, void ** Ptr, void * Data ) } /* Verrouillage du heap en écriture */ - +/* rc = SM_Heap_Lock (Heap, SMD_WRITE, &Locked); if (rc != DSS_OK) { @@ -2855,7 +2977,7 @@ DST_Status DS_DataStruct_Alloc ( size_t Size, void ** Ptr, void * Data ) } /* Allocation du chunk */ - +/* rc = SM_Chunk_Alloc (Heap, Size, Ptr); if (rc != SMS_OK) { @@ -2864,15 +2986,16 @@ DST_Status DS_DataStruct_Alloc ( size_t Size, void ** Ptr, void * Data ) } /* Déverrouillage de la data structure si besoin */ - +/* if (Locked == TRUE) SM_Heap_Unlock (Heap); return DSS_OK; } -/*------------------------------------------------------------------------------*/ -/* Fonction de désallocation attachée à une structure de données : */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Fonction de désallocation attachée à une structure de données : */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_DataStruct_Free ( void * Ptr, void * Data ) { DST_Status rc; @@ -2891,7 +3014,7 @@ DST_Status DS_DataStruct_Free ( void * Ptr, void * Data ) } /* Verrouillage de la data structure en écriture */ - +/* rc = SM_Heap_Lock (Heap, SMD_WRITE, &Locked); if (rc != DSS_OK) { @@ -2902,7 +3025,7 @@ DST_Status DS_DataStruct_Free ( void * Ptr, void * Data ) } /* Désallocation du chunk */ - +/* rc = SM_Chunk_Free (Heap, Ptr); if (rc != SMS_OK) { @@ -2911,23 +3034,25 @@ DST_Status DS_DataStruct_Free ( void * Ptr, void * Data ) } /* Déverrouillage de la data structure si besoin */ - +/* if (Locked == TRUE) SM_Heap_Unlock (Heap); return DSS_OK; } -/*------------------------------------------------------------------------------*/ -/* Routine d'affichage d'un message d'erreur */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Routine d'affichage d'un message d'erreur */ +/*----------------------------------------------------------------------------*/ +/* void DS_Error_Print ( void ) { if (DS_stderr) fprintf (DS_stderr, "%s\n", DS_Error_Msg); } -/*------------------------------------------------------------------------------*/ -/* Pour préfixer les noms de heap avec l'identifiant de la librairie */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Pour préfixer les noms de heap avec l'identifiant de la librairie */ +/*----------------------------------------------------------------------------*/ +/* static char * DS_Name_Prefix ( const char * Name ) { static char Prefixed [256]; @@ -2937,16 +3062,17 @@ static char * DS_Name_Prefix ( const char * Name ) return Prefixed; } -/*------------------------------------------------------------------------------*/ -/* Création d'un sémaphore pour gérer l'ouverture d'une data structure */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Création d'un sémaphore pour gérer l'ouverture d'une data structure */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Semaphore_Create ( NDT_Root * Root ) { union semun Sem_Ctl; DST_RootDesc * RootDesc = (DST_RootDesc *)(Root->User); /* Création du sémaphore */ - +/* RootDesc->OpenSemID = semget (IPC_PRIVATE, 1, 0777|IPC_CREAT|IPC_EXCL); if (RootDesc->OpenSemID == -1) { @@ -2971,7 +3097,7 @@ DST_Status DS_Semaphore_Create ( NDT_Root * Root ) } /* Initialisation du sémaphore à 0 */ - +/* Sem_Ctl.val = 0; if (semctl (RootDesc->OpenSemID, 0, SETVAL, Sem_Ctl)) { @@ -2986,9 +3112,10 @@ DST_Status DS_Semaphore_Create ( NDT_Root * Root ) return DSS_OK; } -/*------------------------------------------------------------------------------*/ -/* Opération sur un sémaphore */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Opération sur un sémaphore */ +/*----------------------------------------------------------------------------*/ +/* DST_Status DS_Semaphore_Operate (int SemID, struct sembuf * Operations, unsigned int Nb_Oper) { if (semop (SemID, Operations, Nb_Oper) == -1) @@ -3036,9 +3163,10 @@ DST_Status DS_Semaphore_Operate (int SemID, struct sembuf * Operations, unsigned return DSS_OK; } -/*------------------------------------------------------------------------------*/ -/* Fonction manager de la liste des DS ouvertes */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Fonction manager de la liste des DS ouvertes */ +/*----------------------------------------------------------------------------*/ +/* NDT_Status DS_OpenedDS_List_Manager ( va_list Args ) { NDT_Command Command = (NDT_Command) va_arg (Args, NDT_Command); diff --git a/lib/libdatastr.h b/lib/libdatastr.h index d27094a..7c0e6e4 100644 --- a/lib/libdatastr.h +++ b/lib/libdatastr.h @@ -1,3 +1,31 @@ +/*----------------------------------------------------------------------------*/ +/* libdatastr.h */ +/*----------------------------------------------------------------------------*/ + +/*----------------------------------------------------------------------------*/ +/* This file is part of LibDataStr. */ +/* */ +/* LibDataStr is free software: you can redistribute it and/or modify it */ +/* under the terms of the GNU Lesser General Public License as published */ +/* by the Free Software Foundation, either version 3 of the License, or */ +/* (at your option) any later version. */ +/* */ +/* LibDataStr is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU Lesser General Public License for more details. */ +/* */ +/* You should have received a copy of the GNU Lesser General Public */ +/* License along with LibDataStr. If not, see */ +/* . */ +/*----------------------------------------------------------------------------*/ + + + +/*----------------------------------------------------------------------------*/ +/* Includes */ +/*----------------------------------------------------------------------------*/ + #include #include #include @@ -7,7 +35,9 @@ #include #include #include -#include + +//#include + #include #include @@ -50,48 +80,48 @@ typedef struct { char * Name; } DST_DataStruct; -/*------------------------------------------------------------------------------*/ -/*------------------------------------------------------------------------------*/ -/* Fonctions privées de la librairie */ -/*------------------------------------------------------------------------------*/ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Fonctions privées de la librairie */ +/*----------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ -/*------------------------------------------------------------------------------*/ -/* Création d'un sémaphore pour gérer l'ouverture d'une data structure */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Création d'un sémaphore pour gérer l'ouverture d'une data structure */ +/*----------------------------------------------------------------------------*/ DST_Status DS_Semaphore_Create (NDT_Root * Root); -/*------------------------------------------------------------------------------*/ -/* Opération sur un sémaphore */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Opération sur un sémaphore */ +/*----------------------------------------------------------------------------*/ DST_Status DS_Semaphore_Operate (int, struct sembuf *, unsigned int); -/*------------------------------------------------------------------------------*/ -/* Fonction d'allocation attachée à une structure de données : */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Fonction d'allocation attachée à une structure de données : */ +/*----------------------------------------------------------------------------*/ DST_Status DS_DataStruct_Alloc ( size_t Size, void ** Ptr, void * Data ); -/*------------------------------------------------------------------------------*/ -/* Fonction de désallocation attachée à une structure de données : */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Fonction de désallocation attachée à une structure de données : */ +/*----------------------------------------------------------------------------*/ DST_Status DS_DataStruct_Free ( void * Ptr, void * Data ); -/*------------------------------------------------------------------------------*/ -/* Routine d'affichage d'un message d'erreur */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Routine d'affichage d'un message d'erreur */ +/*----------------------------------------------------------------------------*/ void DS_Error_Print ( void ); -/*------------------------------------------------------------------------------*/ -/* Pour préfixer les noms de heap avec l'identifiant de la librairie */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Pour préfixer les noms de heap avec l'identifiant de la librairie */ +/*----------------------------------------------------------------------------*/ static char * DS_Name_Prefix (const char * Name); -/*------------------------------------------------------------------------------*/ -/* Teste si une data structure a déjà été ouverte par le processus courant */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Teste si une data structure a déjà été ouverte par le processus courant */ +/*----------------------------------------------------------------------------*/ DST_Status DS_DataStruct_IsOpen (const char * DS_Name, NDT_Root ** Root); -/*------------------------------------------------------------------------------*/ -/* Fonction manager de la liste des DS ouvertes */ -/*------------------------------------------------------------------------------*/ +/*----------------------------------------------------------------------------*/ +/* Fonction manager de la liste des DS ouvertes */ +/*----------------------------------------------------------------------------*/ NDT_Status DS_OpenedDS_List_Manager (va_list Args); diff --git a/util/Makefile b/util/Makefile index e0b4152..ff5958e 100644 --- a/util/Makefile +++ b/util/Makefile @@ -11,12 +11,12 @@ include ../Makefile.rule -DEP_STATIC += ../lib/libnode.a ../../liblog/lib/liblog.a -DEP_DYNAMIC += ../lib/libnode.so ../../liblog/lib/liblog.so -INCLUDE += -I . -I ../include -I ../../liblog/include -LIBDIR += -L . -L ../lib -L ../../liblog/lib -LIB_STATIC += ../lib/libnode.a ../../liblog/lib/liblog.a -ldl -LIB_DYNAMIC += -lnode -llog -ldl +DEP_STATIC += ../lib/libdatastr.a ../../libshmem/lib/libshmem.a ../../libnode/lib/libnode.a ../../liblog/lib/liblog.a +DEP_DYNAMIC += ../lib/libdatastr.so ../lib/libnode.so ../../liblog/lib/liblog.so +INCLUDE += -I . -I ../include -I ../../liblog/include -I ../../libnode/include -I ../../libshmem/include +LIBDIR += -L . -L ../lib -L ../../liblog/lib -L ../../libnode/lib -L ../../libshmem/lib +LIB_STATIC += ../lib/libdatastr.a ../../libshmem/lib/libshmem.a ../../libnode/lib/libnode.a ../../liblog/lib/liblog.a -ldl +LIB_DYNAMIC += -ldatastr -lshmem -lnode -llog -ldl CFLAGS += -rdynamic ifdef _LIBVER_SUPPORT