diff options
author | Pedro Vicente Nunes <pvn@hdfgroup.org> | 2006-11-20 21:31:06 (GMT) |
---|---|---|
committer | Pedro Vicente Nunes <pvn@hdfgroup.org> | 2006-11-20 21:31:06 (GMT) |
commit | 51da322882c72fa1c9e5c173b6e60ec283f7b4a1 (patch) | |
tree | 4f84f3d6894c1277fa70d954e3230f66e00c478c /tools/lib/h5trav.c | |
parent | 335978f235277f12a87fb198a5fd1a0e43ce5734 (diff) | |
download | hdf5-51da322882c72fa1c9e5c173b6e60ec283f7b4a1.zip hdf5-51da322882c72fa1c9e5c173b6e60ec283f7b4a1.tar.gz hdf5-51da322882c72fa1c9e5c173b6e60ec283f7b4a1.tar.bz2 |
[svn-r12953] h5repack code revision, avoid one unnecessary call to file open/close in the cheking of objects when there are none requested by the user
Diffstat (limited to 'tools/lib/h5trav.c')
-rw-r--r-- | tools/lib/h5trav.c | 402 |
1 files changed, 207 insertions, 195 deletions
diff --git a/tools/lib/h5trav.c b/tools/lib/h5trav.c index 4ef495d..3da1ee0 100644 --- a/tools/lib/h5trav.c +++ b/tools/lib/h5trav.c @@ -16,22 +16,31 @@ #include "h5trav.h" #include "H5private.h" -/* functions for traversal */ +/*------------------------------------------------------------------------- + * local functions + *------------------------------------------------------------------------- + */ static int traverse( hid_t loc_id, - const char *group_name, - trav_table_t *table, - trav_info_t *info, - int *idx, - int print); + const char *group_name, + trav_table_t *table, + trav_info_t *info, + int *idx, + int print); static hssize_t get_nnames( hid_t loc_id, - const char *group_name ); + const char *group_name ); -herr_t get_name_type( hid_t loc_id, - const char *group_name, - int idx, - char **name, - H5G_obj_t *type ); +static herr_t get_name_type( hid_t loc_id, + const char *group_name, + int idx, + char **name, + H5G_obj_t *type ); + + +/*------------------------------------------------------------------------- + * "h5trav info" public functions. used in h5diff + *------------------------------------------------------------------------- + */ /*------------------------------------------------------------------------- * Function: h5trav_getinfo @@ -67,37 +76,8 @@ int h5trav_getinfo(hid_t file_id, trav_table_free( table ); return nnames; - } - -/*------------------------------------------------------------------------- - * Function: h5trav_gettable - * - * Purpose: get the trav_table_t struct - * - * Return: 0, -1 on error - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: December 17, 2003 - * - *------------------------------------------------------------------------- - */ - -int h5trav_gettable(hid_t fid, trav_table_t *travt) -{ - int nnames=0; - - /* iterate starting on the root group */ - if (( nnames = traverse(fid,"/",travt,NULL,&nnames,0))<0) - return -1; - - return 0; - -} - - /*------------------------------------------------------------------------- * Function: h5trav_getindex * @@ -133,8 +113,6 @@ int h5trav_getindex( const char *obj, int nobjs, trav_info_t *info ) return -1; } - - /*------------------------------------------------------------------------- * Function: h5trav_freeinfo * @@ -157,6 +135,182 @@ void h5trav_freeinfo( trav_info_t *info, int nobjs ) } } +/*------------------------------------------------------------------------- + * Function: h5trav_printinfo + * + * Purpose: print list of names in file + * + * Return: void + * + * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu + * + * Date: May 9, 2003 + * + *------------------------------------------------------------------------- + */ +void h5trav_printinfo(int nobjs, trav_info_t *travi) +{ + int i; + for ( i = 0; i < nobjs; i++) + { + switch ( travi[i].type ) + { + case H5G_GROUP: + printf(" %-10s %s\n", "group", travi[i].name ); + break; + case H5G_DATASET: + printf(" %-10s %s\n", "dataset", travi[i].name ); + break; + case H5G_TYPE: + printf(" %-10s %s\n", "datatype", travi[i].name ); + break; + case H5G_LINK: + printf(" %-10s %s\n", "link", travi[i].name ); + break; + case H5G_UDLINK: + printf(" %-10s %s\n", "User defined link", travi[i].name ); + break; + default: + printf(" %-10s %s\n", "User defined object", travi[i].name ); + break; + } + } +} + +/*------------------------------------------------------------------------- + * "h5trav table" public functions. used in h5repack + *------------------------------------------------------------------------- + */ + +/*------------------------------------------------------------------------- + * Function: h5trav_getindext + * + * Purpose: get index of NAME in list + * + * Return: index, -1 if not found + * + * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu + * + * Date: December 18, 2003 + * + *------------------------------------------------------------------------- + */ + +int h5trav_getindext(const char *name, trav_table_t *table) +{ + char *pdest; + int result; + unsigned int i, j; + + for ( i = 0; i < table->nobjs; i++) + { + if ( strcmp(name,table->objs[i].name)==0 ) + return i; + + pdest = strstr( table->objs[i].name, name ); + result = (int)(pdest - table->objs[i].name); + + /* found at position 1, meaning without '/' */ + if( pdest != NULL && result==1 && strlen(table->objs[i].name)-1==strlen(name)) + return i; + + /* search also in the list of links */ + if (table->objs[i].nlinks) + { + for ( j=0; j<table->objs[i].nlinks; j++) + { + if ( strcmp(name,table->objs[i].links[j].new_name)==0 ) + return i; + + pdest = strstr( table->objs[i].links[j].new_name, name ); + result = (int)(pdest - table->objs[i].links[j].new_name); + + /* found at position 1, meaning without '/' */ + if( pdest != NULL && result==1 ) + return i; + + } + } + + } + return -1; +} + +/*------------------------------------------------------------------------- + * Function: h5trav_gettable + * + * Purpose: get the trav_table_t struct + * + * Return: 0, -1 on error + * + * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu + * + * Date: December 17, 2003 + * + *------------------------------------------------------------------------- + */ + +int h5trav_gettable(hid_t fid, trav_table_t *travt) +{ + int nnames=0; + + /* iterate starting on the root group */ + if (( nnames = traverse(fid,"/",travt,NULL,&nnames,0))<0) + return -1; + + return 0; + +} + +/*------------------------------------------------------------------------- + * Function: h5trav_printtable + * + * Purpose: print list of objects in file + * + * Return: void + * + * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu + * + * Date: May 9, 2003 + * + *------------------------------------------------------------------------- + */ +void h5trav_printtable(trav_table_t *table) +{ + unsigned int i, j; + + for ( i = 0; i < table->nobjs; i++) + { + switch ( table->objs[i].type ) + { + case H5G_GROUP: + printf(" %-10s %s\n", "group", table->objs[i].name ); + break; + case H5G_DATASET: + printf(" %-10s %s\n", "dataset", table->objs[i].name ); + break; + case H5G_TYPE: + printf(" %-10s %s\n", "datatype", table->objs[i].name ); + break; + case H5G_LINK: + printf(" %-10s %s\n", "link", table->objs[i].name ); + break; + default: + printf(" %-10s %s\n", "User defined object", table->objs[i].name ); + break; + } + + if (table->objs[i].nlinks) + { + for ( j=0; j<table->objs[i].nlinks; j++) + { + printf(" %-10s %s\n", " hardlink", table->objs[i].links[j].new_name ); + } + } + + } +} + /*------------------------------------------------------------------------- * Function: get_nnames @@ -253,11 +407,11 @@ static herr_t opget_info( hid_t loc_id, const char *name, void *op_data) *------------------------------------------------------------------------- */ -herr_t get_name_type( hid_t loc_id, - const char *group_name, - int idx, - char **name, - H5G_obj_t *type ) +static herr_t get_name_type( hid_t loc_id, + const char *group_name, + int idx, + char **name, + H5G_obj_t *type ) { trav_info_t info; @@ -286,11 +440,11 @@ herr_t get_name_type( hid_t loc_id, */ static int traverse( hid_t loc_id, - const char *group_name, - trav_table_t *table, - trav_info_t *info, - int *idx, - int print) + const char *group_name, + trav_table_t *table, + trav_info_t *info, + int *idx, + int print) { haddr_t objno; /* Compact form of object's location */ char *name=NULL; @@ -566,151 +720,9 @@ static int traverse( hid_t loc_id, -/*------------------------------------------------------------------------- - * Function: h5trav_printinfo - * - * Purpose: print list of names in file - * - * Return: void - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: May 9, 2003 - * - *------------------------------------------------------------------------- - */ -void h5trav_printinfo(int nobjs, trav_info_t *travi) -{ - int i; - for ( i = 0; i < nobjs; i++) - { - switch ( travi[i].type ) - { - case H5G_GROUP: - printf(" %-10s %s\n", "group", travi[i].name ); - break; - case H5G_DATASET: - printf(" %-10s %s\n", "dataset", travi[i].name ); - break; - case H5G_TYPE: - printf(" %-10s %s\n", "datatype", travi[i].name ); - break; - case H5G_LINK: - printf(" %-10s %s\n", "link", travi[i].name ); - break; - case H5G_UDLINK: - printf(" %-10s %s\n", "User defined link", travi[i].name ); - break; - default: - printf(" %-10s %s\n", "User defined object", travi[i].name ); - break; - } - } -} - - - -/*------------------------------------------------------------------------- - * Function: h5trav_printtable - * - * Purpose: print list of objects in file - * - * Return: void - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: May 9, 2003 - * - *------------------------------------------------------------------------- - */ -void h5trav_printtable(trav_table_t *table) -{ - unsigned int i, j; - - for ( i = 0; i < table->nobjs; i++) - { - switch ( table->objs[i].type ) - { - case H5G_GROUP: - printf(" %-10s %s\n", "group", table->objs[i].name ); - break; - case H5G_DATASET: - printf(" %-10s %s\n", "dataset", table->objs[i].name ); - break; - case H5G_TYPE: - printf(" %-10s %s\n", "datatype", table->objs[i].name ); - break; - case H5G_LINK: - printf(" %-10s %s\n", "link", table->objs[i].name ); - break; - default: - printf(" %-10s %s\n", "User defined object", table->objs[i].name ); - break; - } - - if (table->objs[i].nlinks) - { - for ( j=0; j<table->objs[i].nlinks; j++) - { - printf(" %-10s %s\n", " hardlink", table->objs[i].links[j].new_name ); - } - } - - } -} - - -/*------------------------------------------------------------------------- - * Function: h5trav_getindext - * - * Purpose: get index of NAME in list - * - * Return: index, -1 if not found - * - * Programmer: Pedro Vicente, pvn@ncsa.uiuc.edu - * - * Date: December 18, 2003 - * - *------------------------------------------------------------------------- - */ - -int h5trav_getindext(const char *name, trav_table_t *table) -{ - char *pdest; - int result; - unsigned int i, j; - - for ( i = 0; i < table->nobjs; i++) - { - if ( strcmp(name,table->objs[i].name)==0 ) - return i; - - pdest = strstr( table->objs[i].name, name ); - result = (int)(pdest - table->objs[i].name); - - /* found at position 1, meaning without '/' */ - if( pdest != NULL && result==1 && strlen(table->objs[i].name)-1==strlen(name)) - return i; - /* search also in the list of links */ - if (table->objs[i].nlinks) - { - for ( j=0; j<table->objs[i].nlinks; j++) - { - if ( strcmp(name,table->objs[i].links[j].new_name)==0 ) - return i; - pdest = strstr( table->objs[i].links[j].new_name, name ); - result = (int)(pdest - table->objs[i].links[j].new_name); - /* found at position 1, meaning without '/' */ - if( pdest != NULL && result==1 ) - return i; - } - } - } - return -1; -} |