From fa77b6691e218c49163f477c84fb8664fb5cda8b Mon Sep 17 00:00:00 2001 From: Binh-Minh Ribler Date: Wed, 25 Jun 2003 12:25:11 -0500 Subject: [svn-r7104] Purpose: Bug fix Description: Missing returning error for failures occur in C++ examples. Solution: Added "return -1;" when an exception is caught. Also, turned off automatic error printing so that the C++ API will catch and handle the failures. Platforms: SunOS 5.7 (arabica) Linux 2.4 (eirene) IRIX 6.5.11 (modi4) --- c++/examples/chunks.cpp | 20 +++++-- c++/examples/compound.cpp | 10 ++++ c++/examples/create.cpp | 78 +++++++++++++++------------ c++/examples/extend_ds.cpp | 14 ++++- c++/examples/h5group.cpp | 130 +++++++++++++++++++++++++-------------------- c++/examples/readdata.cpp | 80 ++++++++++++++++++++-------- c++/examples/writedata.cpp | 42 +++++++++------ 7 files changed, 240 insertions(+), 134 deletions(-) diff --git a/c++/examples/chunks.cpp b/c++/examples/chunks.cpp index 556472f..3cc4e20 100644 --- a/c++/examples/chunks.cpp +++ b/c++/examples/chunks.cpp @@ -45,21 +45,30 @@ int main (void) try { /* + * Turn off the auto-printing when failure occurs so that we can + * handle the errors appropriately + */ + Exception::dontPrint(); + + /* * Open the file and the dataset. */ H5File file( FILE_NAME, H5F_ACC_RDONLY ); DataSet dataset = file.openDataSet( DATASET_NAME ); /* - * Get dataset rank and dimension. + * Get filespace for rank and dimension */ - // Get filespace first. DataSpace filespace = dataset.getSpace(); - // Get number of dimensions in the file dataspace + /* + * Get number of dimensions in the file dataspace + */ int rank = filespace.getSimpleExtentNdims(); - // Get and print the dimension sizes of the file dataspace + /* + * Get and print the dimension sizes of the file dataspace + */ hsize_t dims[2]; // dataset dimensions rank = filespace.getSimpleExtentDims( dims ); cout << "dataset rank = " << rank << ", dimensions " @@ -199,18 +208,21 @@ int main (void) catch( FileIException error ) { error.printError(); + return -1; } // catch failure caused by the DataSet operations catch( DataSetIException error ) { error.printError(); + return -1; } // catch failure caused by the DataSpace operations catch( DataSpaceIException error ) { error.printError(); + return -1; } return 0; diff --git a/c++/examples/compound.cpp b/c++/examples/compound.cpp index 68de654..d3163d6 100644 --- a/c++/examples/compound.cpp +++ b/c++/examples/compound.cpp @@ -70,6 +70,12 @@ int main(void) } /* + * Turn off the auto-printing when failure occurs so that we can + * handle the errors appropriately + */ + Exception::dontPrint(); + + /* * Create the data space. */ hsize_t dim[] = {LENGTH}; /* Dataspace dimensions */ @@ -181,24 +187,28 @@ int main(void) catch( FileIException error ) { error.printError(); + return -1; } // catch failure caused by the DataSet operations catch( DataSetIException error ) { error.printError(); + return -1; } // catch failure caused by the DataSpace operations catch( DataSpaceIException error ) { error.printError(); + return -1; } // catch failure caused by the DataSpace operations catch( DataTypeIException error ) { error.printError(); + return -1; } return 0; diff --git a/c++/examples/create.cpp b/c++/examples/create.cpp index 06952f9..06d5d4d 100644 --- a/c++/examples/create.cpp +++ b/c++/examples/create.cpp @@ -12,9 +12,9 @@ * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -// -// This example writes a dataset to a new HDF5 file. -// +/* + * This example writes a dataset to a new HDF5 file. + */ #include @@ -37,9 +37,9 @@ const int RANK = 2; int main (void) { - // - // Data initialization. - // + /* + * Data initialization. + */ int i, j; int data[NX][NY]; // buffer for data to write for (j = 0; j < NX; j++) @@ -47,50 +47,56 @@ int main (void) for (i = 0; i < NY; i++) data[j][i] = i + j; } - // - // 0 1 2 3 4 5 - // 1 2 3 4 5 6 - // 2 3 4 5 6 7 - // 3 4 5 6 7 8 - // 4 5 6 7 8 9 - // + /* + * 0 1 2 3 4 5 + * 1 2 3 4 5 6 + * 2 3 4 5 6 7 + * 3 4 5 6 7 8 + * 4 5 6 7 8 9 + */ // Try block to detect exceptions raised by any of the calls inside it try { - // - // Create a new file using H5F_ACC_TRUNC access, - // default file creation properties, and default file - // access properties. - // + /* + * Turn off the auto-printing when failure occurs so that we can + * handle the errors appropriately + */ + Exception::dontPrint(); + + /* + * Create a new file using H5F_ACC_TRUNC access, + * default file creation properties, and default file + * access properties. + */ H5File file( FILE_NAME, H5F_ACC_TRUNC ); - // - // Define the size of the array and create the data space for fixed - // size dataset. - // + /* + * Define the size of the array and create the data space for fixed + * size dataset. + */ hsize_t dimsf[2]; // dataset dimensions dimsf[0] = NX; dimsf[1] = NY; DataSpace dataspace( RANK, dimsf ); - // - // Define datatype for the data in the file. - // We will store little endian INT numbers. - // + /* + * Define datatype for the data in the file. + * We will store little endian INT numbers. + */ IntType datatype( PredType::NATIVE_INT ); datatype.setOrder( H5T_ORDER_LE ); - // - // Create a new dataset within the file using defined dataspace and - // datatype and default dataset creation properties. - // + /* + * Create a new dataset within the file using defined dataspace and + * datatype and default dataset creation properties. + */ DataSet dataset = file.createDataSet( DATASET_NAME, datatype, dataspace ); - // - // Write the data to the dataset using default memory space, file - // space, and transfer properties. - // + /* + * Write the data to the dataset using default memory space, file + * space, and transfer properties. + */ dataset.write( data, PredType::NATIVE_INT ); } // end of try block @@ -98,24 +104,28 @@ int main (void) catch( FileIException error ) { error.printError(); + return -1; } // catch failure caused by the DataSet operations catch( DataSetIException error ) { error.printError(); + return -1; } // catch failure caused by the DataSpace operations catch( DataSpaceIException error ) { error.printError(); + return -1; } // catch failure caused by the DataSpace operations catch( DataTypeIException error ) { error.printError(); + return -1; } return 0; // successfully terminated diff --git a/c++/examples/extend_ds.cpp b/c++/examples/extend_ds.cpp index f748cde..34a50c3 100644 --- a/c++/examples/extend_ds.cpp +++ b/c++/examples/extend_ds.cpp @@ -40,10 +40,18 @@ const int RANK = 2; int main (void) { - // Try block to detect exceptions raised by any of the calls inside it + /* + * Try block to detect exceptions raised by any of the calls inside it + */ try { /* + * Turn off the auto-printing when failure occurs so that we can + * handle the errors appropriately + */ + Exception::dontPrint(); + + /* * Create the data space with unlimited dimensions. */ hsize_t dims[2] = { 3, 3}; // dataset dimensions at creation @@ -192,24 +200,28 @@ int main (void) catch( FileIException error ) { error.printError(); + return -1; } // catch failure caused by the DataSet operations catch( DataSetIException error ) { error.printError(); + return -1; } // catch failure caused by the DataSpace operations catch( DataSpaceIException error ) { error.printError(); + return -1; } // catch failure caused by the DataSpace operations catch( DataTypeIException error ) { error.printError(); + return -1; } return 0; } diff --git a/c++/examples/h5group.cpp b/c++/examples/h5group.cpp index 95161da..d7f3c66 100644 --- a/c++/examples/h5group.cpp +++ b/c++/examples/h5group.cpp @@ -12,14 +12,14 @@ * access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ -// -// This example creates a group in the file and dataset in the group. -// Hard link to the group object is created and the dataset is accessed -// under different names. -// Iterator function is used to find the object names in the root group. -// Note that the C++ API iterator function is not completed yet, thus -// the C version is used in this example. -// +/* + * This example creates a group in the file and dataset in the group. + * Hard link to the group object is created and the dataset is accessed + * under different names. + * Iterator function is used to find the object names in the root group. + * Note that the C++ API iterator function is not completed yet, thus + * the C version is used in this example. + */ #include #ifdef OLD_HEADER_FILENAME @@ -48,19 +48,29 @@ int main(void) // Try block to detect exceptions raised by any of the calls inside it try { - // Create the named file, truncating the existing one if any, - // using default create and access property lists. + /* + * Turn off the auto-printing when failure occurs so that we can + * handle the errors appropriately + */ + Exception::dontPrint(); + + /* + * Create the named file, truncating the existing one if any, + * using default create and access property lists. + */ H5File *file = new H5File( FILE_NAME, H5F_ACC_TRUNC ); - // Create a group in the file + /* + * Create a group in the file + */ Group* group = new Group( file->createGroup( "/Data" )); - // - // Create dataset "Compressed Data" in the group using absolute - // name. Dataset creation property list is modified to use - // GZIP compression with the compression effort set to 6. - // Note that compression can be used only when dataset is chunked. - // + /* + * Create dataset "Compressed Data" in the group using absolute + * name. Dataset creation property list is modified to use + * GZIP compression with the compression effort set to 6. + * Note that compression can be used only when dataset is chunked. + */ dims[0] = 1000; dims[1] = 20; cdims[0] = 20; @@ -74,22 +84,22 @@ int main(void) DataSet* dataset = new DataSet( file->createDataSet( "/Data/Compressed_Data", PredType::NATIVE_INT, dataspace, ds_creatplist )); - // - // Close the dataset and the file. - // + /* + * Close the dataset and the file. + */ delete dataset; delete group; delete file; - // - // Now reopen the file and group in the file. - // + /* + * Now reopen the file and group in the file. + */ file = new H5File( FILE_NAME, H5F_ACC_RDWR ); group = new Group( file->openGroup( "Data" )); - // - // Access "Compressed_Data" dataset in the group. - // + /* + * Access "Compressed_Data" dataset in the group. + */ try { // to determine if the dataset exists in the group dataset = new DataSet( group->openDataSet( "Compressed_Data" )); } @@ -99,20 +109,20 @@ int main(void) } cout << "dataset \"/Data/Compressed_Data\" is open" << endl; - // - // Close the dataset. - // + /* + * Close the dataset. + */ delete dataset; - // - // Create hard link to the Data group. - // + /* + * Create hard link to the Data group. + */ file->link( H5G_LINK_HARD, "Data", "Data_new" ); - // - // We can access "Compressed_Data" dataset using created - // hard link "Data_new". - // + /* + * We can access "Compressed_Data" dataset using created + * hard link "Data_new". + */ try { // to determine if the dataset exists in the file dataset = new DataSet( file->openDataSet( "/Data_new/Compressed_Data" )); } @@ -122,23 +132,23 @@ int main(void) } cout << "dataset \"/Data_new/Compressed_Data\" is open" << endl; - // - // Close the dataset. - // + /* + * Close the dataset. + */ delete dataset; - // - // Use iterator to see the names of the objects in the file - // root directory. - // + /* + * Use iterator to see the names of the objects in the file + * root directory. + */ cout << endl << "Iterating over elements in the file" << endl; herr_t idx = H5Giterate(file->getId(), "/", NULL, file_info, NULL); cout << endl; - // - // Unlink name "Data" and use iterator to see the names - // of the objects in the file root direvtory. - // + /* + * Unlink name "Data" and use iterator to see the names + * of the objects in the file root direvtory. + */ cout << "Unlinking..." << endl; try { // attempt to unlink the dataset file->unlink( "Data" ); @@ -153,7 +163,9 @@ int main(void) idx = H5Giterate(file->getId(), "/", NULL, file_info, NULL); cout << endl; - // Close the file. + /* + * Close the file. + */ delete file; } // end of try block @@ -162,43 +174,47 @@ int main(void) catch( FileIException error ) { error.printError(); + return -1; } // catch failure caused by the DataSet operations catch( DataSetIException error ) { error.printError(); + return -1; } // catch failure caused by the DataSpace operations catch( DataSpaceIException error ) { error.printError(); + return -1; } // catch failure caused by the Attribute operations catch( AttributeIException error ) { error.printError(); + return -1; } return 0; } -// -// Operator function. -// +/* + * Operator function. + */ herr_t file_info(hid_t loc_id, const char *name, void *opdata) { hid_t group; - // - // Open the group using its name. - // + /* + * Open the group using its name. + */ group = H5Gopen(loc_id, name); - // - // Display group name. - // + /* + * Display group name. + */ cout << "Name : " << name << endl; H5Gclose(group); diff --git a/c++/examples/readdata.cpp b/c++/examples/readdata.cpp index fa5e141..1797d27 100644 --- a/c++/examples/readdata.cpp +++ b/c++/examples/readdata.cpp @@ -42,9 +42,9 @@ const int RANK_OUT = 3; int main (void) { - // - // Output buffer initialization. - // + /* + * Output buffer initialization. + */ int i, j, k; int data_out[NX][NY][NZ ]; /* output buffer */ for (j = 0; j < NX; j++) @@ -56,52 +56,78 @@ int main (void) } } - // Try block to detect exceptions raised by any of the calls inside it + /* + * Try block to detect exceptions raised by any of the calls inside it + */ try { - // - // Open the specified file and the specified dataset in the file. - // + /* + * Turn off the auto-printing when failure occurs so that we can + * handle the errors appropriately + */ + Exception::dontPrint(); + + /* + * Open the specified file and the specified dataset in the file. + */ H5File file( FILE_NAME, H5F_ACC_RDONLY ); DataSet dataset = file.openDataSet( DATASET_NAME ); - // Get the class of the datatype that is used by the dataset. + /* + * Get the class of the datatype that is used by the dataset. + */ H5T_class_t type_class = dataset.getTypeClass(); - // Get class of datatype and print message if it's an integer. + /* + * Get class of datatype and print message if it's an integer. + */ if( type_class == H5T_INTEGER ) { cout << "Data set has INTEGER type" << endl; - // Get the integer datatype + /* + * Get the integer datatype + */ IntType intype = dataset.getIntType(); - // Get order of datatype and print message if it's a little endian. + /* + * Get order of datatype and print message if it's a little endian. + */ string order_string; H5T_order_t order = intype.getOrder( order_string ); cout << order_string << endl; - // Get size of the data element stored in file and print it. + /* + * Get size of the data element stored in file and print it. + */ size_t size = intype.getSize(); cout << "Data size is " << size << endl; } - // Get dataspace of the dataset. + /* + * Get dataspace of the dataset. + */ DataSpace dataspace = dataset.getSpace(); - // Get the number of dimensions in the dataspace. + /* + * Get the number of dimensions in the dataspace. + */ int rank = dataspace.getSimpleExtentNdims(); - // Get the dimension size of each dimension in the dataspace and - // display them. + /* + * Get the dimension size of each dimension in the dataspace and + * display them. + */ hsize_t dims_out[2]; int ndims = dataspace.getSimpleExtentDims( dims_out, NULL); cout << "rank " << rank << ", dimensions " << (unsigned long)(dims_out[0]) << " x " << (unsigned long)(dims_out[1]) << endl; - // Define hyperslab in the dataset; implicitly giving strike and - // block NULL. + /* + * Define hyperslab in the dataset; implicitly giving strike and + * block NULL. + */ hssize_t offset[2]; // hyperslab offset in the file hsize_t count[2]; // size of the hyperslab in the file offset[0] = 1; @@ -110,14 +136,18 @@ int main (void) count[1] = NY_SUB; dataspace.selectHyperslab( H5S_SELECT_SET, count, offset ); - // Define the memory dataspace. + /* + * Define the memory dataspace. + */ hsize_t dimsm[3]; /* memory space dimensions */ dimsm[0] = NX; dimsm[1] = NY; dimsm[2] = NZ ; DataSpace memspace( RANK_OUT, dimsm ); - // Define memory hyperslab. + /* + * Define memory hyperslab. + */ hssize_t offset_out[3]; // hyperslab offset in memory hsize_t count_out[3]; // size of the hyperslab in memory offset_out[0] = 3; @@ -128,8 +158,10 @@ int main (void) count_out[2] = 1; memspace.selectHyperslab( H5S_SELECT_SET, count_out, offset_out ); - // Read data from hyperslab in the file into the hyperslab in - // memory and display the data. + /* + * Read data from hyperslab in the file into the hyperslab in + * memory and display the data. + */ dataset.read( data_out, PredType::NATIVE_INT, memspace, dataspace ); for (j = 0; j < NX; j++) @@ -153,24 +185,28 @@ int main (void) catch( FileIException error ) { error.printError(); + return -1; } // catch failure caused by the DataSet operations catch( DataSetIException error ) { error.printError(); + return -1; } // catch failure caused by the DataSpace operations catch( DataSpaceIException error ) { error.printError(); + return -1; } // catch failure caused by the DataSpace operations catch( DataTypeIException error ) { error.printError(); + return -1; } return 0; // successfully terminated diff --git a/c++/examples/writedata.cpp b/c++/examples/writedata.cpp index 2a7381c..fbaac1f 100644 --- a/c++/examples/writedata.cpp +++ b/c++/examples/writedata.cpp @@ -70,28 +70,34 @@ int main (void) // Try block to detect exceptions raised by any of the calls inside it try { - // - //Create a file. - // + /* + * Turn off the auto-printing when failure occurs so that we can + * handle the errors appropriately + */ + Exception::dontPrint(); + + /* + * Create a file. + */ H5File* file = new H5File( FILE_NAME, H5F_ACC_TRUNC ); - // - //Create dataspace for the dataset in the file. - // + /* + * Create dataspace for the dataset in the file. + */ hsize_t fdim[] = {FSPACE_DIM1, FSPACE_DIM2}; // dim sizes of ds (on disk) DataSpace fspace( FSPACE_RANK, fdim ); - // - // Create dataset and write it into the file. - // + /* + * Create dataset and write it into the file. + */ DataSet* dataset = new DataSet( file->createDataSet( DATASET_NAME, PredType::NATIVE_INT, fspace )); dataset->write( matrix, PredType::NATIVE_INT ); - // - // Select hyperslab for the dataset in the file, using 3x2 blocks, - // (4,3) stride and (2,4) count starting at the position (0,1). - // + /* + * Select hyperslab for the dataset in the file, using 3x2 blocks, + * (4,3) stride and (2,4) count starting at the position (0,1). + */ hssize_t start[2]; // Start of hyperslab hsize_t stride[2]; // Stride of hyperslab hsize_t count[2]; // Block count @@ -102,9 +108,9 @@ int main (void) block[0] = 3; block[1] = 2; fspace.selectHyperslab( H5S_SELECT_SET, count, start, stride, block); - // - // Create dataspace for the first dataset. - // + /* + * Create dataspace for the first dataset. + */ hsize_t dim1[] = {MSPACE1_DIM}; /* Dimension size of the first dataset (in memory) */ DataSpace mspace1( MSPACE1_RANK, dim1 ); @@ -220,19 +226,23 @@ int main (void) catch( FileIException error ) { error.printError(); + return -1; } // catch failure caused by the DataSet operations catch( DataSetIException error ) { error.printError(); + return -1; } // catch failure caused by the DataSpace operations catch( DataSpaceIException error ) { error.printError(); + return -1; } return 0; + } -- cgit v0.12