- Fix Makefiles,

- Comment out all functions exept DS_Library_Open , DS_Library_Close & DS_DataStruct_Open_I, and start to work on it!
This commit is contained in:
Arnaud G. GIBERT 2024-04-22 00:24:37 +02:00
parent 7cf70f0f3c
commit ed0f5062df
5 changed files with 1297 additions and 1032 deletions

View File

@ -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 */
/* <https://www.gnu.org/licenses/>. */
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/* Includes */
/*----------------------------------------------------------------------------*/
#ifndef _LIBDATASTR
#define _LIBDATASTR
#ifdef __cplusplus
extern "C" {
//extern "C" {
#endif
#include <shmem.h>
@ -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

View File

@ -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)

File diff suppressed because it is too large Load Diff

View File

@ -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 */
/* <https://www.gnu.org/licenses/>. */
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/* Includes */
/*----------------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@ -7,7 +35,9 @@
#include <sys/types.h>
#include <sys/sem.h>
#include <sys/ipc.h>
#include <ver.h>
//#include <ver.h>
#include <node.h>
#include <datastr.h>
@ -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);

View File

@ -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