- 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 #ifndef _LIBDATASTR
#define _LIBDATASTR #define _LIBDATASTR
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { //extern "C" {
#endif #endif
#include <shmem.h> #include <shmem.h>
@ -25,27 +53,35 @@ typedef long DST_Status;
#define DS_ERROR(s) ((s) < 0) /* Tous les codes retour négatifs correspondent à des erreurs */ #define DS_ERROR(s) ((s) < 0) /* Tous les codes retour négatifs correspondent à des erreurs */
/* Indicateurs */ /* Indicateurs */
typedef int DST_Flags; typedef int DST_Flags;
#define DSD_UNDEF 0 #define DSD_UNDEF 0
/* Flags d'ouverture d'une data structure */ /* Flags d'ouverture d'une data structure */
#define DSD_OPEN SMD_OPEN /* autorise l'ouverture d'une structure existante */ #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_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 */ #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 */ /* 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_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 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 */ #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 */ /* Utilisations possibles des flags d'ouverture */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/* */ /* */
/* DSD_OPEN */ /* DSD_OPEN */
/* -> ouvrir une structure existante */ /* -> ouvrir une structure existante */
@ -67,7 +103,7 @@ typedef int DST_Flags;
/* -> créer une autre structure dans le même heap si elle existe déjà */ /* -> 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 */ /* -> ne pas la créer si elle n'existe pas */
/* */ /* */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/* Flags de verrouillage d'une data structure */ /* Flags de verrouillage d'une data structure */
@ -224,316 +260,387 @@ char DS_Error_Msg [512];
#endif #endif
/*------------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/* DSD_API definition */
/*----------------------------------------------------------------------------*/
# ifdef _LIBDATASTR_C_
# define DSD_API
# else
# define DSD_API extern
# endif
/*----------------------------------------------------------------------------*/
/* Ouverture d'une instance de la librairie */ /* Ouverture d'une instance de la librairie */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/* (I) Instance : numéro de l'instance de la librairie */ /* (I) Instance : numéro de l'instance de la librairie */
/* (I) Context : nom du contexte */ /* (I) Context : nom du contexte */
/* (I) Debug_Mode : mode d'affichage des messages d'erreur */ /* (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 );
/*------------------------------------------------------------------------------*/ 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);
/*----------------------------------------------------------------------------*/
/* Fermeture de l'instance de la librairie */ /* 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 );
/*------------------------------------------------------------------------------*/ 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);
/*----------------------------------------------------------------------------*/
/* Définition de la sortie standard des messages d'erreur de la librairie */ /* Définition de la sortie standard des messages d'erreur de la librairie */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/* (I) Out : flux de sortie des messages d'erreur */ /* (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 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);
/*----------------------------------------------------------------------------*/
/* Création / ouverture d'une structure de données */ /* 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 */ /* (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) Type : type de la structure de données */
/* (I) Manager_FileName : nom du fichier qui définit les fonctions manager */ /* (I) Manager_FileName : nom du fichier qui définit les fonctions manager */
/* (I) Segment_Size : taille ds segments du heap sous-jacent */ /* (I) Segment_Size : taille ds segments du heap sous-jacent */
/* (I) Open_Mode : mode d'ouverture de la structure */ /* (I) Open_Mode : mode d'ouverture de la structure */
/* (I) Own_Value : indique si la structure possède ses valeurs */ /* (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 );
/*------------------------------------------------------------------------------*/ 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);
/*
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);
/*----------------------------------------------------------------------------*/
/* Verrouillage d'une structure de données */ /* Verrouillage d'une structure de données */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/* (I) Root : pointeur sur la racine de la structure */ /* (I) Root : pointeur sur la racine de la structure */
/* (I) Lock_Mode : type de verrou à poser sur la structure */ /* (I) Lock_Mode : type de verrou à poser sur la structure */
/* (O) Locked : verrou effectif (TRUE ou FALSE) */ /* (O) Locked : verrou effectif (TRUE ou FALSE) */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
DST_Status DS_DataStruct_Lock_I ( NDT_Root * Root, DST_Flags Lock_Mode, \ /*
int * Locked ); DSD_API 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, \ DSD_API DST_Status DS_DataStruct_Lock_L( NDT_Root * Root, DST_Flags Lock_Mode, int * Locked);
int * Locked ); DSD_API DST_Status DS_DataStruct_Lock_CL( 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 */ /* Déverrouillage d'une structure de données */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/* (I) Root : pointeur sur la racine de la structure */ /* (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 ); DSD_API DST_Status DS_DataStruct_Unlock_I( NDT_Root * Root);
DST_Status DS_DataStruct_Unlock_CL ( 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 */ /* Fermeture d'une structure de données */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/* (I) Root : pointeur sur la racine de la 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) */ /* (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 ); DSD_API DST_Status DS_DataStruct_Close_I( NDT_Root * Root, DST_Flags Close_Mode);
DST_Status DS_DataStruct_Close_CL ( 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 */ /* Affiche les informations d'une structure de données */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/* (I) Root: pointeur sur la racine de la structure de données */ /* (I) Root: pointeur sur la racine de la structure de données */
/* (I) Out : flux de sortie de l'affichage */ /* (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 ); DSD_API DST_Status DS_DataStruct_Info_Print_I( NDT_Root * Root, FILE * Out);
DST_Status DS_DataStruct_Info_Print_CL ( 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 : */ /* Réorganisation d'une structure de données : */
/* - ordonnancement d'une liste non ordonnée */ /* - ordonnancement d'une liste non ordonnée */
/* - réquilibrage d'un arbre non auto-équilibré */ /* - réquilibrage d'un arbre non auto-équilibré */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/* (I) Root : pointeur sur la racine de la structure de données */ /* (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 ); DSD_API DST_Status DS_DataStruct_Reorg_I( NDT_Root * Root);
DST_Status DS_DataStruct_Reorg_CL ( 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 */ /* Parcours de tous les noeuds d'une structure de données et exécution d'une */
/* commande sur chacun d'eux */ /* commande sur chacun d'eux */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/* (I) Root : pointeur sur la racine de la structure de données */ /* (I) Root : pointeur sur la racine de la structure de données */
/* (I) Command : Commande à exécuter sur chaque noeud traversé */ /* (I) Command : Commande à exécuter sur chaque noeud traversé */
/* (I) Data : pointeur de données utilisateur */ /* (I) Data : pointeur de données utilisateur */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
DST_Status DS_DataStruct_Traverse_I ( NDT_Root * Root, NDT_Command Command, \ /*
void * Data ); DSD_API 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, \ DSD_API DST_Status DS_DataStruct_Traverse_L( NDT_Root * Root, NDT_Command Command, void * Data);
void * Data ); DSD_API DST_Status DS_DataStruct_Traverse_CL( 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 */ /* 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) Root : pointeur sur la racine de la structure de données */
/* (I) Target_Type : type de structure cible */ /* (I) Target_Type : type de structure cible */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
DST_Status DS_DataStruct_Convert_I ( NDT_Root * Root, \ /*
NDT_DataStruct_Type Target_Type ); DSD_API DST_Status DS_DataStruct_Convert_I( NDT_Root * Root, NDT_DataStruct_Type Target_Type);
DST_Status DS_DataStruct_Convert_L ( NDT_Root * Root, \ DSD_API DST_Status DS_DataStruct_Convert_L( NDT_Root * Root, NDT_DataStruct_Type Target_Type);
NDT_DataStruct_Type Target_Type ); DSD_API DST_Status DS_DataStruct_Convert_CL( NDT_Root * Root, NDT_DataStruct_Type Target_Type);
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 */ /* 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) Root : pointeur sur la racine de la structure de données */
/* (I) Out : flux de sortie */ /* (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 ); DSD_API DST_Status DS_DataStruct_Print_I( NDT_Root * Root, FILE * Out);
DST_Status DS_DataStruct_Print_CL ( 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 */ /* Fonction de vérification / réparation d'une structure de données */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/* (I) Root : pointeur sur la racine de la structure */ /* (I) Root : pointeur sur la racine de la structure */
/* (O) Nb_Detected : pointeur sur le nombre d'erreurs détectées */ /* (O) Nb_Detected : pointeur sur le nombre d'erreurs détectées */
/* (O) Nb_Corrected : pointeur sur le nombre d'erreurs corrigées */ /* (O) Nb_Corrected : pointeur sur le nombre d'erreurs corrigées */
/* (I) Out : flux de sortie du rapport */ /* (I) Out : flux de sortie du rapport */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
DST_Status DS_DataStruct_Check_I ( NDT_Root * Root, int * Nb_Detected, \ /*
int * Nb_Corrected, FILE * Out ); DSD_API 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, \ DSD_API DST_Status DS_DataStruct_Check_L( NDT_Root * Root, int * Nb_Detected, int * Nb_Corrected, FILE * Out);
int * Nb_Corrected, FILE * Out ); DSD_API DST_Status DS_DataStruct_Check_CL( 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 */ /* Affichage de la structure de données */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/* (I) Root : pointeur sur la racine de la structure */ /* (I) Root : pointeur sur la racine de la structure */
/* (I) Out : flux de sortie */ /* (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 ); DSD_API DST_Status DS_DataStruct_Dump_I( NDT_Root * Root, FILE * Out);
DST_Status DS_DataStruct_Dump_CL ( 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 */ /* Récupération du premier noeud d'une structure */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/* (I) Root : pointeur sur la racine dont on cherche le premier noeud */ /* (I) Root : pointeur sur la racine dont on cherche le premier noeud */
/* (O) Node : pointeur sur le noeud à récupérer */ /* (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 ); DSD_API DST_Status DS_Node_First_Get_I( NDT_Root * Root, NDT_Node ** Node);
DST_Status DS_Node_First_Get_CL ( 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 */ /* Récupération du dernier noeud d'une structure */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/* (I) Root : pointeur sur la racine dont on cherche le dernier noeud */ /* (I) Root : pointeur sur la racine dont on cherche le dernier noeud */
/* (O) Node : pointeur sur le noeud à récupérer */ /* (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 ); DSD_API DST_Status DS_Node_Last_Get_I( NDT_Root * Root, NDT_Node ** Node);
DST_Status DS_Node_Last_Get_CL ( 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 */ /* Récupération du noeud suivant */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/* (I) Node : pointeur sur le noeud dont on cherche le suivant */ /* (I) Node : pointeur sur le noeud dont on cherche le suivant */
/* (O) Next_Node : pointeur sur le noeud 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 ); DSD_API DST_Status DS_Node_Next_Get_I( NDT_Node * Node, NDT_Node ** Next_Node);
DST_Status DS_Node_Next_Get_CL ( 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 */ /* Récupération du noeud précédant */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/* (I) Node : pointeur sur le noeud dont on cherche le 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 */ /* (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 ); DSD_API DST_Status DS_Node_Previous_Get_I( NDT_Node * Node, NDT_Node ** Prev_Node);
DST_Status DS_Node_Previous_Get_CL ( 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 */ /* Ajout d'un noeud à une structure de données */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/* (I) Root : pointeur sur la racine de la structure de données */ /* (I) Root : pointeur sur la racine de la structure de données */
/* (I) Node : pointeur sur le noeud à ajouter */ /* (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 ); DSD_API DST_Status DS_Node_Add_I( NDT_Root * Root, NDT_Node * Node);
DST_Status DS_Node_Add_CL ( 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 */ /* Suppression d'un noeud dans une structure de données */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/* (I) Node: pointeur sur le noeud à supprimer de la 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 ); DSD_API DST_Status DS_Node_Remove_I( NDT_Node * Node);
DST_Status DS_Node_Remove_CL ( 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 */ /* Recherche un noeud dans un arbre et retourne le pointeur sur le noeud */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/* (I) Root : pointeur sur la racine de l'abre */ /* (I) Root : pointeur sur la racine de l'abre */
/* (O) Node : adresse du pointeur sur le noeud à récuperer */ /* (O) Node : adresse du pointeur sur le noeud à récuperer */
/* (I) Value : pointeur sur la valeur à rechercher */ /* (I) Value : pointeur sur la valeur à rechercher */
/* (I) Data : pointeur de données */ /* (I) Data : pointeur de données */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
DST_Status DS_Node_Find_I ( NDT_Root * Root, NDT_Node ** Node, \ /*
void * Value, void * Data ); DSD_API 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, \ DSD_API DST_Status DS_Node_Find_L( NDT_Root * Root, NDT_Node ** Node, void * Value, void * Data);
void * Value, void * Data ); DSD_API DST_Status DS_Node_Find_CL( 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 );
/*------------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/* Allocation d'une valeur d'une structure de données */ /* Allocation d'une valeur d'une structure de données */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/* (I) Root : pointeur sur la racine de la 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 */ /* (O) Value : adresse d'un pointeur sur la valeur à allouer */
/* (I) ... : arguments relatifs à l'allocation de la valeur */ /* (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, ... ); DSD_API DST_Status DS_Value_Alloc_I( NDT_Root * Root, void ** Value, ...);
DST_Status DS_Value_Alloc_CL ( 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 */ /* Ajout d'une valeur à une structure de données */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/* (I) Root : pointeur sur la racine de la structure de données */ /* (I) Root : pointeur sur la racine de la structure de données */
/* (I) Value : pointeur sur la valeur à ajouter */ /* (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 ); DSD_API DST_Status DS_Value_Add_I( NDT_Root * Root, void * Value);
DST_Status DS_Value_Add_CL ( 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 */ /* Suppression du premier noeud correspondant à une valeur donnée */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/* (I) Root : pointeur sur la racine de la structure de données */ /* (I) Root : pointeur sur la racine de la structure de données */
/* (I) Reference_Value : pointeur sur la valeur de référence */ /* (I) Reference_Value : pointeur sur la valeur de référence */
/* (I) Removed_Value : adresse d'un pointeur sur la valeur supprimée */ /* (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); DSD_API 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, \ DSD_API DST_Status DS_Value_Remove_L( NDT_Root * Root, void * Reference_Value, void ** Removed_Value);
void ** Removed_Value); DSD_API DST_Status DS_Value_Remove_CL( NDT_Root * Root, void * Reference_Value, void ** Removed_Value);
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 */ /* Désallocation d'une valeur d'une structure de données */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/* (I) Root : pointeur sur la racine de la structure de données */ /* (I) Root : pointeur sur la racine de la structure de données */
/* (I) Value : pointeur sur la valeur à désallouer */ /* (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 ); DSD_API DST_Status DS_Value_Free_I( NDT_Root * Root, void * Value);
DST_Status DS_Value_Free_CL ( 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 : */ /* Allocation de mémoire pour une structure de données : */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/* (I) Root : pointeur sur la racine de la structure de données */ /* (I) Root : pointeur sur la racine de la structure de données */
/* (I) Size : taille mémoire à allouer */ /* (I) Size : taille mémoire à allouer */
/* (O) Ptr : adresse du pointeur sur la zone de données allouée */ /* (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 ); DSD_API DST_Status DS_Alloc_I( NDT_Root * Root, size_t Size, void ** Ptr);
DST_Status DS_Alloc_CL ( 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 : */ /* Désallocation d'une ressource pour une structure de données : */
/*------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------*/
/* (I) Root : pointeur sur la racine de la structure de données */ /* (I) Root : pointeur sur la racine de la structure de données */
/* (I) Ptr : pointeur sur la zone à désallouer */ /* (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 ); DSD_API DST_Status DS_Free_I( NDT_Root * Root, void * Ptr);
DST_Status DS_Free_CL ( 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 #ifdef __cplusplus
} //}
#endif #endif
#endif #endif

View File

@ -1,6 +1,6 @@
SRC := libdatatstr.c SRC := libdatastr.c
TARGETS := libdatatstr.a libdatatstr.so TARGETS := libdatastr.a libdatastr.so
FILE_LIB := libdatatstr.a libdatatstr.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 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 INCLUDE += -I . -I ../include -I ../../liblog/include -I ../../libnode/include -I ../../libshmem/include
ifdef _LIBVER_SUPPORT ifdef _LIBVER_SUPPORT
DEP += ../../libver/ver.h 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 <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
@ -7,7 +35,9 @@
#include <sys/types.h> #include <sys/types.h>
#include <sys/sem.h> #include <sys/sem.h>
#include <sys/ipc.h> #include <sys/ipc.h>
#include <ver.h>
//#include <ver.h>
#include <node.h> #include <node.h>
#include <datastr.h> #include <datastr.h>
@ -50,48 +80,48 @@ typedef struct {
char * Name; char * Name;
} DST_DataStruct; } 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); 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); 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 ); 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 ); 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 ); 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); 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); 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); 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_STATIC += ../lib/libdatastr.a ../../libshmem/lib/libshmem.a ../../libnode/lib/libnode.a ../../liblog/lib/liblog.a
DEP_DYNAMIC += ../lib/libnode.so ../../liblog/lib/liblog.so DEP_DYNAMIC += ../lib/libdatastr.so ../lib/libnode.so ../../liblog/lib/liblog.so
INCLUDE += -I . -I ../include -I ../../liblog/include INCLUDE += -I . -I ../include -I ../../liblog/include -I ../../libnode/include -I ../../libshmem/include
LIBDIR += -L . -L ../lib -L ../../liblog/lib LIBDIR += -L . -L ../lib -L ../../liblog/lib -L ../../libnode/lib -L ../../libshmem/lib
LIB_STATIC += ../lib/libnode.a ../../liblog/lib/liblog.a -ldl LIB_STATIC += ../lib/libdatastr.a ../../libshmem/lib/libshmem.a ../../libnode/lib/libnode.a ../../liblog/lib/liblog.a -ldl
LIB_DYNAMIC += -lnode -llog -ldl LIB_DYNAMIC += -ldatastr -lshmem -lnode -llog -ldl
CFLAGS += -rdynamic CFLAGS += -rdynamic
ifdef _LIBVER_SUPPORT ifdef _LIBVER_SUPPORT