diff options
Diffstat (limited to 'c++/examples/h5group.cpp')
-rw-r--r-- | c++/examples/h5group.cpp | 196 |
1 files changed, 196 insertions, 0 deletions
diff --git a/c++/examples/h5group.cpp b/c++/examples/h5group.cpp new file mode 100644 index 0000000..514e002 --- /dev/null +++ b/c++/examples/h5group.cpp @@ -0,0 +1,196 @@ +// +// 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 <string> +#ifndef H5_NO_NAMESPACE +using namespace std; +#endif + +#ifdef OLD_HEADER_FILENAME +#include <iostream.h> +#else +#include <iostream> +#endif +#include "H5Cpp.h" + +#ifndef H5_NO_NAMESPACE +using namespace H5; +#endif + +const string FILE_NAME( "Group.h5" ); +const int RANK = 2; + +// Operator function +extern "C" herr_t file_info(hid_t loc_id, const char *name, void *opdata); + +int main(void) +{ + + hsize_t dims[2]; + hsize_t cdims[2]; + + // 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. + H5File *file = new H5File( FILE_NAME, H5F_ACC_TRUNC ); + + // 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. + // + dims[0] = 1000; + dims[1] = 20; + cdims[0] = 20; + cdims[1] = 20; + DataSpace dataspace( RANK, dims ); // create the new dataspace + // for the dataset + + DSetCreatPropList ds_creatplist; // create dataset creation prop list + ds_creatplist.setChunk( 2, cdims ); // then modify it for compression + ds_creatplist.setDeflate( 6 ); + + DataSet* dataset = new DataSet( file->createDataSet( "/Data/Compressed_Data", PredType::NATIVE_INT, dataspace, ds_creatplist )); + + // + // Close the dataset and the file. + // + delete dataset; + delete group; + delete 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. + // + try { // to determine if the dataset exists in the group + dataset = new DataSet( group->openDataSet( "Compressed_Data" )); + } + catch( GroupIException not_found_error ) + { + cout << " Dataset is not found." << endl; + } + cout << "dataset \"/Data/Compressed_Data\" is open" << endl; + + // + // Close the dataset. + // + delete dataset; + + // + // 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". + // + try { // to determine if the dataset exists in the file + dataset = new DataSet( file->openDataSet( "/Data_new/Compressed_Data" )); + } + catch( FileIException not_found_error ) + { + cout << " Dataset is not found." << endl; + } + cout << "dataset \"/Data_new/Compressed_Data\" is open" << endl; + + // + // Close the dataset. + // + delete dataset; + + // + // 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. + // + cout << "Unlinking..." << endl; + try { // attempt to unlink the dataset + file->unlink( "Data" ); + } + catch( FileIException unlink_error ) + { + cout << " unlink failed." << endl; + } + cout << "\"Data\" is unlinked" << endl; + + cout << endl << "Iterating over elements in the file again" << endl; + idx = H5Giterate(file->getId(), "/", NULL, file_info, NULL); + cout << endl; + + // Close the file. + delete file; + + } // end of try block + + // catch failure caused by the H5File operations + catch( FileIException error ) + { + error.printError(); + } + + // catch failure caused by the DataSet operations + catch( DataSetIException error ) + { + error.printError(); + } + + // catch failure caused by the DataSpace operations + catch( DataSpaceIException error ) + { + error.printError(); + } + + // catch failure caused by the Attribute operations + catch( AttributeIException error ) + { + error.printError(); + } + return 0; +} + +// +// Operator function. +// +herr_t +file_info(hid_t loc_id, const char *name, void *opdata) +{ + hid_t group; + // + // Open the group using its name. + // + group = H5Gopen(loc_id, name); + + // + // Display group name. + // + cout << "Name : " << name << endl; + + H5Gclose(group); + return 0; + } + |