Compare commits
No commits in common. "master" and "imr-1_0_0-2" have entirely different histories.
master
...
imr-1_0_0-
@ -1,19 +1,19 @@
|
|||||||
# $RCSfile: ReadMe.txt,v $
|
# %RCSfile: ReadMe.txt,v %
|
||||||
# $Revision: 1.2 $
|
# %Revision: 2.8 %
|
||||||
# $Name: $
|
# %Name: libnode-2_1_0-1 %
|
||||||
# $Date: 2010/06/06 22:19:26 $
|
# %Date: 2005/01/24 01:19:50 %
|
||||||
# $Author: agibert $
|
# %Author: agibert %
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Welcome to LibNode 2.2.x !
|
Welcome to LibNode 2.1.x !
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
This release of LibNode supports the following OS:
|
This release of LibNode supports the following OS:
|
||||||
- Linux 2.2.x, 2.4.x and 2.6.x (tested on RedHat & Mandriva),
|
- Linux 2.2.x, 2.4.x and 2.6.x (tested on RedHat & Mandrake),
|
||||||
- Solaris 2.6,
|
- Solaris 2.6,
|
||||||
- Windows NT4, 2000 and XP.
|
- Windows NT4, 2000 and XP.
|
||||||
|
|
||||||
@ -41,4 +41,4 @@ Enjoy it!
|
|||||||
Your LibNode Team.
|
Your LibNode Team.
|
||||||
|
|
||||||
arnaud@rx3.net
|
arnaud@rx3.net
|
||||||
http://www.rx3.org/dvp/?dvp=libnode
|
http://www.rx3.org/dvp/libnode
|
||||||
|
@ -1,28 +1,13 @@
|
|||||||
# $RCSfile: ReleaseNotes.txt,v $
|
# %RCSfile: ReleaseNotes.txt,v %
|
||||||
# $Revision: 1.2 $
|
# %Revision: 2.20 %
|
||||||
# $Name: $
|
# %Name: libnode-2_1_0-1 %
|
||||||
# $Date: 2010/06/06 22:19:27 $
|
# %Date: 2005/01/24 00:50:55 %
|
||||||
# $Author: agibert $
|
# %Author: agibert %
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
LibNode V 2.2.0-1 - A. Gibert - 06/06/10
|
|
||||||
------------------------------------------------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
All: Add support C99 va_arg for curent gcc (4.4.1),
|
|
||||||
Add -fPIC flag in .c to .o makefile rule,
|
|
||||||
LibNode: Add ND_VA_* macros to help manager varargs,
|
|
||||||
Update Managers to use ND_VA_* macros,
|
|
||||||
Improve LibShMem support by restricting OpenStruct tracking on local DataStruct (Manager_Ptr != NULL),
|
|
||||||
Add example manager template in public node.h file,
|
|
||||||
NDDemo0: Add LibNode 2.2 support: Use ND_VA_* macros in manager,
|
|
||||||
NDBench: Add LibNode 2.2 support: Use ND_VA_* macros in manager.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------------------------------------------------------------
|
------------------------------------------------------------------------------------------------------------------------------------
|
||||||
LibNode V 2.1.0-1 - A. Gibert - 24/01/05
|
LibNode V 2.1.0-1 - A. Gibert - 24/01/05
|
||||||
------------------------------------------------------------------------------------------------------------------------------------
|
------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
# $RCSfile: ToDo.txt,v $
|
# %RCSfile: ToDo.txt,v %
|
||||||
# $Revision: 1.2 $
|
# %Revision: 2.5 %
|
||||||
# $Name: $
|
# %Name: libnode-2_1_0-1 %
|
||||||
# $Date: 2010/06/06 22:19:27 $
|
# %Date: 2005/01/24 01:19:50 %
|
||||||
# $Author: agibert $
|
# %Author: agibert %
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
/* $RCSfile: nddemo0.c,v $ */
|
/* %RCSfile: nddemo0.c,v % */
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
/* $Revision: 1.2 $ */
|
/* %Revision: 2.8 % */
|
||||||
/* $Name: $ */
|
/* %Name: libnode-2_1_0-1 % */
|
||||||
/* $Date: 2010/06/06 22:20:16 $ */
|
/* %Date: 2004/08/23 22:48:37 % */
|
||||||
/* $Author: agibert $ */
|
/* %Author: agibert % */
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
@ -64,7 +64,7 @@ typedef struct Demo_Value
|
|||||||
/* Prototypes */
|
/* Prototypes */
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
NDT_Status Demo_DS_Manager( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list *);
|
NDT_Status Demo_DS_Manager( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list);
|
||||||
void DataStruct_Load( NDT_Root *, FILE *);
|
void DataStruct_Load( NDT_Root *, FILE *);
|
||||||
void DataStruct_Load( NDT_Root *, FILE *);
|
void DataStruct_Load( NDT_Root *, FILE *);
|
||||||
void Demo( char *, short);
|
void Demo( char *, short);
|
||||||
@ -80,7 +80,7 @@ int main( int, char **);
|
|||||||
/* */
|
/* */
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
NDT_Status Demo_DS_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node *Node_Ptr, NDT_Command Command, va_list *Args_Ptr)
|
NDT_Status Demo_DS_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node *Node_Ptr, NDT_Command Command, va_list Args)
|
||||||
{
|
{
|
||||||
NDT_Command_Name Command_Name;
|
NDT_Command_Name Command_Name;
|
||||||
|
|
||||||
@ -89,12 +89,12 @@ NDT_Status Demo_DS_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_No
|
|||||||
{
|
{
|
||||||
case NDD_CMD_MANAGER_VERSION:
|
case NDD_CMD_MANAGER_VERSION:
|
||||||
{
|
{
|
||||||
ND_VA_ARG_GET( Version_Name_Ptr, *Args_Ptr, NDT_Version_Name *);
|
NDT_Version_Name *Version_Name_Ptr = (NDT_Version_Name *)va_arg( Args, NDT_Version_Name *);
|
||||||
|
|
||||||
|
|
||||||
Command_Name = "NDD_CMD_MANAGER_VERSION";
|
Command_Name = "NDD_CMD_MANAGER_VERSION";
|
||||||
|
|
||||||
*Version_Name_Ptr = "$Revision: 1.2 $ $Name: $ $Date: 2010/06/06 22:20:16 $ $Author: agibert $";
|
*Version_Name_Ptr = "%Revision: 2.8 % %Name: libnode-2_1_0-1 % %Date: 2004/08/23 22:48:37 % %Author: agibert %";
|
||||||
|
|
||||||
return( NDS_OK);
|
return( NDS_OK);
|
||||||
}
|
}
|
||||||
@ -102,15 +102,15 @@ NDT_Status Demo_DS_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_No
|
|||||||
case NDD_CMD_INDEX_GET:
|
case NDD_CMD_INDEX_GET:
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
ND_VA_ARG_GET( Reply_Index_Id_Ptr, *Args_Ptr, NDT_Index_Id *);
|
NDT_Index_Id *Reply_Index_Id_Ptr = (NDT_Index_Id *)va_arg( Args, NDT_Index_Id *);
|
||||||
ND_VA_ARG_GET( Reply_Command_Ptr, *Args_Ptr, NDT_Command *);
|
NDT_Command *Reply_Command_Ptr = (NDT_Command *)va_arg( Args, NDT_Command *);
|
||||||
ND_VA_ARG_GET( Cmd, *Args_Ptr, NDT_Command);
|
NDT_Command Cmd = (NDT_Command)va_arg( Args, NDT_Command);
|
||||||
ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *);
|
void *Value_ptr = (void *)va_arg( Args, void *);
|
||||||
*/
|
*/
|
||||||
ND_VA_ARG_GET( Reply_Index_Id_Ptr, *Args_Ptr, NDT_Index_Id *);
|
NDT_Index_Id *Reply_Index_Id_Ptr = (NDT_Index_Id *)va_arg( Args, NDT_Index_Id *);
|
||||||
ND_VA_ARG_GET( Reply_Command_Ptr, *Args_Ptr, NDT_Command *);
|
NDT_Command *Reply_Command_Ptr = (NDT_Command *)va_arg( Args, NDT_Command *);
|
||||||
ND_VA_ARG_GET( Cmd, *Args_Ptr, NDT_Command);
|
NDT_Command Cmd = (NDT_Command)va_arg( Args, NDT_Command);
|
||||||
ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, Demo_Value *);
|
Demo_Value *Value_ptr = (Demo_Value *)va_arg( Args, Demo_Value *);
|
||||||
|
|
||||||
|
|
||||||
Command_Name = "NDD_CMD_INDEX_GET";
|
Command_Name = "NDD_CMD_INDEX_GET";
|
||||||
@ -159,15 +159,12 @@ NDT_Status Demo_DS_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_No
|
|||||||
case NDD_CMD_VALUE_ALLOC:
|
case NDD_CMD_VALUE_ALLOC:
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
ND_VA_ARG_GET( Value_Ptr_Ptr, *Args_Ptr, void **);
|
void **Value_Ptr_Ptr = (void **)va_arg( Args, void **);
|
||||||
|
va_list user_args = (va_list)va_arg( Args, va_list);
|
||||||
ND_VA_LIST_OPEN( user_args, *Args_Ptr);
|
user_type user_data = (user_type)va_arg( user_args, user_type);
|
||||||
ND_VA_ARG_GET( user_data, user_args, user_type);
|
... = (...)va_arg( user_args, ...);
|
||||||
ND_VA_ARG_GET( ..., user_args, ...);
|
|
||||||
|
|
||||||
ND_VA_LIST_CLOSE( user_args);
|
|
||||||
*/
|
*/
|
||||||
ND_VA_ARG_GET( Value_Ptr_Ptr, *Args_Ptr, Demo_Value **);
|
Demo_Value **Value_Ptr_Ptr = va_arg( Args, Demo_Value **);
|
||||||
|
|
||||||
|
|
||||||
Command_Name = "NDD_CMD_VALUE_ALLOC";
|
Command_Name = "NDD_CMD_VALUE_ALLOC";
|
||||||
@ -190,15 +187,12 @@ NDT_Status Demo_DS_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_No
|
|||||||
case NDD_CMD_VALUE_FREE:
|
case NDD_CMD_VALUE_FREE:
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *);
|
void *Value_Ptr = (void *)va_arg( Args, void *);
|
||||||
|
va_list user_args = (va_list)va_arg( Args, va_list);
|
||||||
ND_VA_LIST_OPEN( user_args, *Args_Ptr);
|
user_type user_data = (user_type)va_arg( user_args, user_type);
|
||||||
ND_VA_ARG_GET( user_data, user_args, user_type);
|
... = (...)va_arg( user_args, ...);
|
||||||
ND_VA_ARG_GET( ..., user_args, ...);
|
|
||||||
|
|
||||||
ND_VA_LIST_CLOSE( user_args);
|
|
||||||
*/
|
*/
|
||||||
ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, Demo_Value *);
|
Demo_Value *Value_Ptr = (Demo_Value *)va_arg( Args, Demo_Value *);
|
||||||
|
|
||||||
|
|
||||||
Command_Name = "NDD_CMD_VALUE_FREE";
|
Command_Name = "NDD_CMD_VALUE_FREE";
|
||||||
@ -211,17 +205,14 @@ NDT_Status Demo_DS_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_No
|
|||||||
case NDD_CMD_VALUE_COMP:
|
case NDD_CMD_VALUE_COMP:
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
ND_VA_ARG_GET( Value1_Ptr, *Args_Ptr, void *);
|
void *Value1_Ptr = (void *)va_arg( Args, void *);
|
||||||
ND_VA_ARG_GET( Value2_Ptr, *Args_Ptr, void *);
|
void *Value2_Ptr = (void *)va_arg( Args, void *);
|
||||||
|
va_list user_args = (va_list)va_arg( Args, va_list);
|
||||||
ND_VA_LIST_OPEN( user_args, *Args_Ptr);
|
user_type user_data = (user_type)va_arg( user_args, user_type);
|
||||||
ND_VA_ARG_GET( user_data, user_args, user_type);
|
... = (...)va_arg( user_args, ...);
|
||||||
ND_VA_ARG_GET( ..., user_args, ...);
|
|
||||||
|
|
||||||
ND_VA_LIST_CLOSE( user_args);
|
|
||||||
*/
|
*/
|
||||||
ND_VA_ARG_GET( Value1_Ptr, *Args_Ptr, Demo_Value *);
|
Demo_Value *Value1_Ptr = va_arg( Args, Demo_Value *);
|
||||||
ND_VA_ARG_GET( Value2_Ptr, *Args_Ptr, Demo_Value *);
|
Demo_Value *Value2_Ptr = va_arg( Args, Demo_Value *);
|
||||||
|
|
||||||
|
|
||||||
Command_Name = "NDD_CMD_VALUE_COMP";
|
Command_Name = "NDD_CMD_VALUE_COMP";
|
||||||
@ -311,17 +302,12 @@ NDT_Status Demo_DS_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_No
|
|||||||
case NDD_CMD_VALUE_ADD:
|
case NDD_CMD_VALUE_ADD:
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *);
|
void *Value_Ptr = (void *)va_arg( Args, void *);
|
||||||
|
va_list user_args = (va_list)va_arg( Args, va_list);
|
||||||
ND_VA_LIST_OPEN( user_args, *Args_Ptr);
|
user_type user_data = (user_type)va_arg( user_args, user_type);
|
||||||
|
... = (...)va_arg( user_args, ...);
|
||||||
ND_VA_ARG_GET( user_data, user_args, user_type);
|
|
||||||
ND_VA_ARG_GET( ..., user_args, ...);
|
|
||||||
|
|
||||||
ND_VA_LIST_CLOSE( user_args);
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
Command_Name = "NDD_CMD_VALUE_ADD";
|
Command_Name = "NDD_CMD_VALUE_ADD";
|
||||||
|
|
||||||
return( NDS_OK);
|
return( NDS_OK);
|
||||||
@ -330,56 +316,38 @@ NDT_Status Demo_DS_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_No
|
|||||||
case NDD_CMD_VALUE_REMOVE:
|
case NDD_CMD_VALUE_REMOVE:
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *);
|
void *Value_Ptr = (void *)va_arg( Args, void *);
|
||||||
|
va_list user_args = (va_list)va_arg( Args, va_list);
|
||||||
ND_VA_LIST_OPEN( user_args, *Args_Ptr);
|
user_type user_data = (user_type)va_arg( user_args, user_type);
|
||||||
|
... = (...)va_arg( user_args, ...);
|
||||||
ND_VA_ARG_GET( user_data, user_args, user_type);
|
|
||||||
ND_VA_ARG_GET( ..., user_args, ...);
|
|
||||||
|
|
||||||
ND_VA_LIST_CLOSE( user_args);
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
Command_Name = "NDD_CMD_VALUE_REMOVE";
|
Command_Name = "NDD_CMD_VALUE_REMOVE";
|
||||||
|
|
||||||
return( NDS_OK);
|
return( NDS_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
case NDD_CMD_VALUE_PRINT:
|
case NDD_CMD_VALUE_PRINT:
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *);
|
NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *);
|
||||||
|
va_list lib_args = (va_list)va_arg( Args, va_list);
|
||||||
|
FILE *Out = (FILE *)va_arg( lib_args, FILE *);
|
||||||
|
NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode);
|
||||||
|
NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth);
|
||||||
|
va_list user_args = (va_list)va_arg( lib_args, va_list);
|
||||||
|
user_type user_data = (user_type)va_arg( user_args, user_type);
|
||||||
|
... = (...)va_arg( user_args, ...);
|
||||||
|
|
||||||
ND_VA_LIST_OPEN( lib_args, *Args_Ptr);
|
void *Value_Ptr = Node_Ptr->Value;
|
||||||
|
*/
|
||||||
|
NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *);
|
||||||
|
va_list lib_args = (va_list)va_arg( Args, va_list);
|
||||||
|
FILE *Out = (FILE *)va_arg( lib_args, FILE *);
|
||||||
|
NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode);
|
||||||
|
NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth);
|
||||||
|
|
||||||
ND_VA_ARG_GET( Out, lib_args, FILE *);
|
Demo_Value *Value_Ptr = Node_Ptr->Value;
|
||||||
ND_VA_ARG_GET( Recursive_Mode, lib_args, NDT_Recursive_Mode);
|
|
||||||
ND_VA_ARG_GET( Recursive_Depth, lib_args, NDT_Recursive_Depth);
|
|
||||||
ND_VA_ARG_GET( Recursive_Offset, lib_args, NDT_Recursive_Offset);
|
|
||||||
|
|
||||||
ND_VA_LIST_OPEN( user_args, lib_args);
|
|
||||||
|
|
||||||
ND_VA_ARG_GET( user_data, user_args, user_type);
|
|
||||||
ND_VA_ARG_GET( ..., user_args, ...);
|
|
||||||
|
|
||||||
ND_VA_LIST_CLOSE( user_args);
|
|
||||||
ND_VA_LIST_CLOSE( lib_args);
|
|
||||||
*/
|
|
||||||
ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *);
|
|
||||||
|
|
||||||
ND_VA_LIST_OPEN( lib_args, *Args_Ptr);
|
|
||||||
|
|
||||||
ND_VA_ARG_GET( Out, lib_args, FILE *);
|
|
||||||
ND_VA_ARG_GET( Recursive_Mode, lib_args, NDT_Recursive_Mode);
|
|
||||||
ND_VA_ARG_GET( Recursive_Depth, lib_args, NDT_Recursive_Depth);
|
|
||||||
ND_VA_ARG_GET( Recursive_Offset, lib_args, NDT_Recursive_Offset);
|
|
||||||
|
|
||||||
ND_VA_LIST_CLOSE( lib_args);
|
|
||||||
|
|
||||||
|
|
||||||
Demo_Value *Value_Ptr = Node_Ptr->Value;
|
|
||||||
|
|
||||||
|
|
||||||
Command_Name = "NDD_CMD_VALUE_PRINT";
|
Command_Name = "NDD_CMD_VALUE_PRINT";
|
||||||
@ -393,25 +361,18 @@ NDT_Status Demo_DS_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_No
|
|||||||
case NDD_CMD_INFO_PRINT:
|
case NDD_CMD_INFO_PRINT:
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *);
|
NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *);
|
||||||
|
va_list lib_args = (va_list)va_arg( Args, va_list);
|
||||||
|
FILE *Out = (FILE *)va_arg( lib_args, FILE *);
|
||||||
|
NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode);
|
||||||
|
NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth);
|
||||||
|
va_list user_args = (va_list)va_arg( lib_args, va_list);
|
||||||
|
user_type user_data = (user_type)va_arg( user_args, user_type);
|
||||||
|
... = (...)va_arg( user_args, ...);
|
||||||
|
|
||||||
ND_VA_LIST_OPEN( lib_args, *Args_Ptr);
|
void *Value_Ptr = Node_Ptr->Value;
|
||||||
|
|
||||||
ND_VA_ARG_GET( Out, lib_args, FILE *);
|
|
||||||
ND_VA_ARG_GET( Recursive_Mode, lib_args, NDT_Recursive_Mode);
|
|
||||||
ND_VA_ARG_GET( Recursive_Depth, lib_args, NDT_Recursive_Depth);
|
|
||||||
ND_VA_ARG_GET( Recursive_Offset, lib_args, NDT_Recursive_Offset);
|
|
||||||
|
|
||||||
ND_VA_LIST_OPEN( user_args, lib_args);
|
|
||||||
|
|
||||||
ND_VA_ARG_GET( user_data, user_args, user_type);
|
|
||||||
ND_VA_ARG_GET( ..., user_args, ...);
|
|
||||||
|
|
||||||
ND_VA_LIST_CLOSE( user_args);
|
|
||||||
ND_VA_LIST_CLOSE( lib_args);
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
Command_Name = "NDD_CMD_INFO_PRINT";
|
Command_Name = "NDD_CMD_INFO_PRINT";
|
||||||
|
|
||||||
return( NDS_OK);
|
return( NDS_OK);
|
||||||
@ -448,7 +409,7 @@ void DataStruct_Load( NDT_Root *ds_ptr, FILE *demo_file)
|
|||||||
while( !feof( demo_file))
|
while( !feof( demo_file))
|
||||||
{
|
{
|
||||||
str = fgets( input_string, STRING_SIZE, demo_file);
|
str = fgets( input_string, STRING_SIZE, demo_file);
|
||||||
if( str != NULL)
|
if( ( (const int)str != EOF) && ( str != NULL))
|
||||||
{
|
{
|
||||||
if( strlen( input_string) >= STRING_LEN)
|
if( strlen( input_string) >= STRING_LEN)
|
||||||
{
|
{
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# $RCSfile: nddemo0.dat,v $
|
# %RCSfile: nddemo0.dat,v %
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# $Revision: 1.2 $
|
# %Revision: 2.1 %
|
||||||
# $Name: $
|
# %Name: libnode-2_1_0-1 %
|
||||||
# $Date: 2010/06/06 22:20:17 $
|
# %Date: 2003/07/16 00:17:02 %
|
||||||
# $Author: agibert $
|
# %Author: agibert %
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
ggg 1 xxxxxx example
|
ggg 1 xxxxxx example
|
||||||
aaa 7 x this
|
aaa 7 x this
|
||||||
|
Binary file not shown.
@ -1,947 +0,0 @@
|
|||||||
'\" t
|
|
||||||
.\" @(#)LIBNODE.3 1.0 99/10/12 SMA;
|
|
||||||
.TH LIBNODE 3 "10 Oct 1999"
|
|
||||||
.SH NOM
|
|
||||||
LIBNODE (librairie de structure de donnees a base de noeuds)
|
|
||||||
.SH SYNOPSIS
|
|
||||||
.LP
|
|
||||||
.B cc [flag ...] file ... -lver -ldl -lnode [library ...]
|
|
||||||
.LP
|
|
||||||
.B #include <node.h>
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_Library_Open ( int " Debug_Mode " );"
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_Library_Close ( void );"
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_Library_Stderr_Set ( FILE * " Out " );"
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_DataStruct_Open ( NDT_Root ** " Root ", NDT_DataStruct_Type " Type ", const char * " Allocator ", const char * " Desallocator ", void * " User " );"
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_DataStruct_Close ( NDT_Root * " Root " );"
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_DataStruct_Reorg ( NDT_Root * " Root " );"
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_DataStruct_Traverse ( NDT_Root * " Root ", NDT_Command, void * " Command ", void * " Data " );"
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_DataStruct_Convert ( NDT_Root * " Root ", ND_Conversion_Type " Target_Type " );"
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_DataStruct_Info_Print ( NDT_Root * " Root ", FILE * " Out " );"
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_DataStruct_Print ( NDT_Root * " Root ", FILE * " Out " );"
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_DataStruct_Check ( NDT_Root * " Root ", int * " Nb_Detected ", int * " Nb_Corrected " ,FILE * " Out " );"
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_DataStruct_Dump ( NDT_Root * " Root ", FILE * " Out " );"
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_Node_Root_Get ( NDT_Root ** " Root ", NDT_Node * " Node " );"
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_Node_First_Get ( NDT_Root * " Root ", NDT_Node ** " Node " );"
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_Node_Last_Get ( NDT_Root * " Root ", NDT_Node ** " Node " );"
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_Node_Next_Get ( NDT_Node * " Node ", NDT_Node ** " Next_Node " );"
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_Node_Previous_Get ( NDT_Node * " Node ", NDT_Node ** " Prev_Node " );"
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_Node_Add ( NDT_Root * " Root ", NDT_Node * " Node " );"
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_Node_Remove ( NDT_Node * " Node " );"
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_Node_Find ( NDT_Root * " Root ", NDT_Node ** " Node ",void * " Value " , void * " Data " );"
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_Value_Alloc ( NDT_Root * " Root ", void ** " Value ", ... );"
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_Value_Add ( NDT_Root * " Root ", void * " Value " );"
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_Value_Remove ( NDT_Root * " Root ", void * " Reference_Value " , void ** " Removed_Value " );"
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_Value_Free ( NDT_Root * " Root ", void * " Value " );"
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_Manager_Exec (const char * " Function_Name ", ...)"
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_Allocator_Exec (const char * " Function_Name ", void ** " Ptr ", size_t " Size ", void * " Data " );"
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_Desallocator_Exec (const char * " Function_Name ", void * " Ptr ", void * " Data " );"
|
|
||||||
.LP
|
|
||||||
.SH DESCRIPTION
|
|
||||||
.LP
|
|
||||||
La bibliotheque LIBNODE implemente deux types de structure de donnees a base de noeuds :
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
- liste chainee
|
|
||||||
.LP
|
|
||||||
- arbre binaire
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
Une structure de donnees est composee d'une racine ( voir le type
|
|
||||||
.B NDT_Root
|
|
||||||
) et de zero, un ou plusieurs noeuds (voir le type
|
|
||||||
.B NDT_Node
|
|
||||||
).
|
|
||||||
.LP
|
|
||||||
Fondamentalement, seul le chainage entre les noeuds distingue les differents types de structure implementes dans cette librairie.
|
|
||||||
.LP
|
|
||||||
La librairie LIBNODE implemente les fonctions minimales pour ce type de structure.
|
|
||||||
Elle pourra bien entendu etre enrichie suite aux remarques des utilisateurs.
|
|
||||||
.LP
|
|
||||||
.SH TYPES
|
|
||||||
.LP
|
|
||||||
La librairie LIBNODE definit les types suivants :
|
|
||||||
.LP
|
|
||||||
.BI NDT_Root
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
Designe le type d'une racine de structure de donnees
|
|
||||||
.LP
|
|
||||||
Il s'agit d'une structure qui contient toutes les informations statistiques de la structure de donnees sous-jacente :
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
- nombre de noeuds (
|
|
||||||
.B ND_Node_Number
|
|
||||||
)
|
|
||||||
.LP
|
|
||||||
- profondeur minimum (
|
|
||||||
.B Min_Depth
|
|
||||||
) (pour les arbres)
|
|
||||||
.LP
|
|
||||||
- profondeur maximum (
|
|
||||||
.B Max_Depth
|
|
||||||
) (pour les arbres)
|
|
||||||
.LP
|
|
||||||
- nombre de reequilibrages (
|
|
||||||
.B Nb_Equ
|
|
||||||
) (pour les arbres)
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
La structure racine pointe sur les noeuds de tete (
|
|
||||||
.B Head
|
|
||||||
) et de queue (
|
|
||||||
.B Queue
|
|
||||||
) de la structure de donnees.
|
|
||||||
Pour une liste chainee, le noeud de tete est le premier noeud de la liste et le noeud de queue est le dernier noeud de la liste.
|
|
||||||
Pour un arbre binaire, le noeud de tete et le noeud de queue correpondent tous deux au meme noeud racine de l'arbre.
|
|
||||||
.LP
|
|
||||||
La gestion des arbres binaires prend en compte un reequilibrage automatique.
|
|
||||||
La structure racine conserve pour cela la taille de la plus grande branche de l'arbre (
|
|
||||||
.B Max_Depth
|
|
||||||
) ainsi que celle de la plus courte (
|
|
||||||
.B Min_Depth
|
|
||||||
).
|
|
||||||
Pour un arbre auto-equilibre, le depassement d'un seuil (
|
|
||||||
.B Max_Dif
|
|
||||||
) provoque immediatement son reequilibrage.
|
|
||||||
.LP
|
|
||||||
La racine d'une structure reference enfin les fonctions suivantes par leur nom :
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
-
|
|
||||||
.B Manager
|
|
||||||
: fonction qui implemente les commandes specifiques a realiser sur les valeurs, notamment :
|
|
||||||
.RS 3
|
|
||||||
.LP
|
|
||||||
- la creation d'une valeur
|
|
||||||
.LP
|
|
||||||
- la suppression d'une valeur
|
|
||||||
.LP
|
|
||||||
- l'affichage d'une valeur
|
|
||||||
.LP
|
|
||||||
- la comparaison de deux valeurs
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
-
|
|
||||||
.B Allocator
|
|
||||||
: fonction qui realise l'allocation de memoire pour la structure
|
|
||||||
.LP
|
|
||||||
-
|
|
||||||
.B Desallocator
|
|
||||||
: fonction qui realise la desallocation de memoire pour la structure
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.I NB
|
|
||||||
: une racine contient un pointeur librement utilisable par l'utilisateur (
|
|
||||||
.B User
|
|
||||||
).
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.B NDT_DataStruct_Type
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
Ce type definit sur un entier long le type de chainage de la structure de donnees :
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
-
|
|
||||||
.B NDD_DS_LIST
|
|
||||||
: liste chainee
|
|
||||||
.LP
|
|
||||||
-
|
|
||||||
.B NDD_DS_TREE
|
|
||||||
: arbre binaire
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
et son mode de gestion :
|
|
||||||
.RS 3
|
|
||||||
.LP
|
|
||||||
-
|
|
||||||
.B NDD_MN_FIFO
|
|
||||||
(ou
|
|
||||||
.B NDD_MN_LILO
|
|
||||||
) : principe de la file d'attente (First In First Out)
|
|
||||||
.LP
|
|
||||||
-
|
|
||||||
.B NDD_MN_FILO
|
|
||||||
(ou
|
|
||||||
.B NDD_MN_LIFO
|
|
||||||
) : principe de la pile (First In Last Out)
|
|
||||||
.LP
|
|
||||||
-
|
|
||||||
.B NDD_MN_ORDERED
|
|
||||||
: ordonnancement des valeurs (liste triee).
|
|
||||||
Losque deux noeuds ont la meme valeur, ils seront ordonnes dans l'ordre chronologique d'insertion.
|
|
||||||
.LP
|
|
||||||
Toutefois, l'utilisateur pourra combiner par addition binaire les types
|
|
||||||
.B NDD_MN_ORDERED
|
|
||||||
et
|
|
||||||
.B NDD_MN_FILO
|
|
||||||
afin que deux noeuds de meme valeur soient ordonnes dans l'ordre inverse.
|
|
||||||
.LP
|
|
||||||
-
|
|
||||||
.B NDD_MN_AUTO_EQU
|
|
||||||
: auto-equilibre (arbre)
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
Les valeurs NDD_DS* et NDD_MN* peuvent etre utilisees de maniere combinee par addition binaire.
|
|
||||||
.LP
|
|
||||||
.I Exemple
|
|
||||||
:
|
|
||||||
.LP
|
|
||||||
Mon_Type =
|
|
||||||
.B NDD_DS_LIST
|
|
||||||
|
|
|
||||||
.B NDD_MN_ORDERED
|
|
||||||
;
|
|
||||||
.LP
|
|
||||||
Mon_Type =
|
|
||||||
.B NDD_DS_TREE
|
|
||||||
|
|
|
||||||
.B NDD_MN_AUTO_EQU
|
|
||||||
;
|
|
||||||
.LP
|
|
||||||
Des valeurs "masque" permettent de ne recuperer que l'une des deux parties du type :
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
-
|
|
||||||
.B NDD_DS_MSK
|
|
||||||
: masque sur le type de chainage
|
|
||||||
.LP
|
|
||||||
-
|
|
||||||
.B NDD_MN_MSK
|
|
||||||
: masque sur le mode de gestion
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.I Exemple
|
|
||||||
:
|
|
||||||
.LP
|
|
||||||
(Mon_Type &
|
|
||||||
.B NDD_DS_MSK
|
|
||||||
) renverra la valeur
|
|
||||||
.B NDD_DS_LIST
|
|
||||||
ou
|
|
||||||
.B NDD_DS_TREE
|
|
||||||
.
|
|
||||||
.LP
|
|
||||||
(Mon_Type &
|
|
||||||
.B NDD_MN_MSK
|
|
||||||
) renverra l'une des valeurs
|
|
||||||
.B NDD_MN_FILO
|
|
||||||
,
|
|
||||||
.B NDD_MN_FIFO
|
|
||||||
,
|
|
||||||
.B NDD_MN_ORDERED
|
|
||||||
ou
|
|
||||||
.B NDD_MN_AUTO_EQU
|
|
||||||
.
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.BI NDT_Node
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
Designe le type d'un noeud
|
|
||||||
.LP
|
|
||||||
Il s'agit d'une structure qui permet aux noeuds d'etre relies les uns aux autres :
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
- pointeur sur le noeud droite (
|
|
||||||
.B Right
|
|
||||||
)
|
|
||||||
.LP
|
|
||||||
- pointeur sur le noeud gauche (
|
|
||||||
.B Left
|
|
||||||
)
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
Pour une structure de type arbre, chaque noeud pointe aussi sur son noeud pere (
|
|
||||||
.B Parent
|
|
||||||
).
|
|
||||||
Chaque noeud possede enfin un pointeur sur sa structure racine (
|
|
||||||
.B Root
|
|
||||||
).
|
|
||||||
.LP
|
|
||||||
A chaque noeud sera associee une valeur dont l'utilisateur de la librairie devra lui meme definir le type.
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
.BI NDT_Value
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
Designe le type d'une valeur attachee a un noeud. Ce type sera surcharge par celui defini par l'utilisateur.
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.BI NDT_Manager
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
Designe le type d'une fonction manager.
|
|
||||||
.LP
|
|
||||||
Une fonction manager est attachee a la racine de la structure via son nom et permet d'executer des commandes (voir
|
|
||||||
.B NDT_Command
|
|
||||||
) specifiques sur la structure ou sur ses valeurs.
|
|
||||||
.LP
|
|
||||||
L'implementation des ces commandes est a definir par l'utilisateur lui-meme.
|
|
||||||
.LP
|
|
||||||
Le premier argument d'une fonction manager correspond toujours au type de la commande a executer.
|
|
||||||
.LP
|
|
||||||
Les autres arguments dependent bien evidemment de la commande a executer.
|
|
||||||
.LP
|
|
||||||
Une fonction manager doit etre executee via la fonction
|
|
||||||
.B NDT_Manager_Exec
|
|
||||||
(voir FONCTIONS).
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.BI NDT_Command
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
Designe le type d'une commande pouvant etre executee par le manager :
|
|
||||||
.RS 3
|
|
||||||
.LP
|
|
||||||
-
|
|
||||||
.B NDD_CMD_COMP_VALUE
|
|
||||||
: comparaison de valeurs
|
|
||||||
.LP
|
|
||||||
-
|
|
||||||
.B NDD_CMD_MAKE_VALUE
|
|
||||||
: creation de valeur
|
|
||||||
.LP
|
|
||||||
-
|
|
||||||
.B NDD_CMD_PRINT_VALUE
|
|
||||||
: affichage de valeur
|
|
||||||
.LP
|
|
||||||
-
|
|
||||||
.B NDD_CMD_DELETE_VALUE
|
|
||||||
: suppression de valeur
|
|
||||||
.LP
|
|
||||||
-
|
|
||||||
.B NDD_CMD_PRINT_INFO
|
|
||||||
: affichage des informations de la racine
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
.I NB
|
|
||||||
Toutes ces commandes ne doivent pas necessairement etre implementees par l'utilisateur. A priori, seule la commande permettant de detruire une valeur est obligatoire.
|
|
||||||
De nouvelles commandes pourront aussi etre definies par l'utilisateur, sous reserve qu'elles soient implementee par la fonction manager.
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
.BI NDT_Allocator
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
Designe le type d'une fonction d'allocation memoire.
|
|
||||||
.LP
|
|
||||||
Une fonction d'allocation est attachee a la racine de la structure par son nom et permet de d'allouer de la memoire pour le stockage de la structure (racine et noeuds).
|
|
||||||
.LP
|
|
||||||
Par defaut, une structure de donnees definira la fonction malloc() comme fonction d'allocation.
|
|
||||||
.LP
|
|
||||||
.I NB
|
|
||||||
: une fonction d'allocation devra etre executee via la fonction
|
|
||||||
.B NDT_Allocator_Exec
|
|
||||||
(voir FONCTIONS).
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.BI NDT_Desallocator
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
Designe le type d'une fonction de desallocation memoire.
|
|
||||||
.LP
|
|
||||||
Une fonction de desallocation est attachee a la racine de la structure par son nom et permet de liberer la memoire allouee pour le stockage de la structure.
|
|
||||||
.LP
|
|
||||||
Par defaut, une structure de donnees definira la fonction free() comme fonction de desallocation.
|
|
||||||
.LP
|
|
||||||
.I NB
|
|
||||||
: une fonction de desallocation devra etre executee via la fonction
|
|
||||||
.B NDT_Desallocator_Exec
|
|
||||||
(voir FONCTIONS).
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.SH FONCTIONS
|
|
||||||
.BI "ND_Library_Open ( int " Debug_Mode " )"
|
|
||||||
.RS 3
|
|
||||||
.LP
|
|
||||||
Cette fonction permet d'initialiser les eventuelles ressources de la librairie.
|
|
||||||
Elle doit etre systematiquement appelee au debut de chaque programme utilisant la librairie.
|
|
||||||
.LP
|
|
||||||
L'argument
|
|
||||||
.I Debug_Mode
|
|
||||||
(TRUE ou FALSE) permet d'utiliser la librairie en mode bavard ou non, ce qui sigifie que tous les messages d'erreur seront affiches par defaut sur la sortie standard.
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.BI "ND_Library_Close ( void )"
|
|
||||||
.RS 3
|
|
||||||
.LP
|
|
||||||
Cette fonction permet de fermer les eventuelles ressources de la librairie.
|
|
||||||
Elle doit etre systematiquement appelee a la fin de chaque programme utilisant la librairie.
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.BI "NDT_Status ND_Library_Stderr_Set ( FILE * " Out " );"
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
Cette fonction permet de definir
|
|
||||||
.I Out
|
|
||||||
comme la sortie standard des messages d'erreur de la librarie.
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_DataStruct_Open ( NDT_Root ** " Root ", NDT_DataStruct_Type " Type ", const char * " Allocator ", const char * " Desallocator ", void * " User " , int " Own_Value " );"
|
|
||||||
.RS 3
|
|
||||||
.LP
|
|
||||||
Cette fonction permet de creer une structure de donnees.
|
|
||||||
.LP
|
|
||||||
Elle doit recevoir les arguments suivants :
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
* (Out)
|
|
||||||
.I Root
|
|
||||||
: l'adresse du pointeur sur la racine de la nouvelle structure de donnees
|
|
||||||
.LP
|
|
||||||
* (In)
|
|
||||||
.I Type
|
|
||||||
: le type de la nouvelle structure de donnees
|
|
||||||
.LP
|
|
||||||
* (In)
|
|
||||||
.I Allocator
|
|
||||||
: le nom de la fonction d'allocation memoire (fonction de type
|
|
||||||
.B NDT_Allocator
|
|
||||||
) associee a la nouvelle structure de donnees.
|
|
||||||
Si cet argument est positionne a NULL, alors la fonction d'allocation locale malloc() sera utilisee par defaut.
|
|
||||||
.LP
|
|
||||||
* (In)
|
|
||||||
.I Desallocator
|
|
||||||
: le nom de la fonction de desallocation memoire (fonction de type
|
|
||||||
.B NDT_Desallocator
|
|
||||||
) associee a la nouvelle structure de donnees.
|
|
||||||
Si cet argument est positionne a NULL, alors la fonction de desallocation locale free() sera utilisee par defaut.
|
|
||||||
.LP
|
|
||||||
* (In)
|
|
||||||
.I User
|
|
||||||
: un pointeur de donnees qui sera systematiquement passe au manager pour l'allocation et la desallocation.
|
|
||||||
.LP
|
|
||||||
* (In)
|
|
||||||
.I Own_Value
|
|
||||||
: valeur TRUE ou FALSE indiquant si la structure est proprietaire de ses valeurs.
|
|
||||||
.LP
|
|
||||||
.I NB
|
|
||||||
: si une structure est proprietaire de ses valeurs, alors sa destruction provoque aussi la desallocation des valeurs rattachees a ses noeuds
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.RS -3
|
|
||||||
.BI "NDT_Status ND_DataStruct_Close ( NDT_Root * " Root " );"
|
|
||||||
.RS 3
|
|
||||||
.LP
|
|
||||||
Cette fonction permet de detruire une structure de donnees (desallocation des ressources).
|
|
||||||
.LP
|
|
||||||
L'argument
|
|
||||||
.I Root
|
|
||||||
est un pointeur sur la racine de la structure de donnees a detruire.
|
|
||||||
.LP
|
|
||||||
.I NB
|
|
||||||
: les valeurs de la structure seront desallouees en meme temps que leur noeud selon que la structure est proprietaire ou non de ses valeurs.
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.BI "NDT_Status ND_DataStruct_Reorg ( NDT_Root * " Root " );"
|
|
||||||
.RS 3
|
|
||||||
.LP
|
|
||||||
Cette fonction permet de reorganiser les donnees d'une structure (tri pour une liste, reequilibrage pour un arbre).
|
|
||||||
.LP
|
|
||||||
L'argument
|
|
||||||
.I Root
|
|
||||||
est un pointeur sur la racine de la structure de donnees a reorganiser.
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.BI "NDT_Status ND_DataStruct_Traverse ( NDT_Root * " Root ", NDT_Command, void * " Command ", void * " Data " );"
|
|
||||||
.RS 3
|
|
||||||
.LP
|
|
||||||
Cette fonction permet de parcourir tous les noeuds d'une structure de donnees avec execution d'une commande sur chacun d'eux.
|
|
||||||
.LP
|
|
||||||
Elle doit recevoir les arguments suivants :
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
* (In)
|
|
||||||
.I Root
|
|
||||||
: un pointeur sur la racine de la structure de donnees a parcourir.
|
|
||||||
.LP
|
|
||||||
* (In)
|
|
||||||
.I Command
|
|
||||||
: la commande a executer sur chaque noeud traverse
|
|
||||||
.LP
|
|
||||||
* (In)
|
|
||||||
.I Data
|
|
||||||
: un pointeur de donnees propre a la commande
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.BI "NDT_Status ND_DataStruct_Convert ( NDT_Root * " Root ", ND_Conversion_Type " Target_Type " );"
|
|
||||||
.RS 3
|
|
||||||
.LP
|
|
||||||
Cette fonction permet de convertir une structure de donnees d'un type en un autre.
|
|
||||||
.LP
|
|
||||||
Elle doit recevoir les arguments suivants :
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
* (In)
|
|
||||||
.I Root
|
|
||||||
: un pointeur sur la racine de la structure de donnees a convertir.
|
|
||||||
.LP
|
|
||||||
* (In)
|
|
||||||
.I Target_Type
|
|
||||||
: le type cible de la structure
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.RS -3
|
|
||||||
.BI "NDT_Status ND_DataStruct_Print ( NDT_Root * " Root ", FILE * " Out " );"
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
Cette fonction permet d'afficher toutes les valeurs des noeuds d'une structure de donnees.
|
|
||||||
.LP
|
|
||||||
Elle doit recevoir les arguments suivants :
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
* (In)
|
|
||||||
.I Root
|
|
||||||
: un pointeur sur la racine de la structure de donnees a afficher.
|
|
||||||
.LP
|
|
||||||
* (In)
|
|
||||||
.I Out
|
|
||||||
: un pointeur sur le flux de sortie
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.BI "NDT_Status ND_DataStruct_Info_Print ( NDT_Root * " Root ", FILE * " Out " );"
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
Cette fonction permet d'afficher des informations concernant une structure de donnees.
|
|
||||||
.LP
|
|
||||||
Elle doit recevoir les arguments suivants :
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
* (In)
|
|
||||||
.I Root
|
|
||||||
: un pointeur sur la racine de la structure de donnees
|
|
||||||
.LP
|
|
||||||
* (In)
|
|
||||||
.I Out
|
|
||||||
: un pointeur sur le flux de sortie
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.BI "NDT_Status ND_DataStruct_Check ( NDT_Root * " Root ", int * " Nb_Detected ", int * " Nb_Corrected " ,FILE * " Out " );"
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
Cette fonction permet de verifier et de corriger des incoherences contenues dans une structure de donnees.
|
|
||||||
Elle verifie notamment les liens entre les noeuds, supprime les noeuds sans valeur ou ceux dont les valeurs ne sont pas accessibles et met a jour les informations statistiques de la racine.
|
|
||||||
Un rapport de toutes les erreurs detectees ou corrigees est affiche.
|
|
||||||
.LP
|
|
||||||
Elle doit recevoir les arguments suivants :
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
* (In)
|
|
||||||
.I Root
|
|
||||||
: un pointeur sur la racine de la structure de donnees a verifier.
|
|
||||||
.LP
|
|
||||||
* (Out)
|
|
||||||
.I Nb_Detected
|
|
||||||
: un pointeur sur le nombre d'erreurs detectees
|
|
||||||
.LP
|
|
||||||
* (Out)
|
|
||||||
.I Nb_Corrected
|
|
||||||
: un pointeur sur le nombre d'erreurs corrigees
|
|
||||||
.LP
|
|
||||||
* (In)
|
|
||||||
.I Out
|
|
||||||
: un pointeur sur le flux de sortie du rapport
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.BI "NDT_Status ND_DataStruct_Dump ( NDT_Root * " Root ", FILE * " Out " );"
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
Cette fonction permet d'afficher toutes les informations de la structure (racine et contenu).
|
|
||||||
.LP
|
|
||||||
Elle doit recevoir les arguments suivants :
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
* (In)
|
|
||||||
.I Root
|
|
||||||
: un pointeur sur la racine de la structure de donnees a afficher.
|
|
||||||
.LP
|
|
||||||
* (In)
|
|
||||||
.I Out
|
|
||||||
: un pointeur sur le flux de sortie
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
.I NB
|
|
||||||
: cette fonction a ete implementee dans une optique de deboggage.
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.BI "NDT_Status ND_Node_Root_Get ( NDT_Root ** " Root ", NDT_Node * " Node " );"
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
Cette fonction permet de recuperer la racine d'une structure a partir d'un de ses noeuds.
|
|
||||||
.LP
|
|
||||||
Elle doit recevoir les arguments suivants :
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
* (Out)
|
|
||||||
.I Root
|
|
||||||
: l'adresse d'un pointeur sur la racine a recuperer
|
|
||||||
.LP
|
|
||||||
* (In)
|
|
||||||
.I Node
|
|
||||||
: un pointeur sur un noeud
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.BI "NDT_Status ND_Node_First_Get ( NDT_Root * " Root ", NDT_Node ** " Node " );"
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
Cette fonction permet de recuperer le premier noeud d'une structure.
|
|
||||||
.LP
|
|
||||||
Elle doit recevoir les arguments suivants :
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
* (In)
|
|
||||||
.I Root
|
|
||||||
: un pointeur sur la racine de la structure
|
|
||||||
.LP
|
|
||||||
* (Out)
|
|
||||||
.I Node
|
|
||||||
: l'adresse d'un pointeur sur le premier noeud a recuperer
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.BI "NDT_Status ND_Node_Last_Get ( NDT_Root * " Root ", NDT_Node ** " Node " );"
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
Cette fonction permet de recuperer le dernier noeud d'une structure.
|
|
||||||
.LP
|
|
||||||
Elle doit recevoir les arguments suivants :
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
* (In)
|
|
||||||
.I Root
|
|
||||||
: un pointeur sur la racine de la structure
|
|
||||||
.LP
|
|
||||||
* (Out)
|
|
||||||
.I Node
|
|
||||||
: un pointeur sur le dernier noeud a recuperer
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.BI "NDT_Status ND_Node_Next_Get ( NDT_Node * " Node ", NDT_Node ** " Next_Node " );"
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
Cette fonction permet de recuperer le noeud qui suit immediatement un noeud particulier.
|
|
||||||
.LP
|
|
||||||
Elle doit recevoir les arguments suivants :
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
* (In)
|
|
||||||
.I Node
|
|
||||||
: un pointeur sur le noeud de reference
|
|
||||||
.LP
|
|
||||||
* (Out)
|
|
||||||
.I Next_Node
|
|
||||||
: l'adresse d'un pointeur sur le noeud qui suit le noeud de reference
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.BI "NDT_Status ND_Node_Previous_Get ( NDT_Node * " Node ", NDT_Node ** " Prev_Node " );"
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
Cette fonction permet de recuperer le noeud qui precede immediatement un noeud particulier.
|
|
||||||
.LP
|
|
||||||
Elle doit recevoir les arguments suivants :
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
* (In)
|
|
||||||
.I Node
|
|
||||||
: un pointeur sur le noeud de reference
|
|
||||||
.LP
|
|
||||||
* (Out)
|
|
||||||
.I Prev_Node
|
|
||||||
: l'adresse d'un pointeur sur le noeud qui precede le noeud de reference
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.BI "NDT_Status ND_Node_Add ( NDT_Root * " Root ", NDT_Node * " Node " );"
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
Cette fonction permet d'ajouter un noeud a une structure.
|
|
||||||
.LP
|
|
||||||
Elle doit recevoir les arguments suivants :
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
* (In)
|
|
||||||
.I Root
|
|
||||||
: un pointeur sur la racine de la structure de donnees
|
|
||||||
.LP
|
|
||||||
* (In)
|
|
||||||
.I Node
|
|
||||||
: un pointeur sur le noeud a ajouter
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.BI "NDT_Status ND_Node_Remove ( NDT_Node * " Node " );"
|
|
||||||
.RS 3
|
|
||||||
.LP
|
|
||||||
Cette fonction permet de supprimer le noeud d'une structure de donnees.
|
|
||||||
.LP
|
|
||||||
L'argument
|
|
||||||
.I Node
|
|
||||||
est un pointeur sur le noeud a supprimer
|
|
||||||
.LP
|
|
||||||
.I NB
|
|
||||||
: le noeud supprime n'est pas detruit mais simplement detache de la structure
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.BI "NDT_Status ND_Node_Find ( NDT_Root * " Root ", NDT_Node ** " Node ", void * " Value " , void * " Data " );"
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
Cette fonction permet de rechercher dans une structure de donnees le premier noeud correspondant a une valeur.
|
|
||||||
.LP
|
|
||||||
Elle doit recevoir les arguments suivants :
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
* (In)
|
|
||||||
.I Root
|
|
||||||
: un pointeur sur la racine de la structure de donnees
|
|
||||||
.LP
|
|
||||||
* (Out)
|
|
||||||
.I Node
|
|
||||||
: l'adresse d'un pointeur sur le noeud resultat
|
|
||||||
.LP
|
|
||||||
* (In)
|
|
||||||
.I Value
|
|
||||||
: un pointeur sur la valeur a rechercher
|
|
||||||
.LP
|
|
||||||
* (In)
|
|
||||||
.I Data
|
|
||||||
: un pointeur de donnees qui sera passe a la fonction manager pour la recherche
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
.BI "NDT_Status ND_Value_Alloc ( NDT_Root * " Root ", void ** " Value ", ... );"
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
Cette fonction permet d'allouer une valeur pour une structure de donnees.
|
|
||||||
.LP
|
|
||||||
Elle doit recevoir les arguments suivants :
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
* (In)
|
|
||||||
.I Root
|
|
||||||
: un pointeur sur la racine de la structure de donnees
|
|
||||||
.LP
|
|
||||||
* (Out)
|
|
||||||
.I Value
|
|
||||||
: l'adresse d'un pointeur sur la valeur a allouer
|
|
||||||
.LP
|
|
||||||
* (In)
|
|
||||||
.I ...
|
|
||||||
: des arguments supplementaires pour l'allocation de la valeur
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.BI "NDT_Status ND_Value_Add ( NDT_Root * " Root ", void * " Value " );"
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
Cette fonction permet d'ajouter une valeur a une structure de donnees.
|
|
||||||
.LP
|
|
||||||
Elle doit recevoir les arguments suivants :
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
* (In)
|
|
||||||
.I Root
|
|
||||||
: un pointeur sur la racine de la structure de donnees
|
|
||||||
.LP
|
|
||||||
* (In)
|
|
||||||
.I Value
|
|
||||||
: un pointeur sur la valeur a ajouter
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.BI "NDT_Status ND_Value_Remove ( NDT_Root * " Root ", void * " Reference_Value " , void ** " Removed_Value " );"
|
|
||||||
.RS 3
|
|
||||||
.LP
|
|
||||||
Cette fonction permet de supprimer le premier noeud correspondant a une valeur.
|
|
||||||
.LP
|
|
||||||
Elle doit recevoir les arguments suivants :
|
|
||||||
.RS 3
|
|
||||||
.LP
|
|
||||||
* (In)
|
|
||||||
.I Root
|
|
||||||
: un pointeur sur la racine de la structure de donnees
|
|
||||||
.LP
|
|
||||||
* (In)
|
|
||||||
.I Reference_Value
|
|
||||||
: un pointeur sur la valeur de reference
|
|
||||||
.LP
|
|
||||||
* (Out)
|
|
||||||
.I Removed_Value
|
|
||||||
: l'adresse d'un pointeur sur la valeur du noeud supprime
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.I NB
|
|
||||||
: la suppression d'un noeud implique son retrait de la structure et sa desallocation.
|
|
||||||
.LP
|
|
||||||
Si la structure contient plusieurs fois la valeur, seul le premier noeud correspondant a cette valeur est detruit.
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.BI "NDT_Status ND_Value_Free ( NDT_Root * " Root ", void * " Value " );"
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
Cette fonction permet de desallouer une valeur faisant partie d'une structure de donnees.
|
|
||||||
.LP
|
|
||||||
Elle doit recevoir les arguments suivants :
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
* (In)
|
|
||||||
.I Root
|
|
||||||
: un pointeur sur la racine de la structure de donnees
|
|
||||||
.LP
|
|
||||||
* (In)
|
|
||||||
.I Value
|
|
||||||
: un pointeur sur la valeur a desallouer
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.BI "NDT_Status ND_Manager_Exec (const char * " Function_Name ", ...)"
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
Cette fonction permet d'executer une fonction manager a partir de son nom.
|
|
||||||
.LP
|
|
||||||
L'argument
|
|
||||||
.I Function_Name
|
|
||||||
est le nom de la fonction manager (fonction de type
|
|
||||||
.B NDT_Manager
|
|
||||||
), suivi de tous les arguments contextuels necessaires a son execution.
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.BI "NDT_Status ND_Allocator_Exec (const char * " Function_Name ", void ** " Ptr ", size_t " Size ", void * " Data " );"
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
Cette fonction permet d'executer une fonction d'allocation a partir de son nom.
|
|
||||||
.LP
|
|
||||||
Elle doit recevoir les arguments suivants :
|
|
||||||
.RS 3
|
|
||||||
.LP
|
|
||||||
* (In)
|
|
||||||
.I Function_Name
|
|
||||||
: le nom de la fonction d'allocation (fonction de type
|
|
||||||
.B NDT_Allocator
|
|
||||||
)
|
|
||||||
.LP
|
|
||||||
* (Out)
|
|
||||||
.I Ptr
|
|
||||||
: l'adresse d'un pointeur sur la zone a allouer
|
|
||||||
.LP
|
|
||||||
* (In)
|
|
||||||
.I Size
|
|
||||||
: la taille a allouer
|
|
||||||
.LP
|
|
||||||
* (In)
|
|
||||||
.I Data
|
|
||||||
: un pointeur de donneees utile a la fonction d'allocation
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.BI "NDT_Status ND_Desallocator_Exec (const char * " Function_Name ", void * " Ptr ", void * " Data " );"
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
Cette fonction permet d'executer une fonction de desallocation a partir de son nom.
|
|
||||||
.LP
|
|
||||||
Elle doit recevoir les arguments suivants :
|
|
||||||
.RS 3
|
|
||||||
.LP
|
|
||||||
* (In)
|
|
||||||
.I Function_Name
|
|
||||||
: le nom de la fonction de desallocation (fonction de type
|
|
||||||
.B NDT_Desallocator
|
|
||||||
)
|
|
||||||
.LP
|
|
||||||
* (In)
|
|
||||||
.I Ptr
|
|
||||||
: l'adresse de la zone memoire a desallouer
|
|
||||||
.LP
|
|
||||||
* (In)
|
|
||||||
.I Data
|
|
||||||
: un pointeur de donneees utile a la fonction de desallocation
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.SH CODES RETOUR
|
|
||||||
.LP
|
|
||||||
Toutes les fonctions constituant l'API de la librairie LIBND retournent un code de type
|
|
||||||
.B NDT_Status
|
|
||||||
:
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
-
|
|
||||||
.B NDS_OK
|
|
||||||
: la fonction s'est correctement executee et a produit un resultat
|
|
||||||
.LP
|
|
||||||
-
|
|
||||||
.B NDS_KO
|
|
||||||
: la fonction s'est correctement executee mais n'a pas produit de resultat
|
|
||||||
.LP
|
|
||||||
-
|
|
||||||
.B NDS_ERRAPI
|
|
||||||
: la fonction a ete appelee avec des arguments de valeur incorrecte
|
|
||||||
.LP
|
|
||||||
-
|
|
||||||
.B NDS_ERRMEM
|
|
||||||
: la fonction ne s'est pas correctement executee pour un probleme d'allocation memoire
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
La macro
|
|
||||||
.B ND_ERROR(rc)
|
|
||||||
permet de tester si un code retour correspond a une erreur.
|
|
||||||
.LP
|
|
||||||
En cas d'erreur, la variable ND_Error_Msg contient un message du type :
|
|
||||||
.LP
|
|
||||||
.RS 3
|
|
||||||
Error <Nom fonction> : <message d'erreur>
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
Lorsque le manager est appele avec la commande
|
|
||||||
.B NDD_CMD_COMP_VALUE
|
|
||||||
(comparaison de valeurs), l'une des trois valeurs suivantes est retournee :
|
|
||||||
.RS 3
|
|
||||||
.LP
|
|
||||||
-
|
|
||||||
.B NDS_EQUAL
|
|
||||||
.LP
|
|
||||||
-
|
|
||||||
.B NDS_LOWER
|
|
||||||
.LP
|
|
||||||
-
|
|
||||||
.B NDS_GREATER
|
|
||||||
.LP
|
|
||||||
.RS -3
|
|
||||||
.LP
|
|
||||||
.SH VOIR AUSSI
|
|
||||||
.B libdatastr
|
|
||||||
(3)
|
|
@ -1,10 +1,19 @@
|
|||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
/* $Workfile: node.h $ */
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
/* $Author: agibert $ */
|
||||||
|
/* $Date: 2008/11/12 02:25:23 $ */
|
||||||
|
/* $Revision: 1.1 $ */
|
||||||
|
/* $Label: $ */
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
/* $RCSfile: node.h,v $ */
|
/* %RCSfile: node.h,v % */
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
/* $Revision: 1.2 $ */
|
/* %Revision: 2.12 % */
|
||||||
/* $Name: $ */
|
/* %Name: libnode-2_1_0-1 % */
|
||||||
/* $Date: 2010/06/06 22:20:17 $ */
|
/* %Date: 2005/01/20 00:00:25 % */
|
||||||
/* $Author: agibert $ */
|
/* %Author: agibert % */
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
@ -151,349 +160,6 @@ typedef int NDT_Index_Type;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Manager Template */
|
|
||||||
|
|
||||||
// NDT_Status ND_Example_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node *Node_Ptr, NDT_Command Command, va_list *Args_Ptr)
|
|
||||||
// {
|
|
||||||
// NDT_Command_Name Command_Name;
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// switch( Command)
|
|
||||||
// {
|
|
||||||
// case NDD_CMD_MANAGER_VERSION:
|
|
||||||
// {
|
|
||||||
// ND_VA_ARG_GET( Version_Name_Ptr, *Args_Ptr, NDT_Version_Name *);
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// Command_Name = "NDD_CMD_MANAGER_VERSION";
|
|
||||||
//
|
|
||||||
// *Version_Name_Ptr = "$Revision: 1.2 $ $Name: $ $Date: 2010/06/06 22:20:17 $ $Author: agibert $";
|
|
||||||
//
|
|
||||||
// return( NDS_OK);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// case NDD_CMD_INDEX_GET:
|
|
||||||
// {
|
|
||||||
// /*
|
|
||||||
// ND_VA_ARG_GET( Reply_Index_Id_Ptr, *Args_Ptr, NDT_Index_Id *);
|
|
||||||
// ND_VA_ARG_GET( Reply_Command_Ptr, *Args_Ptr, NDT_Command *);
|
|
||||||
// ND_VA_ARG_GET( Cmd, *Args_Ptr, NDT_Command);
|
|
||||||
// ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *);
|
|
||||||
// */
|
|
||||||
// ND_VA_ARG_GET( Reply_Index_Id_Ptr, *Args_Ptr, NDT_Index_Id *);
|
|
||||||
// ND_VA_ARG_GET( Reply_Command_Ptr, *Args_Ptr, NDT_Command *);
|
|
||||||
// ND_VA_ARG_GET( Cmd, *Args_Ptr, NDT_Command);
|
|
||||||
// ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *);
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// Command_Name = "NDD_CMD_INDEX_GET";
|
|
||||||
//
|
|
||||||
// switch(Cmd)
|
|
||||||
// {
|
|
||||||
// /*
|
|
||||||
// case NDT_CMD_SOME_USER_CMD:
|
|
||||||
// {
|
|
||||||
// *Reply_Index_Id_Ptr = 0;
|
|
||||||
// *Reply_Command_Ptr = NDD_CMD_SOME_OTHER_CMD;
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// ...
|
|
||||||
// */
|
|
||||||
//
|
|
||||||
// default:
|
|
||||||
// {
|
|
||||||
// *Reply_Index_Id_Ptr = Index_Id;
|
|
||||||
// *Reply_Command_Ptr = Cmd;
|
|
||||||
// break;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// return( NDS_OK);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// case NDD_CMD_VALUE_ALLOC:
|
|
||||||
// {
|
|
||||||
// /*
|
|
||||||
// ND_VA_ARG_GET( Value_Ptr_Ptr, *Args_Ptr, void **);
|
|
||||||
//
|
|
||||||
// ND_VA_LIST_OPEN( user_args, *Args_Ptr);
|
|
||||||
//
|
|
||||||
// ND_VA_ARG_GET( user_data, user_args, user_type);
|
|
||||||
// ND_VA_ARG_GET( ..., user_args, ...);
|
|
||||||
//
|
|
||||||
// ND_VA_LIST_CLOSE( user_args);
|
|
||||||
// */
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// Command_Name = "NDD_CMD_VALUE_ALLOC";
|
|
||||||
//
|
|
||||||
// /*
|
|
||||||
// if( ( *Value_Ptr_Ptr = (void *)malloc( sizeof(void))) == NULL)
|
|
||||||
// {
|
|
||||||
// return(NDS_ERRMEM);
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// ...
|
|
||||||
//
|
|
||||||
// return( NDS_OK);
|
|
||||||
// }
|
|
||||||
// */
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// case NDD_CMD_VALUE_FREE:
|
|
||||||
// {
|
|
||||||
// /*
|
|
||||||
// ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *);
|
|
||||||
//
|
|
||||||
// ND_VA_LIST_OPEN( user_args, *Args_Ptr);
|
|
||||||
//
|
|
||||||
// ND_VA_ARG_GET( user_data, user_args, user_type);
|
|
||||||
// ND_VA_ARG_GET( ..., user_args, ...);
|
|
||||||
//
|
|
||||||
// ND_VA_LIST_CLOSE( user_args);
|
|
||||||
// */
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// Command_Name = "NDD_CMD_VALUE_FREE";
|
|
||||||
//
|
|
||||||
// /*
|
|
||||||
// free( Value_Ptr);
|
|
||||||
//
|
|
||||||
// return( NDS_OK);
|
|
||||||
// */
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// case NDD_CMD_VALUE_COMP:
|
|
||||||
// {
|
|
||||||
// /*
|
|
||||||
// ND_VA_ARG_GET( Value1_Ptr, *Args_Ptr, void *);
|
|
||||||
// ND_VA_ARG_GET( Value2_Ptr, *Args_Ptr, void *);
|
|
||||||
//
|
|
||||||
// ND_VA_LIST_OPEN( user_args, *Args_Ptr);
|
|
||||||
//
|
|
||||||
// ND_VA_ARG_GET( user_data, user_args, user_type);
|
|
||||||
// ND_VA_ARG_GET( ..., user_args, ...);
|
|
||||||
//
|
|
||||||
// ND_VA_LIST_CLOSE( user_args);
|
|
||||||
// */
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// Command_Name = "NDD_CMD_VALUE_COMP";
|
|
||||||
//
|
|
||||||
// switch( Index_Id)
|
|
||||||
// {
|
|
||||||
// case 0:
|
|
||||||
// {
|
|
||||||
// int rc;
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// rc = strcmp( Value1_Ptr->..., Value2_Ptr->...);
|
|
||||||
//
|
|
||||||
// if( rc < 0)
|
|
||||||
// {
|
|
||||||
// return(NDS_LOWER);
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// if( rc > 0)
|
|
||||||
// {
|
|
||||||
// return(NDS_GREATER);
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// return(NDS_EQUAL);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// case 1:
|
|
||||||
// {
|
|
||||||
// int val1 = atoi(Value1_Ptr->...);
|
|
||||||
// int val2 = atoi(Value2_Ptr->...);
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// if( val1 < val2)
|
|
||||||
// {
|
|
||||||
// return(NDS_LOWER);
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// if( val1 > val2)
|
|
||||||
// {
|
|
||||||
// return(NDS_GREATER);
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// return(NDS_EQUAL);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// case 2:
|
|
||||||
// {
|
|
||||||
// ...
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// default:
|
|
||||||
// {
|
|
||||||
// printf( "Unknown COMP idx (%d) !\n", Index_Id);
|
|
||||||
// return( NDS_KO);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// return( NDS_OK);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// case NDD_CMD_VALUE_ADD:
|
|
||||||
// {
|
|
||||||
// /*
|
|
||||||
// ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *);
|
|
||||||
//
|
|
||||||
// ND_VA_LIST_OPEN( user_args, *Args_Ptr);
|
|
||||||
//
|
|
||||||
// ND_VA_ARG_GET( user_data, user_args, user_type);
|
|
||||||
// ND_VA_ARG_GET( ..., user_args, ...);
|
|
||||||
//
|
|
||||||
// ND_VA_LIST_CLOSE( user_args);
|
|
||||||
// */
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// Command_Name = "NDD_CMD_VALUE_ADD";
|
|
||||||
//
|
|
||||||
// /*
|
|
||||||
// return( NDS_OK);
|
|
||||||
// */
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// case NDD_CMD_VALUE_REMOVE:
|
|
||||||
// {
|
|
||||||
// /*
|
|
||||||
// ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *);
|
|
||||||
//
|
|
||||||
// ND_VA_LIST_OPEN( user_args, *Args_Ptr);
|
|
||||||
//
|
|
||||||
// ND_VA_ARG_GET( user_data, user_args, user_type);
|
|
||||||
// ND_VA_ARG_GET( ..., user_args, ...);
|
|
||||||
//
|
|
||||||
// ND_VA_LIST_CLOSE( user_args);
|
|
||||||
// */
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// Command_Name = "NDD_CMD_VALUE_REMOVE";
|
|
||||||
// /*
|
|
||||||
// return( NDS_OK);
|
|
||||||
// */
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// case NDD_CMD_VALUE_PRINT:
|
|
||||||
// {
|
|
||||||
// /*
|
|
||||||
// ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *);
|
|
||||||
//
|
|
||||||
// ND_VA_LIST_OPEN( lib_args, *Args_Ptr);
|
|
||||||
//
|
|
||||||
// ND_VA_ARG_GET( Out, lib_args, FILE *);
|
|
||||||
// ND_VA_ARG_GET( Recursive_Mode, lib_args, NDT_Recursive_Mode);
|
|
||||||
// ND_VA_ARG_GET( Recursive_Depth, lib_args, NDT_Recursive_Depth);
|
|
||||||
// ND_VA_ARG_GET( Recursive_Offset, lib_args, NDT_Recursive_Offset);
|
|
||||||
//
|
|
||||||
// ND_VA_LIST_OPEN( user_args, lib_args);
|
|
||||||
//
|
|
||||||
// ND_VA_ARG_GET( user_data, user_args, user_type);
|
|
||||||
// ND_VA_ARG_GET( ..., user_args, ...);
|
|
||||||
//
|
|
||||||
// ND_VA_LIST_CLOSE( user_args);
|
|
||||||
// ND_VA_LIST_CLOSE( lib_args);
|
|
||||||
//
|
|
||||||
// void *Value_Ptr = Node_Ptr->Value;
|
|
||||||
// */
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// Command_Name = "NDD_CMD_VALUE_PRINT";
|
|
||||||
//
|
|
||||||
// /*
|
|
||||||
// fprintf( Out, "...\n", Value_Ptr->..., ...);
|
|
||||||
//
|
|
||||||
// return( NDS_OK);
|
|
||||||
// */
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// case NDD_CMD_INFO_PRINT:
|
|
||||||
// {
|
|
||||||
// /*
|
|
||||||
// ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *);
|
|
||||||
//
|
|
||||||
// ND_VA_LIST_OPEN( lib_args, *Args_Ptr);
|
|
||||||
//
|
|
||||||
// ND_VA_ARG_GET( Out, lib_args, FILE *);
|
|
||||||
// ND_VA_ARG_GET( Recursive_Mode, lib_args, NDT_Recursive_Mode);
|
|
||||||
// ND_VA_ARG_GET( Recursive_Depth, lib_args, NDT_Recursive_Depth);
|
|
||||||
// ND_VA_ARG_GET( Recursive_Offset, lib_args, NDT_Recursive_Offset);
|
|
||||||
//
|
|
||||||
// ND_VA_LIST_OPEN( user_args, lib_args);
|
|
||||||
//
|
|
||||||
// ND_VA_ARG_GET( user_data, user_args, user_type);
|
|
||||||
// ND_VA_ARG_GET( ..., user_args, ...);
|
|
||||||
//
|
|
||||||
// ND_VA_LIST_CLOSE( user_args);
|
|
||||||
// ND_VA_LIST_CLOSE( lib_args);
|
|
||||||
// */
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// Command_Name = "NDD_CMD_INFO_PRINT";
|
|
||||||
//
|
|
||||||
// /*
|
|
||||||
// return( NDS_OK);
|
|
||||||
// */
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// case NDD_CMD_USER_TRAVERSE:
|
|
||||||
// {
|
|
||||||
// /*
|
|
||||||
// ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *);
|
|
||||||
//
|
|
||||||
// ND_VA_LIST_OPEN( user_args, *Args_Ptr);
|
|
||||||
//
|
|
||||||
// ND_VA_ARG_GET( user_data, user_args, user_type);
|
|
||||||
// ND_VA_ARG_GET( ..., user_args, ...);
|
|
||||||
//
|
|
||||||
// ND_VA_LIST_CLOSE( user_args);
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// void *Value_Ptr = Node_Ptr->Value;
|
|
||||||
// */
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// Command_Name = "NDD_CMD_USER_TRAVERSE";
|
|
||||||
//
|
|
||||||
// /*
|
|
||||||
// return( NDS_OK);
|
|
||||||
// */
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// default:
|
|
||||||
// {
|
|
||||||
// printf( "ND_Default_Manager() called with an undefined command %d\n", Command);
|
|
||||||
// return(NDS_ERRAPI);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// printf( "ND_Default_Manager() called with command %d (%s)\n", Command, Command_Name);
|
|
||||||
// return(NDS_OK);
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Var Args Manager Macros */
|
|
||||||
|
|
||||||
#define ND_VA_LIST_OPEN( VA_List_Target, VA_List_Source) va_list VA_List_Target; va_copy( VA_List_Target, *va_arg( VA_List_Source, va_list *))
|
|
||||||
#define ND_VA_LIST_CLOSE( VA_List) va_end( VA_List)
|
|
||||||
#define ND_VA_ARG_GET( Arg, VA_List, Type) Type Arg = va_arg( VA_List, Type)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Commandes du manager */
|
/* Commandes du manager */
|
||||||
|
|
||||||
typedef int NDT_Command;
|
typedef int NDT_Command;
|
||||||
@ -559,7 +225,7 @@ struct NDT_Node;
|
|||||||
|
|
||||||
typedef char *NDT_Manager_Name;
|
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 */
|
/* Pointeur de fonction sur l'allocateur */
|
||||||
@ -896,8 +562,8 @@ NDD_DLL_API NDT_Status ND_DataStruct_Convert_C( NDT_Root *, NDT_Index_Type *)
|
|||||||
/* (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 */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
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, ...);
|
||||||
NDD_DLL_API NDT_Status ND_DataStruct_Traverse_C( NDT_Root *, NDT_Command, ...);
|
NDD_DLL_API NDT_Status ND_DataStruct_Traverse_C( NDT_Root *, NDT_Command, ...);
|
||||||
|
|
||||||
@ -943,7 +609,7 @@ NDD_DLL_API NDT_Status ND_DataStruct_Value_Remove_C( NDT_Root *, void *);
|
|||||||
/* (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 */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
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, ...);
|
||||||
|
|
||||||
@ -958,8 +624,8 @@ NDD_DLL_API NDT_Status ND_DataStruct_Value_Print_C( FILE *, NDT_Root *, NDT_
|
|||||||
/* (I) Data : pointeur de données */
|
/* (I) Data : pointeur de données */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
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);
|
||||||
NDD_DLL_API NDT_Status ND_DataStruct_Value_Find_VC( void **, NDT_Root *, void *, va_list *);
|
NDD_DLL_API NDT_Status ND_DataStruct_Value_Find_VC( void **, NDT_Root *, void *, va_list);
|
||||||
NDD_DLL_API NDT_Status ND_DataStruct_Value_Find_I( void **, NDT_Root *, void *, ...);
|
NDD_DLL_API NDT_Status ND_DataStruct_Value_Find_I( void **, NDT_Root *, void *, ...);
|
||||||
NDD_DLL_API NDT_Status ND_DataStruct_Value_Find_C( void **, NDT_Root *, void *, ...);
|
NDD_DLL_API NDT_Status ND_DataStruct_Value_Find_C( void **, NDT_Root *, void *, ...);
|
||||||
|
|
||||||
@ -1046,8 +712,8 @@ NDD_DLL_API NDT_Status ND_Index_Reorg_C( NDT_Root *, NDT_Index_Id);
|
|||||||
/* (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 */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
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, ...);
|
||||||
NDD_DLL_API NDT_Status ND_Index_Traverse_C( NDT_Root *, NDT_Index_Id, NDT_Command, ...);
|
NDD_DLL_API NDT_Status ND_Index_Traverse_C( NDT_Root *, NDT_Index_Id, NDT_Command, ...);
|
||||||
|
|
||||||
@ -1095,7 +761,7 @@ NDD_DLL_API NDT_Status ND_Index_Value_Remove_C( NDT_Root *, NDT_Index_Id, void
|
|||||||
/* (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 */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
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, ...);
|
||||||
|
|
||||||
@ -1174,8 +840,8 @@ NDD_DLL_API NDT_Status ND_Index_Node_Previous_Get_C( NDT_Node **, NDT_Node *)
|
|||||||
/* (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 */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
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 *, ...);
|
||||||
NDD_DLL_API NDT_Status ND_Index_Node_Find_C( NDT_Node **, NDT_Root *, NDT_Index_Id, void *, ...);
|
NDD_DLL_API NDT_Status ND_Index_Node_Find_C( NDT_Node **, NDT_Root *, NDT_Index_Id, void *, ...);
|
||||||
|
|
||||||
@ -1220,8 +886,8 @@ NDD_DLL_API NDT_Status ND_Value_Free_C( NDT_Root *, void *);
|
|||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* (I) Function : nom de la fonction manager à exécuter */
|
/* (I) Function : nom de la fonction manager à exécuter */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
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, ...);
|
||||||
NDD_DLL_API NDT_Status ND_Manager_Exec_C( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, ...);
|
NDD_DLL_API NDT_Status ND_Manager_Exec_C( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, ...);
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,10 +1,19 @@
|
|||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
/* $Workfile: libnode.h $ */
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
/* $Author: agibert $ */
|
||||||
|
/* $Date: 2008/11/12 02:25:23 $ */
|
||||||
|
/* $Revision: 1.1 $ */
|
||||||
|
/* $Label: $ */
|
||||||
|
/*----------------------------------------------------------------------------*/
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
/* $RCSfile: libnode.h,v $ */
|
/* %RCSfile: libnode.h,v % */
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
/* $Revision: 1.2 $ */
|
/* %Revision: 2.9 % */
|
||||||
/* $Name: $ */
|
/* %Name: libnode-2_1_0-1 % */
|
||||||
/* $Date: 2010/06/06 22:20:17 $ */
|
/* %Date: 2005/01/19 23:59:42 % */
|
||||||
/* $Author: agibert $ */
|
/* %Author: agibert % */
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
@ -127,14 +136,14 @@ NDT_Base NDG_Base =
|
|||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* (I) va_list Arguments : Liste d'arguments contextuels */
|
/* (I) va_list Arguments : Liste d'arguments contextuels */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
NDT_Status ND_Default_Manager( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list *);
|
NDT_Status ND_Default_Manager( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list);
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* OpenStruct Manager */
|
/* OpenStruct Manager */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* (I) va_list Arguments : Liste d'arguments contextuels */
|
/* (I) va_list Arguments : Liste d'arguments contextuels */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
NDT_Status ND_OpenStruct_Manager( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list *);
|
NDT_Status ND_OpenStruct_Manager( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list);
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Redéfinition de la fonction malloc() avec retour de type NDT_Status */
|
/* Redéfinition de la fonction malloc() avec retour de type NDT_Status */
|
||||||
@ -233,12 +242,12 @@ NDT_Status ND_List_Make( NDT_Root *, NDT_Index_Id);
|
|||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Recherche une valeur dans une liste et retourne le noeud correspondant */
|
/* Recherche une valeur dans une liste et retourne le noeud correspondant */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
NDT_Node *ND_List_Node_Find( NDT_Root *, NDT_Index_Id, void *, va_list *);
|
NDT_Node *ND_List_Node_Find( NDT_Root *, NDT_Index_Id, void *, va_list);
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* 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 */
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
NDT_Node *ND_Tree_Node_Find( NDT_Root *, NDT_Index_Id, void *, va_list *);
|
NDT_Node *ND_Tree_Node_Find( NDT_Root *, NDT_Index_Id, void *, va_list);
|
||||||
|
|
||||||
/*------------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------------*/
|
||||||
/* Conversion d'une structure en arbre binaire */
|
/* Conversion d'une structure en arbre binaire */
|
||||||
@ -328,7 +337,7 @@ NDT_Node *ND_Tree_Node_First_Recursive_Get( NDT_Node *);
|
|||||||
|
|
||||||
NDT_Node *ND_Tree_Node_Last_Recursive_Get( NDT_Node *);
|
NDT_Node *ND_Tree_Node_Last_Recursive_Get( NDT_Node *);
|
||||||
|
|
||||||
NDT_Node *ND_Tree_Node_Recursive_Find( NDT_Node *, void *, va_list *);
|
NDT_Node *ND_Tree_Node_Recursive_Find( NDT_Node *, void *, va_list);
|
||||||
|
|
||||||
NDT_Node *ND_Tree_Parent_Next_Recursive_Get( NDT_Node *);
|
NDT_Node *ND_Tree_Parent_Next_Recursive_Get( NDT_Node *);
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
/* $RCSfile: ndbench.c,v $ */
|
/* %RCSfile: ndbench.c,v % */
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
/* $Revision: 1.2 $ */
|
/* %Revision: 2.9 % */
|
||||||
/* $Name: $ */
|
/* %Name: libnode-2_1_0-1 % */
|
||||||
/* $Date: 2010/06/06 22:20:17 $ */
|
/* %Date: 2005/01/20 00:07:27 % */
|
||||||
/* $Author: agibert $ */
|
/* %Author: agibert % */
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
@ -59,7 +59,7 @@
|
|||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#ifdef _LIBVER_SUPPORT
|
#ifdef _LIBVER_SUPPORT
|
||||||
VER_INFO_EXPORT( ndbench, "$Revision: 1.2 $", "$Name: $", __FILE__, "$Author: agibert $");
|
VER_INFO_EXPORT( ndbench, "%Revision: 2.9 %", "%Name: libnode-2_1_0-1 %", __FILE__, "%Author: agibert %");
|
||||||
# define USAGE "Usage : %s [ --help | --version [-v] | --batch_run <batch_file_name>]\n"
|
# define USAGE "Usage : %s [ --help | --version [-v] | --batch_run <batch_file_name>]\n"
|
||||||
#else
|
#else
|
||||||
# define USAGE "Usage : %s [ --help | --batch_run <batch_file_name>]\n"
|
# define USAGE "Usage : %s [ --help | --batch_run <batch_file_name>]\n"
|
||||||
@ -200,7 +200,7 @@ NDT_Index_Type idx_type_balanced_tree = NDD_INDEX_STATUS_OPENED | NDD_INDEX_TYP
|
|||||||
/* Prototype */
|
/* Prototype */
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
NDT_Status Module_Manager( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list *);
|
NDT_Status Module_Manager( NDT_Root *, NDT_Index_Id, NDT_Node *, NDT_Command, va_list);
|
||||||
|
|
||||||
void Menu_Print( FILE *, NDT_Root *);
|
void Menu_Print( FILE *, NDT_Root *);
|
||||||
void Command_Get( int *, char **, char **, FILE *, FILE *, short);
|
void Command_Get( int *, char **, char **, FILE *, FILE *, short);
|
||||||
@ -258,7 +258,7 @@ Command Command_Tab[] =
|
|||||||
/* */
|
/* */
|
||||||
/*---------------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
NDT_Status Module_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node *Node_Ptr, NDT_Command Command, va_list *Args_Ptr)
|
NDT_Status Module_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Node *Node_Ptr, NDT_Command Command, va_list Args)
|
||||||
{
|
{
|
||||||
NDT_Command_Name Command_Name;
|
NDT_Command_Name Command_Name;
|
||||||
|
|
||||||
@ -267,12 +267,11 @@ NDT_Status Module_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Nod
|
|||||||
{
|
{
|
||||||
case NDD_CMD_MANAGER_VERSION:
|
case NDD_CMD_MANAGER_VERSION:
|
||||||
{
|
{
|
||||||
ND_VA_ARG_GET( Version_Name_Ptr, *Args_Ptr, NDT_Version_Name *);
|
NDT_Version_Name *Version_Name_Ptr = (NDT_Version_Name *)va_arg( Args, NDT_Version_Name *);
|
||||||
|
|
||||||
|
|
||||||
Command_Name = "NDD_CMD_MANAGER_VERSION";
|
Command_Name = "NDD_CMD_MANAGER_VERSION";
|
||||||
|
|
||||||
*Version_Name_Ptr = "$Revision: 1.2 $ $Name: $ $Date: 2010/06/06 22:20:17 $ $Author: agibert $";
|
*Version_Name_Ptr = "%Revision: 2.9 % %Name: libnode-2_1_0-1 % %Date: 2005/01/20 00:07:27 % %Author: agibert %";
|
||||||
|
|
||||||
return( NDS_OK);
|
return( NDS_OK);
|
||||||
}
|
}
|
||||||
@ -280,15 +279,15 @@ NDT_Status Module_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Nod
|
|||||||
case NDD_CMD_INDEX_GET:
|
case NDD_CMD_INDEX_GET:
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
ND_VA_ARG_GET( Reply_Index_Id_Ptr, *Args_Ptr, NDT_Index_Id *);
|
NDT_Index_Id *Reply_Index_Id_Ptr = (NDT_Index_Id *)va_arg( Args, NDT_Index_Id *);
|
||||||
ND_VA_ARG_GET( Reply_Command_Ptr, *Args_Ptr, NDT_Command *);
|
NDT_Command *Reply_Command_Ptr = (NDT_Command *)va_arg( Args, NDT_Command *);
|
||||||
ND_VA_ARG_GET( Cmd, *Args_Ptr, NDT_Command);
|
NDT_Command Cmd = (NDT_Command)va_arg( Args, NDT_Command);
|
||||||
ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *);
|
void *Value_ptr = (void *)va_arg( Args, void *);
|
||||||
*/
|
*/
|
||||||
ND_VA_ARG_GET( Reply_Index_Id_Ptr, *Args_Ptr, NDT_Index_Id *);
|
NDT_Index_Id *Reply_Index_Id_Ptr = (NDT_Index_Id *)va_arg( Args, NDT_Index_Id *);
|
||||||
ND_VA_ARG_GET( Reply_Command_Ptr, *Args_Ptr, NDT_Command *);
|
NDT_Command *Reply_Command_Ptr = (NDT_Command *)va_arg( Args, NDT_Command *);
|
||||||
ND_VA_ARG_GET( Cmd, *Args_Ptr, NDT_Command);
|
NDT_Command Cmd = (NDT_Command)va_arg( Args, NDT_Command);
|
||||||
ND_VA_ARG_GET( Module_Ptr_Ptr, *Args_Ptr, T_Module **);
|
T_Module **Module_Ptr_Ptr = (T_Module **)va_arg( Args, T_Module **);
|
||||||
|
|
||||||
|
|
||||||
Command_Name = "NDD_CMD_INDEX_GET";
|
Command_Name = "NDD_CMD_INDEX_GET";
|
||||||
@ -319,23 +318,15 @@ NDT_Status Module_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Nod
|
|||||||
case NDD_CMD_VALUE_ALLOC:
|
case NDD_CMD_VALUE_ALLOC:
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
ND_VA_ARG_GET( Value_Ptr_Ptr, *Args_Ptr, void **);
|
void **Value_Ptr_Ptr = (void **)va_arg( Args, void **);
|
||||||
|
va_list user_args = (va_list)va_arg( Args, va_list);
|
||||||
ND_VA_LIST_OPEN( user_args, *Args_Ptr);
|
user_type user_data = (user_type)va_arg( user_args, user_type);
|
||||||
|
... = (...)va_arg( user_args, ...);
|
||||||
ND_VA_ARG_GET( user_data, user_args, user_type);
|
|
||||||
ND_VA_ARG_GET( ..., user_args, ...);
|
|
||||||
|
|
||||||
ND_VA_LIST_CLOSE( user_args);
|
|
||||||
*/
|
*/
|
||||||
ND_VA_ARG_GET( Module_Ptr_Ptr, *Args_Ptr, T_Module **);
|
T_Module **Module_Ptr_Ptr = (T_Module **)va_arg( Args, T_Module **);
|
||||||
|
va_list user_args = (va_list)va_arg( Args, va_list);
|
||||||
ND_VA_LIST_OPEN( user_args, *Args_Ptr);
|
char *Nom = (char *)va_arg( user_args, char *);
|
||||||
|
int Id = (int)va_arg( user_args, int);
|
||||||
ND_VA_ARG_GET( Nom, user_args, char *);
|
|
||||||
ND_VA_ARG_GET( Id, user_args, int);
|
|
||||||
|
|
||||||
ND_VA_LIST_CLOSE( user_args);
|
|
||||||
|
|
||||||
|
|
||||||
Command_Name = "NDD_CMD_VALUE_ALLOC";
|
Command_Name = "NDD_CMD_VALUE_ALLOC";
|
||||||
@ -357,16 +348,12 @@ NDT_Status Module_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Nod
|
|||||||
case NDD_CMD_VALUE_FREE:
|
case NDD_CMD_VALUE_FREE:
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *);
|
void *Value_Ptr = (void *)va_arg( Args, void *);
|
||||||
|
va_list user_args = (va_list)va_arg( Args, va_list);
|
||||||
ND_VA_LIST_OPEN( user_args, *Args_Ptr);
|
user_type user_data = (user_type)va_arg( user_args, user_type);
|
||||||
|
... = (...)va_arg( user_args, ...);
|
||||||
ND_VA_ARG_GET( user_data, user_args, user_type);
|
|
||||||
ND_VA_ARG_GET( ..., user_args, ...);
|
|
||||||
|
|
||||||
ND_VA_LIST_CLOSE( user_args);
|
|
||||||
*/
|
*/
|
||||||
ND_VA_ARG_GET( Module_Ptr, *Args_Ptr, T_Module *);
|
T_Module *Module_Ptr = (T_Module *)va_arg( Args, T_Module *);
|
||||||
|
|
||||||
|
|
||||||
Command_Name = "NDD_CMD_VALUE_FREE";
|
Command_Name = "NDD_CMD_VALUE_FREE";
|
||||||
@ -381,18 +368,14 @@ NDT_Status Module_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Nod
|
|||||||
case NDD_CMD_VALUE_COMP:
|
case NDD_CMD_VALUE_COMP:
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
ND_VA_ARG_GET( Value1_Ptr, *Args_Ptr, void *);
|
void *Value1_Ptr = (void *)va_arg( Args, void *);
|
||||||
ND_VA_ARG_GET( Value2_Ptr, *Args_Ptr, void *);
|
void *Value2_Ptr = (void *)va_arg( Args, void *);
|
||||||
|
va_list user_args = (va_list)va_arg( Args, va_list);
|
||||||
ND_VA_LIST_OPEN( user_args, *Args_Ptr);
|
user_type user_data = (user_type)va_arg( user_args, user_type);
|
||||||
|
... = (...)va_arg( user_args, ...);
|
||||||
ND_VA_ARG_GET( user_data, user_args, user_type);
|
|
||||||
ND_VA_ARG_GET( ..., user_args, ...);
|
|
||||||
|
|
||||||
ND_VA_LIST_CLOSE( user_args);
|
|
||||||
*/
|
*/
|
||||||
ND_VA_ARG_GET( Module1_Ptr, *Args_Ptr, T_Module *);
|
T_Module *Value1 = (T_Module *)va_arg( Args, T_Module *);
|
||||||
ND_VA_ARG_GET( Module2_Ptr, *Args_Ptr, T_Module *);
|
T_Module *Value2 = (T_Module *)va_arg( Args, T_Module *);
|
||||||
|
|
||||||
|
|
||||||
Command_Name = "NDD_CMD_VALUE_COMP";
|
Command_Name = "NDD_CMD_VALUE_COMP";
|
||||||
@ -402,7 +385,7 @@ NDT_Status Module_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Nod
|
|||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
|
|
||||||
rc = Module1_Ptr->Id - Module2_Ptr->Id;
|
rc = Value1->Id - Value2->Id;
|
||||||
|
|
||||||
if( rc < 0)
|
if( rc < 0)
|
||||||
{
|
{
|
||||||
@ -432,14 +415,10 @@ NDT_Status Module_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Nod
|
|||||||
case NDD_CMD_VALUE_ADD:
|
case NDD_CMD_VALUE_ADD:
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *);
|
void *Value_Ptr = (void *)va_arg( Args, void *);
|
||||||
|
va_list user_args = (va_list)va_arg( Args, va_list);
|
||||||
ND_VA_LIST_OPEN( user_args, *Args_Ptr);
|
user_type user_data = (user_type)va_arg( user_args, user_type);
|
||||||
|
... = (...)va_arg( user_args, ...);
|
||||||
ND_VA_ARG_GET( user_data, user_args, user_type);
|
|
||||||
ND_VA_ARG_GET( ..., user_args, ...);
|
|
||||||
|
|
||||||
ND_VA_LIST_CLOSE( user_args);
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@ -451,14 +430,10 @@ NDT_Status Module_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Nod
|
|||||||
case NDD_CMD_VALUE_REMOVE:
|
case NDD_CMD_VALUE_REMOVE:
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
ND_VA_ARG_GET( Value_Ptr, *Args_Ptr, void *);
|
void *Value_Ptr = (void *)va_arg( Args, void *);
|
||||||
|
va_list user_args = (va_list)va_arg( Args, va_list);
|
||||||
ND_VA_LIST_OPEN( user_args, *Args_Ptr);
|
user_type user_data = (user_type)va_arg( user_args, user_type);
|
||||||
|
... = (...)va_arg( user_args, ...);
|
||||||
ND_VA_ARG_GET( user_data, user_args, user_type);
|
|
||||||
ND_VA_ARG_GET( ..., user_args, ...);
|
|
||||||
|
|
||||||
ND_VA_LIST_CLOSE( user_args);
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@ -468,38 +443,25 @@ NDT_Status Module_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Nod
|
|||||||
|
|
||||||
case NDD_CMD_VALUE_PRINT:
|
case NDD_CMD_VALUE_PRINT:
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *);
|
NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *);
|
||||||
|
va_list lib_args = (va_list)va_arg( Args, va_list);
|
||||||
|
FILE *Out = (FILE *)va_arg( lib_args, FILE *);
|
||||||
|
NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode);
|
||||||
|
NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth);
|
||||||
|
va_list user_args = (va_list)va_arg( lib_args, va_list);
|
||||||
|
user_type user_data = (user_type)va_arg( user_args, user_type);
|
||||||
|
... = (...)va_arg( user_args, ...);
|
||||||
|
|
||||||
ND_VA_LIST_OPEN( lib_args, *Args_Ptr);
|
void *Value_Ptr = Node_Ptr->Value;
|
||||||
|
|
||||||
ND_VA_ARG_GET( Out, lib_args, FILE *);
|
|
||||||
ND_VA_ARG_GET( Recursive_Mode, lib_args, NDT_Recursive_Mode);
|
|
||||||
ND_VA_ARG_GET( Recursive_Depth, lib_args, NDT_Recursive_Depth);
|
|
||||||
ND_VA_ARG_GET( Recursive_Offset, lib_args, NDT_Recursive_Offset);
|
|
||||||
|
|
||||||
ND_VA_LIST_OPEN( user_args, lib_args);
|
|
||||||
|
|
||||||
ND_VA_ARG_GET( user_data, user_args, user_type);
|
|
||||||
ND_VA_ARG_GET( ..., user_args, ...);
|
|
||||||
|
|
||||||
ND_VA_LIST_CLOSE( user_args);
|
|
||||||
ND_VA_LIST_CLOSE( lib_args);
|
|
||||||
|
|
||||||
void *Value_Ptr = Node_Ptr->Value;
|
|
||||||
*/
|
*/
|
||||||
ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *);
|
NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *);
|
||||||
|
va_list lib_args = (va_list)va_arg( Args, va_list);
|
||||||
|
FILE *Out = (FILE *)va_arg( lib_args, FILE *);
|
||||||
|
NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode);
|
||||||
|
NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth);
|
||||||
|
|
||||||
ND_VA_LIST_OPEN( lib_args, *Args_Ptr);
|
T_Module *Module_Ptr = Node_Ptr->Value;
|
||||||
|
|
||||||
ND_VA_ARG_GET( Out, lib_args, FILE *);
|
|
||||||
ND_VA_ARG_GET( Recursive_Mode, lib_args, NDT_Recursive_Mode);
|
|
||||||
ND_VA_ARG_GET( Recursive_Depth, lib_args, NDT_Recursive_Depth);
|
|
||||||
ND_VA_ARG_GET( Recursive_Offset, lib_args, NDT_Recursive_Offset);
|
|
||||||
|
|
||||||
ND_VA_LIST_CLOSE( lib_args);
|
|
||||||
|
|
||||||
T_Module *Module_Ptr = Node_Ptr->Value;
|
|
||||||
|
|
||||||
|
|
||||||
Command_Name = "NDD_CMD_VALUE_PRINT";
|
Command_Name = "NDD_CMD_VALUE_PRINT";
|
||||||
@ -512,22 +474,16 @@ NDT_Status Module_Manager( NDT_Root *Root_Ptr, NDT_Index_Id Index_Id, NDT_Nod
|
|||||||
case NDD_CMD_INFO_PRINT:
|
case NDD_CMD_INFO_PRINT:
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
ND_VA_ARG_GET( Next_Node_Ptr, *Args_Ptr, NDT_Node *);
|
NDT_Node *Next_Node_Ptr = (NDT_Node *)va_arg( Args, NDT_Node *);
|
||||||
|
va_list lib_args = (va_list)va_arg( Args, va_list);
|
||||||
|
FILE *Out = (FILE *)va_arg( lib_args, FILE *);
|
||||||
|
NDT_Recursive_Mode Recursive_Mode = (NDT_Recursive_Mode)va_arg( lib_args, NDT_Recursive_Mode);
|
||||||
|
NDT_Recursive_Depth Recursive_Depth = (NDT_Recursive_Depth)va_arg( lib_args, NDT_Recursive_Depth);
|
||||||
|
va_list user_args = (va_list)va_arg( lib_args, va_list);
|
||||||
|
user_type user_data = (user_type)va_arg( user_args, user_type);
|
||||||
|
... = (...)va_arg( user_args, ...);
|
||||||
|
|
||||||
ND_VA_LIST_OPEN( lib_args, *Args_Ptr);
|
void *Value_Ptr = Node_Ptr->Value;
|
||||||
|
|
||||||
ND_VA_ARG_GET( Out, lib_args, FILE *);
|
|
||||||
ND_VA_ARG_GET( Recursive_Mode, lib_args, NDT_Recursive_Mode);
|
|
||||||
ND_VA_ARG_GET( Recursive_Depth, lib_args, NDT_Recursive_Depth);
|
|
||||||
ND_VA_ARG_GET( Recursive_Offset, lib_args, NDT_Recursive_Offset);
|
|
||||||
|
|
||||||
ND_VA_LIST_OPEN( user_args, lib_args);
|
|
||||||
|
|
||||||
ND_VA_ARG_GET( user_data, user_args, user_type);
|
|
||||||
ND_VA_ARG_GET( ..., user_args, ...);
|
|
||||||
|
|
||||||
ND_VA_LIST_CLOSE( user_args);
|
|
||||||
ND_VA_LIST_CLOSE( lib_args);
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user