- Import libnode-2.3.0 pre release,

- Fix args order in ND_Value_Alloc() calls.
This commit is contained in:
Arnaud G. GIBERT 2023-08-17 19:45:24 +02:00
parent 68336ef3b6
commit 785e178b87
4 changed files with 935 additions and 783 deletions

View File

@ -1404,7 +1404,7 @@ DRT_Status DR_Layer_Add( DRT_Layer **Layer_Ptr_Ptr, NDT_Root *DS_Ptr, DRT_Lay
NDT_Status nd_status; NDT_Status nd_status;
if( ( nd_status = ND_Value_Alloc( DS_Ptr, (void **)Layer_Ptr_Ptr, Layer_Template_Ptr)) != NDS_OK) if( ( nd_status = ND_Value_Alloc( (void **)Layer_Ptr_Ptr, DS_Ptr, Layer_Template_Ptr)) != NDS_OK)
{ {
printf( "Can't allocate new layer: ND_Value_Alloc() failed (%d)!\n", nd_status); printf( "Can't allocate new layer: ND_Value_Alloc() failed (%d)!\n", nd_status);
return( DRS_KO); return( DRS_KO);
@ -1622,7 +1622,7 @@ DRT_Status DR_Instrument_Add( DRT_Instrument **Instrument_Ptr_Ptr, NDT_Root *
NDT_Status nd_status; NDT_Status nd_status;
if( ( nd_status = ND_Value_Alloc( DS_Ptr, (void **)Instrument_Ptr_Ptr, Instrument_Template_Ptr)) != NDS_OK) if( ( nd_status = ND_Value_Alloc( (void **)Instrument_Ptr_Ptr, DS_Ptr, Instrument_Template_Ptr)) != NDS_OK)
{ {
printf( "Can't allocate new instrument: ND_Value_Alloc() failed (%d)!\n", nd_status); printf( "Can't allocate new instrument: ND_Value_Alloc() failed (%d)!\n", nd_status);
return( DRS_KO); return( DRS_KO);
@ -1736,7 +1736,7 @@ DRT_Status DR_Kit_Add( DRT_Kit **Kit_Ptr_Ptr, NDT_Root *DS_Ptr, DRT_Kit *Kit
NDT_Status nd_status; NDT_Status nd_status;
if( ( nd_status = ND_Value_Alloc( DS_Ptr, (void **)Kit_Ptr_Ptr, Kit_Template_Ptr)) != NDS_OK) if( ( nd_status = ND_Value_Alloc( (void **)Kit_Ptr_Ptr, DS_Ptr, Kit_Template_Ptr)) != NDS_OK)
{ {
printf( "Can't allocate new kit: ND_Value_Alloc() failed (%d)!\n", nd_status); printf( "Can't allocate new kit: ND_Value_Alloc() failed (%d)!\n", nd_status);
return( DRS_KO); return( DRS_KO);

813
libnode.c

File diff suppressed because it is too large Load Diff

View File

@ -144,7 +144,7 @@ NDT_Status ND_Default_Allocator( void **, size_t, void *);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Redéfinition de la fonction free() avec retour de type NDT_Status */ /* Redéfinition de la fonction free() avec retour de type NDT_Status */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDT_Status ND_Default_Desallocator( void *, void *); NDT_Status ND_Default_Deallocator( void *, void *);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Création d'un noeud */ /* Création d'un noeud */
@ -168,7 +168,7 @@ NDT_Status ND_Node_Free( NDT_Root *, NDT_Node *);
/* (O) Root: adresse d'un pointeur sur la racine de la nouvelle structure */ /* (O) Root: adresse d'un pointeur sur la racine de la nouvelle structure */
/* (I) Type: type de la structure.de données (liste ou arbre binaire) */ /* (I) Type: type de la structure.de données (liste ou arbre binaire) */
/* (I) Allocator: pointeur vers la fonction d'allocation */ /* (I) Allocator: pointeur vers la fonction d'allocation */
/* (I) Desallocator: pointeur vers la fonction de désallocation */ /* (I) Deallocator: pointeur vers la fonction de désallocation */
/* (I) Data : pointeur de données utiles à l'allocateur */ /* (I) Data : pointeur de données utiles à l'allocateur */
/* (I) Own_Value : indique si la structure est propriétaire de ses valeurs */ /* (I) Own_Value : indique si la structure est propriétaire de ses valeurs */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
@ -180,10 +180,10 @@ NDT_Status ND_Index_Clear( NDT_Root *, NDT_Index_Id);
/* (O) New_Root : adresse du pointeur sur la nouvelle racine */ /* (O) New_Root : adresse du pointeur sur la nouvelle racine */
/* (I) Type : type de la structure de données */ /* (I) Type : type de la structure de données */
/* (I) Allocater : pointeur vers la fonction d'allocation */ /* (I) Allocater : pointeur vers la fonction d'allocation */
/* (I) Desallocater : pointeur vers la fonction de désallocation */ /* (I) Deallocater : pointeur vers la fonction de désallocation */
/* (I) Data : pointeur de données utiles à l'allocateur */ /* (I) Data : pointeur de données utiles à l'allocateur */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDT_Status ND_Node_Root_Alloc( NDT_Root **, NDT_Index_Nb, NDT_Index_Type[], char *, NDT_Manager *, char *, NDT_Allocator *, char *, NDT_Desallocator *, short, void *); NDT_Status ND_Node_Root_Alloc( NDT_Root **, NDT_Index_Nb, NDT_Index_Type[], char *, NDT_Manager *, char *, NDT_Allocator *, char *, NDT_Deallocator *, short, void *);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Destruction d'une racine */ /* Destruction d'une racine */

477
node.h
View File

@ -29,7 +29,6 @@
#ifndef _LIBNODE_H_ #ifndef _LIBNODE_H_
# define _LIBNODE_H_ # define _LIBNODE_H_
@ -53,27 +52,20 @@ extern "C" {
# define NDD_TRUE 1 # define NDD_TRUE 1
# define NDD_FALSE 0 # define NDD_FALSE 0
# define NDD_MIN(A,B) ( ( A > B) ? B : A) # define NDD_MIN(A,B) ( ( A > B) ? B : A)
# define NDD_MAX(A,B) ( ( A < B) ? B : A) # define NDD_MAX(A,B) ( ( A < B) ? B : A)
/* /*
Différence de profondeur entre la branche la plus courte et Default allowed maximum depth between tree branches before rebalancing
la plus longue d'un arbre.
Le dépassement de ce seuil provoque le rééquilibrage de l'arbre
*/ */
# define DEF_MAX_DIF 100 # define DEF_MAX_DIF 100
/* Types de structure */ /* Types de structure */
typedef short NDT_Root_Type; typedef short NDT_Root_Type;
typedef int NDT_Index_Type; typedef int NDT_Index_Type;
# define NDD_INDEX_MSK 0xffff # define NDD_INDEX_MSK 0xffff
@ -118,13 +110,13 @@ typedef int NDT_Index_Type;
# define NDD_INDEX_SUBTYPE_UNKNOWN 0x0000 # define NDD_INDEX_SUBTYPE_UNKNOWN 0x0000
#define NDD_INDEX_SUBTYPE_FIFO 0x0100 /* principe de la file d'attente (First In First Out) */ # define NDD_INDEX_SUBTYPE_FIFO 0x0100 /* First In First Out list (queue) */
# define NDD_INDEX_SUBTYPE_LILO NDD_INDEX_SUBTYPE_FIFO # define NDD_INDEX_SUBTYPE_LILO NDD_INDEX_SUBTYPE_FIFO
#define NDD_INDEX_SUBTYPE_LIFO 0x0200 /* principe de la pile (First In Last Out) */ # define NDD_INDEX_SUBTYPE_LIFO 0x0200 /* First In Last Out list (stack) */
# define NDD_INDEX_SUBTYPE_FILO NDD_INDEX_SUBTYPE_LIFO # define NDD_INDEX_SUBTYPE_FILO NDD_INDEX_SUBTYPE_LIFO
#define NDD_INDEX_SUBTYPE_SORTED 0x0300 /* liste triée */ # define NDD_INDEX_SUBTYPE_SORTED 0x0300 /* Sorted list */
# define NDD_INDEX_SUBTYPE_UNBALANCED 0x0400 # define NDD_INDEX_SUBTYPE_UNBALANCED 0x0400
#define NDD_INDEX_SUBTYPE_BALANCED 0x0500 /* arbre auto-équilibré */ # define NDD_INDEX_SUBTYPE_BALANCED 0x0500 /* Auto balanced tree */
# define NDD_INDEX_SUBTYPE_MSK ( NDD_INDEX_SUBTYPE_UNKNOWN | NDD_INDEX_SUBTYPE_FIFO | NDD_INDEX_SUBTYPE_FILO | NDD_INDEX_SUBTYPE_SORTED | NDD_INDEX_SUBTYPE_UNBALANCED | NDD_INDEX_SUBTYPE_BALANCED) # define NDD_INDEX_SUBTYPE_MSK ( NDD_INDEX_SUBTYPE_UNKNOWN | NDD_INDEX_SUBTYPE_FIFO | NDD_INDEX_SUBTYPE_FILO | NDD_INDEX_SUBTYPE_SORTED | NDD_INDEX_SUBTYPE_UNBALANCED | NDD_INDEX_SUBTYPE_BALANCED)
# define NDD_INDEX_SUBTYPE_RMSK ( NDD_INDEX_MSK ^ NDD_INDEX_SUBTYPE_MSK) # define NDD_INDEX_SUBTYPE_RMSK ( NDD_INDEX_MSK ^ NDD_INDEX_SUBTYPE_MSK)
@ -494,7 +486,7 @@ typedef int NDT_Index_Type;
/* Commandes du manager */ /* Manager Commands */
typedef int NDT_Command; typedef int NDT_Command;
@ -518,7 +510,7 @@ typedef char *NDT_Version_Name;
/* Types de réponse du manager ou code retour des diverses fonctions */ /* Manager or Functions Return Codes */
typedef int NDT_Status; typedef int NDT_Status;
@ -534,8 +526,8 @@ typedef int NDT_Status;
# define NDS_GREATER 2 # define NDS_GREATER 2
# define NDS_LOWER 3 # define NDS_LOWER 3
#define NDS_ERRMEM -1 /* Problème d'allocation mémoire */ # define NDS_ERRMEM -1 /* Memory allocation problem */
#define NDS_ERRAPI -2 /* Utilisation incorrecte des API */ # define NDS_ERRAPI -2 /* Bad API usage */
@ -552,7 +544,7 @@ struct NDT_Node;
/* Pointeur de fonction sur le manager */ /* Manager function pointer */
# define NDD_MANAGER_NAME_LEN_MAX 64 # define NDD_MANAGER_NAME_LEN_MAX 64
# define NDD_MANAGER_NAME_SIZE_MAX ( NDD_MANAGER_NAME_LEN_MAX + 1) # define NDD_MANAGER_NAME_SIZE_MAX ( NDD_MANAGER_NAME_LEN_MAX + 1)
@ -562,7 +554,7 @@ typedef char *NDT_Manager_Name;
typedef NDT_Status NDT_Manager( struct NDT_Root *, NDT_Index_Id, struct NDT_Node *, NDT_Command, va_list *); typedef NDT_Status NDT_Manager( struct NDT_Root *, NDT_Index_Id, struct NDT_Node *, NDT_Command, va_list *);
/* Pointeur de fonction sur l'allocateur */ /* Memory allocator function pointer */
# define NDD_ALLOCATOR_NAME_LEN_MAX 64 # define NDD_ALLOCATOR_NAME_LEN_MAX 64
# define NDD_ALLOCATOR_NAME_SIZE_MAX ( NDD_ALLOCATOR_NAME_LEN_MAX + 1) # define NDD_ALLOCATOR_NAME_SIZE_MAX ( NDD_ALLOCATOR_NAME_LEN_MAX + 1)
@ -572,30 +564,30 @@ typedef char *NDT_Allocator_Name;
typedef NDT_Status NDT_Allocator( void **, size_t, void *); typedef NDT_Status NDT_Allocator( void **, size_t, void *);
/* Pointeur de fonction sur le désallocateur */ /* Memory deallocator function pointer */
#define NDD_DESALLOCATOR_NAME_LEN_MAX 64 # define NDD_DEALLOCATOR_NAME_LEN_MAX 64
#define NDD_DESALLOCATOR_NAME_SIZE_MAX (NDD_DESALLOCATOR_NAME_LEN_MAX + 1) # define NDD_DEALLOCATOR_NAME_SIZE_MAX ( NDD_DEALLOCATOR_NAME_LEN_MAX + 1)
typedef char *NDT_Desallocator_Name; typedef char *NDT_Deallocator_Name;
typedef NDT_Status NDT_Desallocator( void *, void *); typedef NDT_Status NDT_Deallocator( void *, void *);
typedef struct NDT_Index typedef struct NDT_Index
{ {
NDT_Index_Type Type; /* Type de la structure (liste, arbre ... ) */ NDT_Index_Type Type; /* Structure Type (Queue, Stack, Tree, ... ) */
long Node_Number; /* Nombre de noeuds dans la structure */ long Node_Number; /* Number of node in the structure */
long Min_Depth; /* Profondeur minimale de l'arbre */ long Min_Depth; /* Minimum tree depth */
long Max_Depth; /* Profondeur maximale de l'arbre */ long Max_Depth; /* Maximum tree depth */
long Max_Dif; /* Différence maximale autorisée entre la branche la plus courte et la plus longue */ long Max_Dif; /* Maximum allowed depth between tree branches before rebalancing */
long Nb_Equ; /* Nombre de réquilibrages réalisés sur l'arbre */ long Nb_Equ; /* Rebalancing count */
struct NDT_Node *Head; /* Noeud de tête */ struct NDT_Node *Head; /* Head node */
struct NDT_Node *Tail; /* Noeud de queue */ struct NDT_Node *Tail; /* Tail node */
struct NDT_Node *Save; /* Pointeur de sauvegarde (utile pour la fonction de restauration) */ struct NDT_Node *Save; /* Save pointer (Used by restore function) */
} NDT_Index; } NDT_Index;
@ -603,18 +595,15 @@ typedef struct NDT_Index
typedef struct NDT_Root typedef struct NDT_Root
{ {
/* NDT_Root_Type Type;*/ /* Root Structure Type */ NDT_Manager *Manager_Ptr; /* Manager function pointer */
/* NDT_DataStruct_Type DS_Type;*/ /* Type de la structure (liste, arbre ... ) */ char Manager_Name[ NDD_MANAGER_NAME_SIZE_MAX]; /* Manager function name */
NDT_Allocator *Allocator_Ptr; /* Value allocator function pointer */
char Allocator_Name[ NDD_ALLOCATOR_NAME_SIZE_MAX]; /* Value allocator function name */
NDT_Deallocator *Deallocator_Ptr; /* Value deallocator function pointer */
char Deallocator_Name[ NDD_DEALLOCATOR_NAME_SIZE_MAX]; /* Value deallocator function name */
NDT_Manager *Manager_Ptr; /* Pointeur sur la fonction manager */ short Own_Value; /* Flag indicating if the structure is the node owner */
char Manager_Name[NDD_MANAGER_NAME_SIZE_MAX]; /* Nom de la fonction manager */ void *User_Ptr; /* User pointer */
NDT_Allocator *Allocator_Ptr; /* Pointeur sur la fonction d'allocation */
char Allocator_Name[NDD_ALLOCATOR_NAME_SIZE_MAX]; /* Nom de la fonction d'allocation */
NDT_Desallocator *Desallocator_Ptr; /* Pointeur sur la fonction de désallocation */
char Desallocator_Name[NDD_DESALLOCATOR_NAME_SIZE_MAX]; /* Nom de la fonction de désallocation */
short Own_Value; /* Indique si la structure est propriétaire de ses valeurs */
void *User_Ptr; /* Pointeur utilisable librement par l'utilisateur */
NDT_Index_Nb Index_Nb; NDT_Index_Nb Index_Nb;
NDT_Index_Nb Index_Open_Count; NDT_Index_Nb Index_Open_Count;
@ -630,14 +619,14 @@ typedef struct NDT_DataStruct
NDT_Root *Root_Ptr; NDT_Root *Root_Ptr;
NDT_Manager *Manager_Ptr; /* Manager function pointer */ NDT_Manager *Manager_Ptr; /* Manager function pointer */
NDT_Allocator *Allocator_Ptr; /* Allocator function pointer */ NDT_Allocator *Allocator_Ptr; /* Value allocator function pointer */
NDT_Desallocator *Desallocator_Ptr; /* Desallocator function pointer */ NDT_Deallocator *Deallocator_Ptr; /* Value deallocator function pointer */
} NDT_DataStruct; } NDT_DataStruct;
/* Structure de noeud */ /* Node structure */
typedef struct NDT_Node typedef struct NDT_Node
{ {
@ -667,13 +656,13 @@ typedef int NDT_Recursive_Offset;
/* Définition des alias de l'API */ /* Alias API definition */
# ifndef ND_MODE # ifndef ND_MODE
# define ND_MODE 0 # define ND_MODE 0
# endif # endif
#if ND_MODE == 1 /* API sans vérification des arguments */ # if ND_MODE == 1 /* No arg checking API */
# define ND_Library_Open ND_Library_Open_I # define ND_Library_Open ND_Library_Open_I
# define ND_Library_Close ND_Library_Close_I # define ND_Library_Close ND_Library_Close_I
@ -721,9 +710,13 @@ typedef int NDT_Recursive_Offset;
# define ND_Manager_Exec_V ND_Manager_Exec_VI # define ND_Manager_Exec_V ND_Manager_Exec_VI
# define ND_Manager_Exec ND_Manager_Exec_I # define ND_Manager_Exec ND_Manager_Exec_I
# define ND_Allocator_Exec ND_Allocator_Exec_I # define ND_Allocator_Exec ND_Allocator_Exec_I
#define ND_Desallocator_Exec ND_Desallocator_Exec_I # define ND_Deallocator_Exec ND_Deallocator_Exec_I
# else /* Arg checking API */
#else /* API avec vérification des arguments */
# define ND_Library_Open ND_Library_Open_C # define ND_Library_Open ND_Library_Open_C
# define ND_Library_Close ND_Library_Close_C # define ND_Library_Close ND_Library_Close_C
@ -771,7 +764,7 @@ typedef int NDT_Recursive_Offset;
# define ND_Manager_Exec_V ND_Manager_Exec_VC # define ND_Manager_Exec_V ND_Manager_Exec_VC
# define ND_Manager_Exec ND_Manager_Exec_C # define ND_Manager_Exec ND_Manager_Exec_C
# define ND_Allocator_Exec ND_Allocator_Exec_C # define ND_Allocator_Exec ND_Allocator_Exec_C
#define ND_Desallocator_Exec ND_Desallocator_Exec_C # define ND_Deallocator_Exec ND_Deallocator_Exec_C
# endif # endif
@ -792,110 +785,128 @@ typedef int NDT_Recursive_Offset;
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Initialisation du contexte de la librairie */ /* Library initialisation */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Library_Open_I ( int Debug_Mode ); /* (I) Debug_Mode: Open library in debug mode */
NDD_DLL_API NDT_Status ND_Library_Open_C ( int Debug_Mode ); /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Library_Open_I ( int);
NDD_DLL_API NDT_Status ND_Library_Open_C ( int);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Fermeture du contexte de la librairie */ /* Library deinitialisation */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Library_Close_I( void); NDD_DLL_API NDT_Status ND_Library_Close_I( void);
NDD_DLL_API NDT_Status ND_Library_Close_C( void); NDD_DLL_API NDT_Status ND_Library_Close_C( void);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Définition de la sortie standard des messages d'erreur de la librairie */ /* Library Standard Error output setup */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Stream: StdErr output stream */
/*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Library_StdErr_Set_I( FILE *); NDD_DLL_API NDT_Status ND_Library_StdErr_Set_I( FILE *);
NDD_DLL_API NDT_Status ND_Library_StdErr_Set_C( FILE *); NDD_DLL_API NDT_Status ND_Library_StdErr_Set_C( FILE *);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Création d'une nouvelle structure de données */ /* Create a new data structure */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (O) Root: adresse d'un pointeur sur la racine de la nouvelle structure */ /* (O) Root_Ptr_Ptr: Pointer adress of the new sata structure */
/* (I) Type: type de la structure.de données (liste ou arbre binaire) */ /* (I) Index_Nb: Number of index */
/* (I) Allocator: pointeur vers la fonction d'allocation */ /* (I) Index_Type_Ptr: Array of Index type (List, tree, ...) */
/* (I) Desallocator: pointeur vers la fonction de désallocation */ /* (I) Manager_Name: Manager function name */
/* (I) Data : pointeur de données utiles à l'allocateur */ /* (I) Manager_Ptr: Manager function pointer */
/* (I) Own_Value : indique si la structure est propriétaire de ses valeurs */ /* (I) Allocator_Name: Value allocator function name */
/* (I) Allocator_Ptr: Value allocator function pointer */
/* (I) Deallocator_Name: Value deallocator function name */
/* (I) Deallocator_Ptr: Value deallocator function pointer */
/* (I) Own_Value: Flag indicating if the structure is the node owner */
/* (I) Data_Ptr: User pointer */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_DataStruct_Open_I( NDT_Root **, NDT_Index_Nb, NDT_Index_Type *, NDT_Manager_Name, NDT_Manager *, NDT_Allocator_Name, NDT_Allocator *, NDT_Desallocator_Name, NDT_Desallocator *, short, void *);
NDD_DLL_API NDT_Status ND_DataStruct_Open_C( NDT_Root **, NDT_Index_Nb, NDT_Index_Type *, NDT_Manager_Name, NDT_Manager *, NDT_Allocator_Name, NDT_Allocator *, NDT_Desallocator_Name, NDT_Desallocator *, short, void *); NDD_DLL_API NDT_Status ND_DataStruct_Open_I( NDT_Root **, NDT_Index_Nb, NDT_Index_Type *, NDT_Manager_Name, NDT_Manager *, NDT_Allocator_Name, NDT_Allocator *, NDT_Deallocator_Name, NDT_Deallocator *, short, void *);
NDD_DLL_API NDT_Status ND_DataStruct_Open_C( NDT_Root **, NDT_Index_Nb, NDT_Index_Type *, NDT_Manager_Name, NDT_Manager *, NDT_Allocator_Name, NDT_Allocator *, NDT_Deallocator_Name, NDT_Deallocator *, short, void *);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Destruction d'une structure de données */ /* Destroy a data structure */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (O) Root: pointeur sur la racine de la structure de données */ /* (I) Root_Ptr: Data structure pointer */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_DataStruct_Close_I( NDT_Root *); NDD_DLL_API NDT_Status ND_DataStruct_Close_I( NDT_Root *);
NDD_DLL_API NDT_Status ND_DataStruct_Close_C( NDT_Root *); NDD_DLL_API NDT_Status ND_DataStruct_Close_C( NDT_Root *);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Destruction d'une structure de données */ /* Destroy all data of a data structure */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (O) Root: pointeur sur la racine de la structure de données */ /* (I) Root_Ptr: Data structure pointer */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_DataStruct_Flush_I( NDT_Root *); NDD_DLL_API NDT_Status ND_DataStruct_Flush_I( NDT_Root *);
NDD_DLL_API NDT_Status ND_DataStruct_Flush_C( NDT_Root *); NDD_DLL_API NDT_Status ND_DataStruct_Flush_C( NDT_Root *);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Function de réparation d'une structure : */ /* Check & repare a datat structure: */
/* - vérifie que tous les noeuds sont correctement liés les uns aux autres */ /* - Check & fix node links */
/* - corrige les informations statistiques de la racine */ /* - Update data structure statistics */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Root : pointeur sur la racine de la structure */ /* (I) Root_Ptr: Data structure pointer */
/* (O) Nb_Detected : pointeur sur le nombre d'erreurs */ /* (O) Error_Dectected_Nb_Ptr: Number of error detected pointer */
/* (O) Nb_Corrected : pointeur sur le nombre d'erreurs */ /* (O) Error_Corrected_Nb_Ptr: Number of error corected pointer */
/* (I) Out : flux de sortie du rapport */ /* (I) Out: Output stream */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_DataStruct_Check_I( NDT_Root *, int *, int *, FILE *); NDD_DLL_API NDT_Status ND_DataStruct_Check_I( NDT_Root *, int *, int *, FILE *);
NDD_DLL_API NDT_Status ND_DataStruct_Check_C( NDT_Root *, int *, int *, FILE *); NDD_DLL_API NDT_Status ND_DataStruct_Check_C( NDT_Root *, int *, int *, FILE *);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Réorganisation d'une structure de données : */ /* Convert a data structure indexe types */
/* - 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 */ /* (I) Root_Ptr: Data structure pointer */
/* (I) Index_Type_Ptr: Array of index type (List, tree, ...) */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_DataStruct_Reorg_I( NDT_Root *);
NDD_DLL_API NDT_Status ND_DataStruct_Reorg_C( NDT_Root *);
/*------------------------------------------------------------------------------*/
/* 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 */
/*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_DataStruct_Convert_I( NDT_Root *, NDT_Index_Type *); NDD_DLL_API NDT_Status ND_DataStruct_Convert_I( NDT_Root *, NDT_Index_Type *);
NDD_DLL_API NDT_Status ND_DataStruct_Convert_C( NDT_Root *, NDT_Index_Type *); NDD_DLL_API NDT_Status ND_DataStruct_Convert_C( NDT_Root *, NDT_Index_Type *);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Parcours de tous les noeuds d'une structure de données et exécution d'une */ /* Reorganise a data structure indexes: */
/* commande sur chacun d'eux */ /* - Sort a non-sorted list */
/* - Rebalance a non auto-balanced tree */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Root: pointeur sur la racine de la structure de données */ /* (I) Root_Ptr: Data structure pointer */
/* (I) Command: Commande à exécuter sur chaque noeud traversé */
/* (I) Data: pointeur de données utilisateur */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_DataStruct_Reorg_I( NDT_Root *);
NDD_DLL_API NDT_Status ND_DataStruct_Reorg_C( NDT_Root *);
/*------------------------------------------------------------------------------*/
/* Traverse a data structure & execute a command on each node */
/*------------------------------------------------------------------------------*/
/* (I) Root_Ptr: Data structure pointer */
/* (I) Command: Manager command */
/* (I) ...: User args */
/*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_DataStruct_Traverse_VI( NDT_Root *, NDT_Command, va_list *); NDD_DLL_API NDT_Status ND_DataStruct_Traverse_VI( NDT_Root *, NDT_Command, va_list *);
NDD_DLL_API NDT_Status ND_DataStruct_Traverse_VC( NDT_Root *, NDT_Command, va_list *); NDD_DLL_API NDT_Status ND_DataStruct_Traverse_VC( NDT_Root *, NDT_Command, va_list *);
NDD_DLL_API NDT_Status ND_DataStruct_Traverse_I( NDT_Root *, NDT_Command, ...); NDD_DLL_API NDT_Status ND_DataStruct_Traverse_I( NDT_Root *, NDT_Command, ...);
@ -904,45 +915,55 @@ NDD_DLL_API NDT_Status ND_DataStruct_Traverse_C( NDT_Root *, NDT_Command, ...
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Affichage d'informations sur une structure de données */ /* Print data structure information */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Root: pointeur sur la racine de la structure de données */ /* (I) Stream: Output stream */
/* (I) Out : flux de sortie */ /* (I) Root_Ptr: Data structure pointer */
/* (I) Recursive_Mode: Child or Parent */
/* (I) Recursive_Depth: Curent recursion depth */
/* (I) Recursive_Offset: Curent print out offset */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_DataStruct_Info_Print_I( FILE *, NDT_Root *, NDT_Recursive_Mode, NDT_Recursive_Depth, NDT_Recursive_Offset); NDD_DLL_API NDT_Status ND_DataStruct_Info_Print_I( FILE *, NDT_Root *, NDT_Recursive_Mode, NDT_Recursive_Depth, NDT_Recursive_Offset);
NDD_DLL_API NDT_Status ND_DataStruct_Info_Print_C( FILE *, NDT_Root *, NDT_Recursive_Mode, NDT_Recursive_Depth, NDT_Recursive_Offset); NDD_DLL_API NDT_Status ND_DataStruct_Info_Print_C( FILE *, NDT_Root *, NDT_Recursive_Mode, NDT_Recursive_Depth, NDT_Recursive_Offset);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Ajout d'une valeur à une structure de données */ /* Add a new value to a data structure */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Root: pointeur sur la racine de la structure de données */ /* (I) Root_Ptr: Data structure pointer */
/* (I) Value: pointeur sur la valeur à ajouter */ /* (I) Value_Ptr: Value pointer */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_DataStruct_Value_Add_I( NDT_Root *, void *); NDD_DLL_API NDT_Status ND_DataStruct_Value_Add_I( NDT_Root *, void *);
NDD_DLL_API NDT_Status ND_DataStruct_Value_Add_C( NDT_Root *, void *); NDD_DLL_API NDT_Status ND_DataStruct_Value_Add_C( NDT_Root *, void *);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Suppression du premier noeud correspondant à une valeur donnée */ /* Remove the first matching value from a data structure */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Root : pointeur sur la racine de la structure de données */ /* (I) Root_Ptr: Data structure pointer */
/* (I) Reference_Value : pointeur sur la valeur de référence */ /* (I) Ref_Value_Ptr: Reference value pointer to search */
/* (I) Removed_Value : adresse d'un pointeur sur la valeur supprimée */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_DataStruct_Value_Remove_I( NDT_Root *, void *); NDD_DLL_API NDT_Status ND_DataStruct_Value_Remove_I( NDT_Root *, void *);
NDD_DLL_API NDT_Status ND_DataStruct_Value_Remove_C( NDT_Root *, void *); NDD_DLL_API NDT_Status ND_DataStruct_Value_Remove_C( NDT_Root *, void *);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Affichage de la valeur de tous les noeuds d'une structure de données */ /* Print all the data structure values */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Root: pointeur sur la racine de la structure de données */ /* (I) Stream: Output stream */
/* (I) Out : flux de sortie */ /* (I) Root_Ptr: Data structure pointer */
/* (I) Recursive_Mode: Child or Parent */
/* (I) Recursive_Depth: Curent recursion depth */
/* (I) Recursive_Offset: Curent print out offset */
/* (I) ...: User args */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_DataStruct_Value_Print_VI( FILE *, NDT_Root *, NDT_Recursive_Mode, NDT_Recursive_Depth, NDT_Recursive_Offset, va_list *); NDD_DLL_API NDT_Status ND_DataStruct_Value_Print_VI( FILE *, NDT_Root *, NDT_Recursive_Mode, NDT_Recursive_Depth, NDT_Recursive_Offset, va_list *);
NDD_DLL_API NDT_Status ND_DataStruct_Value_Print_I( FILE *, NDT_Root *, NDT_Recursive_Mode, NDT_Recursive_Depth, NDT_Recursive_Offset, ...); NDD_DLL_API NDT_Status ND_DataStruct_Value_Print_I( FILE *, NDT_Root *, NDT_Recursive_Mode, NDT_Recursive_Depth, NDT_Recursive_Offset, ...);
NDD_DLL_API NDT_Status ND_DataStruct_Value_Print_C( FILE *, NDT_Root *, NDT_Recursive_Mode, NDT_Recursive_Depth, NDT_Recursive_Offset, ...); NDD_DLL_API NDT_Status ND_DataStruct_Value_Print_C( FILE *, NDT_Root *, NDT_Recursive_Mode, NDT_Recursive_Depth, NDT_Recursive_Offset, ...);
@ -950,12 +971,12 @@ NDD_DLL_API NDT_Status ND_DataStruct_Value_Print_C( FILE *, NDT_Root *, NDT_
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Recherche un noeud à partir d'une valeur */ /* Find a value in a data structure */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Root : pointeur sur la racine de l'abre */ /* (O) Value_Ptr_Ptr: Value pointer address found */
/* (O) Node : pointeur sur le noeud à récuperer */ /* (I) Root_Ptr: Data structure pointer */
/* (I) Value : pointeur sur la valeur à rechercher */ /* (I) Ref_Value_Ptr: Reference value pointer to search */
/* (I) Data : pointeur de données */ /* (I) ...: User args */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_DataStruct_Value_Find_VI( void **, NDT_Root *, void *, va_list *); NDD_DLL_API NDT_Status ND_DataStruct_Value_Find_VI( void **, NDT_Root *, void *, va_list *);
@ -966,86 +987,95 @@ NDD_DLL_API NDT_Status ND_DataStruct_Value_Find_C( void **, NDT_Root *, void
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Create a new index (not yet implemented !) */ /* Create a new index */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (O) Root: adresse d'un pointeur sur la racine de la nouvelle structure */ /* (I) Root_Ptr: Data structure pointer */
/* (I) Type: type de la structure.de données (liste ou arbre binaire) */ /* (I) Index_Id: Id of the index */
/* (I) Allocator: pointeur vers la fonction d'allocation */ /* (I) Index_Type: Index type (List, tree, ...) */
/* (I) Desallocator: pointeur vers la fonction de désallocation */
/* (I) Data : pointeur de données utiles à l'allocateur */
/* (I) Own_Value : indique si la structure est propriétaire de ses valeurs */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Index_Open_I( NDT_Root *, NDT_Index_Id, NDT_Index_Type); NDD_DLL_API NDT_Status ND_Index_Open_I( NDT_Root *, NDT_Index_Id, NDT_Index_Type);
NDD_DLL_API NDT_Status ND_Index_Open_C( NDT_Root *, NDT_Index_Id, NDT_Index_Type); NDD_DLL_API NDT_Status ND_Index_Open_C( NDT_Root *, NDT_Index_Id, NDT_Index_Type);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Remove an Index (not yet implemented !) */ /* Remove an Index */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (O) Root: pointeur sur la racine de la structure de données */ /* (I) Root_Ptr: Data structure pointer */
/* (I) Index_Id: Id of the index */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Index_Close_I( NDT_Root *, NDT_Index_Id); NDD_DLL_API NDT_Status ND_Index_Close_I( NDT_Root *, NDT_Index_Id);
NDD_DLL_API NDT_Status ND_Index_Close_C( NDT_Root *, NDT_Index_Id); NDD_DLL_API NDT_Status ND_Index_Close_C( NDT_Root *, NDT_Index_Id);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Remove an Index (not yet implemented !) */ /* Remove an Index (Private API ?) */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (O) Root: pointeur sur la racine de la structure de données */ /* (I) Root_Ptr: Data structure pointer */
/* (I) Index_Id: Id of the index */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Index_Flush_I( NDT_Root *, NDT_Index_Id); NDD_DLL_API NDT_Status ND_Index_Flush_I( NDT_Root *, NDT_Index_Id);
NDD_DLL_API NDT_Status ND_Index_Flush_C( NDT_Root *, NDT_Index_Id); NDD_DLL_API NDT_Status ND_Index_Flush_C( NDT_Root *, NDT_Index_Id);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Function de réparation d'une structure : */ /* Check & repare a data structure index: */
/* - vérifie que tous les noeuds sont correctement liés les uns aux autres */ /* - Check & fix node links */
/* - corrige les informations statistiques de la racine */ /* - Update data structure statistics */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Root : pointeur sur la racine de la structure */ /* (I) Root_Ptr: Data structure pointer */
/* (O) Nb_Detected : pointeur sur le nombre d'erreurs */ /* (I) Index_Id: Id of the index */
/* (O) Nb_Corrected : pointeur sur le nombre d'erreurs */ /* (O) Error_Dectected_Nb_Ptr: Number of error detected pointer */
/* (I) Out : flux de sortie du rapport */ /* (O) Error_Corrected_Nb_Ptr: Number of error corected pointer */
/* (I) Out: Output stream */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Index_Check_I( NDT_Root *, NDT_Index_Id, int *, int *, FILE *); NDD_DLL_API NDT_Status ND_Index_Check_I( NDT_Root *, NDT_Index_Id, int *, int *, FILE *);
NDD_DLL_API NDT_Status ND_Index_Check_C( NDT_Root *, NDT_Index_Id, int *, int *, FILE *); NDD_DLL_API NDT_Status ND_Index_Check_C( NDT_Root *, NDT_Index_Id, int *, int *, FILE *);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Conversion d'une structure de données d'un type en un autre */ /* Convert a data structure index to another type */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Root: pointeur sur la racine de la structure de données */ /* (I) Root_Ptr: Data structure pointer */
/* (I) Target_Type: type de structure cible */ /* (I) Index_Id: Id of the index */
/* (I) Index_Type: Index type (List, tree, ...) */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Index_Convert_I ( NDT_Root *, NDT_Index_Id, NDT_Index_Type); NDD_DLL_API NDT_Status ND_Index_Convert_I ( NDT_Root *, NDT_Index_Id, NDT_Index_Type);
NDD_DLL_API NDT_Status ND_Index_Convert_C ( NDT_Root *, NDT_Index_Id, NDT_Index_Type); NDD_DLL_API NDT_Status ND_Index_Convert_C ( NDT_Root *, NDT_Index_Id, NDT_Index_Type);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Réorganisation d'une structure de données : */ /* Reorganise a data structure index: */
/* - ordonnancement d'une liste non ordonnée */ /* - Sort a non-sorted list */
/* - réquilibrage d'un arbre non auto-équilibré */ /* - Rebalance a non auto-balanced tree */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Root: pointeur sur la racine de la structure de données */ /* (I) Root_Ptr: Data structure pointer */
/* (I) Index_Id: Id of the index */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Index_Reorg_I( NDT_Root *, NDT_Index_Id); NDD_DLL_API NDT_Status ND_Index_Reorg_I( NDT_Root *, NDT_Index_Id);
NDD_DLL_API NDT_Status ND_Index_Reorg_C( NDT_Root *, NDT_Index_Id); NDD_DLL_API NDT_Status ND_Index_Reorg_C( NDT_Root *, NDT_Index_Id);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Parcours de tous les noeuds d'une structure de données et exécution d'une */ /* Traverse a data structure index & execute a command on each node */
/* commande sur chacun d'eux */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Root: pointeur sur la racine de la structure de données */ /* (I) Root_Ptr: Data structure pointer */
/* (I) Command: Commande à exécuter sur chaque noeud traversé */ /* (I) Index_Id: Id of the index */
/* (I) Data: pointeur de données utilisateur */ /* (I) Command: Manager command */
/* (I) ...: User args */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Index_Traverse_VI( NDT_Root *, NDT_Index_Id, NDT_Command, va_list *); NDD_DLL_API NDT_Status ND_Index_Traverse_VI( NDT_Root *, NDT_Index_Id, NDT_Command, va_list *);
NDD_DLL_API NDT_Status ND_Index_Traverse_VC( NDT_Root *, NDT_Index_Id, NDT_Command, va_list *); NDD_DLL_API NDT_Status ND_Index_Traverse_VC( NDT_Root *, NDT_Index_Id, NDT_Command, va_list *);
NDD_DLL_API NDT_Status ND_Index_Traverse_I( NDT_Root *, NDT_Index_Id, NDT_Command, ...); NDD_DLL_API NDT_Status ND_Index_Traverse_I( NDT_Root *, NDT_Index_Id, NDT_Command, ...);
@ -1054,47 +1084,59 @@ NDD_DLL_API NDT_Status ND_Index_Traverse_C( NDT_Root *, NDT_Index_Id, NDT_Com
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Parcours de tous les noeuds d'une structure de données et exécution d'une */ /* Print data structure index information */
/* commande sur chacun d'eux */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Root: pointeur sur la racine de la structure de données */ /* (I) Stream: Output stream */
/* (I) Command: Commande à exécuter sur chaque noeud traversé */ /* (I) Root_Ptr: Data structure pointer */
/* (I) Data: pointeur de données utilisateur */ /* (I) Index_Id: Id of the index */
/* (I) Recursive_Mode: Child or Parent */
/* (I) Recursive_Depth: Curent recursion depth */
/* (I) Recursive_Offset: Curent print out offset */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Index_Info_Print_I( FILE *, NDT_Root *, NDT_Index_Id, NDT_Recursive_Mode, NDT_Recursive_Depth, NDT_Recursive_Offset); NDD_DLL_API NDT_Status ND_Index_Info_Print_I( FILE *, NDT_Root *, NDT_Index_Id, NDT_Recursive_Mode, NDT_Recursive_Depth, NDT_Recursive_Offset);
NDD_DLL_API NDT_Status ND_Index_Info_Print_C( FILE *, NDT_Root *, NDT_Index_Id, NDT_Recursive_Mode, NDT_Recursive_Depth, NDT_Recursive_Offset); NDD_DLL_API NDT_Status ND_Index_Info_Print_C( FILE *, NDT_Root *, NDT_Index_Id, NDT_Recursive_Mode, NDT_Recursive_Depth, NDT_Recursive_Offset);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Ajout d'une valeur à une structure de données */ /* Add a new value to a data structure index */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Root: pointeur sur la racine de la structure de données */ /* (I) Root_Ptr: Data structure pointer */
/* (I) Value: pointeur sur la valeur à ajouter */ /* (I) Index_Id: Id of the index */
/* (I) Value_Ptr: Value pointer */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Index_Value_Add_I( NDT_Root *, NDT_Index_Id, void *); NDD_DLL_API NDT_Status ND_Index_Value_Add_I( NDT_Root *, NDT_Index_Id, void *);
NDD_DLL_API NDT_Status ND_Index_Value_Add_C( NDT_Root *, NDT_Index_Id, void *); NDD_DLL_API NDT_Status ND_Index_Value_Add_C( NDT_Root *, NDT_Index_Id, void *);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Suppression du premier noeud correspondant à une valeur donnée */ /* Remove the first matching value from a data structure index */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Root : pointeur sur la racine de la structure de données */ /* (I) Root_Ptr: Data structure pointer */
/* (I) Reference_Value : pointeur sur la valeur de référence */ /* (I) Index_Id: Id of the index */
/* (I) Removed_Value : adresse d'un pointeur sur la valeur supprimée */ /* (I) Ref_Value_Ptr: Reference value pointer to search */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Index_Value_Remove_I( NDT_Root *, NDT_Index_Id, void *); NDD_DLL_API NDT_Status ND_Index_Value_Remove_I( NDT_Root *, NDT_Index_Id, void *);
NDD_DLL_API NDT_Status ND_Index_Value_Remove_C( NDT_Root *, NDT_Index_Id, void *); NDD_DLL_API NDT_Status ND_Index_Value_Remove_C( NDT_Root *, NDT_Index_Id, void *);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Affichage de la valeur de tous les noeuds d'une structure de données */ /* Print all the data structure index values */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Root: pointeur sur la racine de la structure de données */ /* (I) Stream: Output stream */
/* (I) Out : flux de sortie */ /* (I) Root_Ptr: Data structure pointer */
/* (I) Index_Id: Id of the index */
/* (I) Recursive_Mode: Child or Parent */
/* (I) Recursive_Depth: Curent recursion depth */
/* (I) Recursive_Offset: Curent print out offset */
/* (I) ...: User args */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Index_Value_Print_VI( FILE *, NDT_Root *, NDT_Index_Id, NDT_Recursive_Mode, NDT_Recursive_Depth, NDT_Recursive_Offset, va_list *); NDD_DLL_API NDT_Status ND_Index_Value_Print_VI( FILE *, NDT_Root *, NDT_Index_Id, NDT_Recursive_Mode, NDT_Recursive_Depth, NDT_Recursive_Offset, va_list *);
NDD_DLL_API NDT_Status ND_Index_Value_Print_I( FILE *, NDT_Root *, NDT_Index_Id, NDT_Recursive_Mode, NDT_Recursive_Depth, NDT_Recursive_Offset, ...); NDD_DLL_API NDT_Status ND_Index_Value_Print_I( FILE *, NDT_Root *, NDT_Index_Id, NDT_Recursive_Mode, NDT_Recursive_Depth, NDT_Recursive_Offset, ...);
NDD_DLL_API NDT_Status ND_Index_Value_Print_C( FILE *, NDT_Root *, NDT_Index_Id, NDT_Recursive_Mode, NDT_Recursive_Depth, NDT_Recursive_Offset, ...); NDD_DLL_API NDT_Status ND_Index_Value_Print_C( FILE *, NDT_Root *, NDT_Index_Id, NDT_Recursive_Mode, NDT_Recursive_Depth, NDT_Recursive_Offset, ...);
@ -1102,78 +1144,89 @@ NDD_DLL_API NDT_Status ND_Index_Value_Print_C( FILE *, NDT_Root *, NDT_Index
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Ajout d'un noeud à une structure de données */ /* Add a new node to a data structure index */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Root: pointeur sur la racine de la structure de données */ /* (I) Root_Ptr: Data structure pointer */
/* (I) Node: pointeur sur le noeud à ajouter */ /* (I) Index_Id: Id of the index */
/* (I) Node_Ptr: Node pointer */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Index_Node_Add_I( NDT_Root *, NDT_Index_Id, NDT_Node *); NDD_DLL_API NDT_Status ND_Index_Node_Add_I( NDT_Root *, NDT_Index_Id, NDT_Node *);
NDD_DLL_API NDT_Status ND_Index_Node_Add_C( NDT_Root *, NDT_Index_Id, NDT_Node *); NDD_DLL_API NDT_Status ND_Index_Node_Add_C( NDT_Root *, NDT_Index_Id, NDT_Node *);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Suppression d'un noeud dans une structure de données */ /* Remove a node from a data structure index */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Node: pointeur sur le noeud à supprimer de la structure de données */ /* (I) Node_Ptr: Node pointer */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Index_Node_Remove_I( NDT_Node *); NDD_DLL_API NDT_Status ND_Index_Node_Remove_I( NDT_Node *);
NDD_DLL_API NDT_Status ND_Index_Node_Remove_C( NDT_Node *); NDD_DLL_API NDT_Status ND_Index_Node_Remove_C( NDT_Node *);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Récupération du premier noeud d'une structure */ /* Get the first node of a data structure index */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Root : pointeur sur la racine dont on cherche le premier noeud */ /* (O) Node_Ptr_Ptr: Node pointer address */
/* (O) Node : pointeur sur le noeud à récupérer */ /* (I) Root_Ptr: Data structure pointer */
/* (I) Index_Id: Id of the index */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Index_Node_First_Get_I( NDT_Node **, NDT_Root *, NDT_Index_Id); NDD_DLL_API NDT_Status ND_Index_Node_First_Get_I( NDT_Node **, NDT_Root *, NDT_Index_Id);
NDD_DLL_API NDT_Status ND_Index_Node_First_Get_C( NDT_Node **, NDT_Root *, NDT_Index_Id); NDD_DLL_API NDT_Status ND_Index_Node_First_Get_C( NDT_Node **, NDT_Root *, NDT_Index_Id);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Récupération du dernier noeud d'une structure */ /* Get the last node of a data structure index */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Root: pointeur sur la racine dont on cherche le dernier noeud */ /* (O) Node_Ptr_Ptr: Node pointer address */
/* (O) Node : pointeur sur le noeud à récupérer */ /* (I) Root_Ptr: Data structure pointer */
/* (I) Index_Id: Id of the index */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Index_Node_Last_Get_I( NDT_Node **, NDT_Root *, NDT_Index_Id); NDD_DLL_API NDT_Status ND_Index_Node_Last_Get_I( NDT_Node **, NDT_Root *, NDT_Index_Id);
NDD_DLL_API NDT_Status ND_Index_Node_Last_Get_C( NDT_Node **, NDT_Root *, NDT_Index_Id); NDD_DLL_API NDT_Status ND_Index_Node_Last_Get_C( NDT_Node **, NDT_Root *, NDT_Index_Id);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Récupération du noeud suivant */ /* Get the next node of a data structure index */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Node: pointeur sur le noeud dont on cherche le suivant */ /* (O) Node_Ptr_Ptr: Node pointer address */
/* (O) Next_Node : pointeur sur le noeud suivant */ /* (I) Node_Ptr: Node pointer */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Index_Node_Next_Get_I( NDT_Node **, NDT_Node *); NDD_DLL_API NDT_Status ND_Index_Node_Next_Get_I( NDT_Node **, NDT_Node *);
NDD_DLL_API NDT_Status ND_Index_Node_Next_Get_C( NDT_Node **, NDT_Node *); NDD_DLL_API NDT_Status ND_Index_Node_Next_Get_C( NDT_Node **, NDT_Node *);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Récupération du noeud précédant */ /* Get the previous node of a data structure index */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Node: pointeur sur le noeud dont on cherche le précédant */ /* (O) Node_Ptr_Ptr: Node pointer address */
/* (O) Prev_Node : pointeur sur le noeud précédant */ /* (I) Node_Ptr: Node pointer */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Index_Node_Previous_Get_I( NDT_Node **, NDT_Node *); NDD_DLL_API NDT_Status ND_Index_Node_Previous_Get_I( NDT_Node **, NDT_Node *);
NDD_DLL_API NDT_Status ND_Index_Node_Previous_Get_C( NDT_Node **, NDT_Node *); NDD_DLL_API NDT_Status ND_Index_Node_Previous_Get_C( NDT_Node **, NDT_Node *);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Recherche un noeud à partir d'une valeur */ /* Find a node from a value in a data structure index */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Root : pointeur sur la racine de l'abre */ /* (O) Node_Ptr_Ptr: Node pointer address */
/* (O) Node : pointeur sur le noeud à récuperer */ /* (I) Root_Ptr: Data structure pointer */
/* (I) Value : pointeur sur la valeur à rechercher */ /* (I) Index_Id: Id of the index */
/* (I) Data : pointeur de données */ /* (I) Ref_Value_Ptr: Reference value pointer to search */
/* (I) ...: User args */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Index_Node_Find_VI( NDT_Node **, NDT_Root *, NDT_Index_Id, void *, va_list *); NDD_DLL_API NDT_Status ND_Index_Node_Find_VI( NDT_Node **, NDT_Root *, NDT_Index_Id, void *, va_list *);
NDD_DLL_API NDT_Status ND_Index_Node_Find_VC( NDT_Node **, NDT_Root *, NDT_Index_Id, void *, va_list *); NDD_DLL_API NDT_Status ND_Index_Node_Find_VC( NDT_Node **, NDT_Root *, NDT_Index_Id, void *, va_list *);
NDD_DLL_API NDT_Status ND_Index_Node_Find_I( NDT_Node **, NDT_Root *, NDT_Index_Id, void *, ...); NDD_DLL_API NDT_Status ND_Index_Node_Find_I( NDT_Node **, NDT_Root *, NDT_Index_Id, void *, ...);
@ -1182,44 +1235,52 @@ NDD_DLL_API NDT_Status ND_Index_Node_Find_C( NDT_Node **, NDT_Root *, NDT_In
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Récupération de la racine d'une structure */ /* Get the root node of a data structure */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (O) Root: Adresse du pointeur sur la racine à récupérer */ /* (O) Root_Ptr_Ptr: Data structure pointer address */
/* (I) Node: pointeur sur le noeud dont on cherche la racine */ /* (I) Node_Ptr: Node pointer */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Node_Root_Get_I( NDT_Root **, NDT_Node *); NDD_DLL_API NDT_Status ND_Node_Root_Get_I( NDT_Root **, NDT_Node *);
NDD_DLL_API NDT_Status ND_Node_Root_Get_C( NDT_Root **, NDT_Node *); NDD_DLL_API NDT_Status ND_Node_Root_Get_C( NDT_Root **, NDT_Node *);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Allocation d'une valeur d'une structure de données */ /* Allocate a new value */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Root : pointeur sur la racine de la structure de données */ /* (O) Value_Ptr_Ptr: Value pointer address */
/* (O) Value : adresse d'un pointeur sur la valeur à allouer */ /* (I) Root_Ptr: Data structure pointer */
/* (I) ... : arguments relatifs à l'allocation de la valeur */ /* (I) ...: User args */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Value_Alloc_I( NDT_Root *, void **, ...);
NDD_DLL_API NDT_Status ND_Value_Alloc_C( NDT_Root *, void **, ...); NDD_DLL_API NDT_Status ND_Value_Alloc_I( void **, NDT_Root *, ...);
NDD_DLL_API NDT_Status ND_Value_Alloc_C( void **, NDT_Root *, ...);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Désallocation d'une valeur d'une structure de données */ /* Deallocate a value */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Root: pointeur sur la racine de la structure de données */ /* (I) Root_Ptr: Data structure pointer */
/* (I) Value: pointeur sur la valeur à désallouer */ /* (I) Value_Ptr: Value pointer */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Value_Free_I( NDT_Root *, void *); NDD_DLL_API NDT_Status ND_Value_Free_I( NDT_Root *, void *);
NDD_DLL_API NDT_Status ND_Value_Free_C( NDT_Root *, void *); NDD_DLL_API NDT_Status ND_Value_Free_C( NDT_Root *, void *);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Exécution d'une fonction Manager dont le nom est passé en paramètre */ /* Execute a manager command */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Function : nom de la fonction manager à exécuter */ /* (I) Root_Ptr: Data structure pointer */
/* (I) Index_Id: Id of the index */
/* (I) Node_Ptr: Node pointer */
/* (I) Command: Manager command */
/* (I) ...: User args */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Manager_Exec_VI( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list *); NDD_DLL_API NDT_Status ND_Manager_Exec_VI( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list *);
NDD_DLL_API NDT_Status ND_Manager_Exec_VC( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list *); NDD_DLL_API NDT_Status ND_Manager_Exec_VC( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list *);
NDD_DLL_API NDT_Status ND_Manager_Exec_I( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, ...); NDD_DLL_API NDT_Status ND_Manager_Exec_I( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, ...);
@ -1228,28 +1289,30 @@ NDD_DLL_API NDT_Status ND_Manager_Exec_C( NDT_Root *, NDT_Index_Id, NDT_Node
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Exécution d'une fonction d'allocation dont le nom est passé en paramètre */ /* Execute an allocator function */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Function : nom de la fonction à exécuter */ /* (O) Value_Ptr_Ptr: Value pointer address */
/* (O) Ptr : adresse d'un pointeur sur la zone à allouer */ /* (I) Allocator_Name: Value allocator function name */
/* (I) Size : taille de la zone à allouer */ /* (I) Allocator_Ptr: Value allocator function pointer */
/* (I) Data : pointeur de données utiles à l'allocateur */ /* (I) Data_Ptr: User pointer */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Allocator_Exec_I( void **, size_t, NDT_Allocator_Name, NDT_Allocator *, void *); NDD_DLL_API NDT_Status ND_Allocator_Exec_I( void **, size_t, NDT_Allocator_Name, NDT_Allocator *, void *);
NDD_DLL_API NDT_Status ND_Allocator_Exec_C( void **, size_t, NDT_Allocator_Name, NDT_Allocator *, void *); NDD_DLL_API NDT_Status ND_Allocator_Exec_C( void **, size_t, NDT_Allocator_Name, NDT_Allocator *, void *);
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* Exécution d'une fonction de désallocation le dont nom est passé en paramètre */ /* Execute a deallocator function */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
/* (I) Function : nom de la fonction à exécuter */ /* (I) Value_Ptr: Value pointer */
/* (I) Function : nom de la fonction à exécuter */ /* (I) Allocator_Name: Value deallocator function name */
/* (I) Ptr : adresse de la zone à désallouer */ /* (I) Allocator_Ptr: Value deallocator function pointer */
/* (I) Data : pointeur de données utiles au désallocateur */ /* (I) Data_Ptr: User pointer */
/*------------------------------------------------------------------------------*/ /*------------------------------------------------------------------------------*/
NDD_DLL_API NDT_Status ND_Desallocator_Exec_I( void *, NDT_Desallocator_Name, NDT_Desallocator *, void *);
NDD_DLL_API NDT_Status ND_Desallocator_Exec_C( void *, NDT_Desallocator_Name, NDT_Desallocator *, void *); NDD_DLL_API NDT_Status ND_Deallocator_Exec_I( void *, NDT_Deallocator_Name, NDT_Deallocator *, void *);
NDD_DLL_API NDT_Status ND_Deallocator_Exec_C( void *, NDT_Deallocator_Name, NDT_Deallocator *, void *);