summaryrefslogtreecommitdiffstats
path: root/c++/examples/extend_ds.cpp
diff options
context:
space:
mode:
authorBinh-Minh Ribler <bmribler@hdfgroup.org>2000-12-07 01:11:00 (GMT)
committerBinh-Minh Ribler <bmribler@hdfgroup.org>2000-12-07 01:11:00 (GMT)
commit9758b5a14c52e42fffef38792155d5d9af33ab57 (patch)
treef0421c6712faac9f90c129d0d874a7a940af5f16 /c++/examples/extend_ds.cpp
parent146482863aa7f52392f663cd4015f045727786bf (diff)
downloadhdf5-9758b5a14c52e42fffef38792155d5d9af33ab57.zip
hdf5-9758b5a14c52e42fffef38792155d5d9af33ab57.tar.gz
hdf5-9758b5a14c52e42fffef38792155d5d9af33ab57.tar.bz2
[svn-r3085] Renamed extend_ds.C to extend_ds.cpp
Diffstat (limited to 'c++/examples/extend_ds.cpp')
-rw-r--r--c++/examples/extend_ds.cpp204
1 files changed, 204 insertions, 0 deletions
diff --git a/c++/examples/extend_ds.cpp b/c++/examples/extend_ds.cpp
new file mode 100644
index 0000000..e0eb877
--- /dev/null
+++ b/c++/examples/extend_ds.cpp
@@ -0,0 +1,204 @@
+/*
+ * This example shows how to work with extendible dataset.
+ * In the current version of the library dataset MUST be
+ * chunked.
+ *
+ */
+
+#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( "SDSextendible.h5" );
+const string DATASET_NAME( "ExtendibleArray" );
+const int NX = 10;
+const int NY = 5;
+const int RANK = 2;
+
+int main (void)
+{
+ // Try block to detect exceptions raised by any of the calls inside it
+ try
+ {
+ /*
+ * Create the data space with unlimited dimensions.
+ */
+ hsize_t dims[2] = { 3, 3}; // dataset dimensions at creation
+ hsize_t maxdims[2] = {H5S_UNLIMITED, H5S_UNLIMITED};
+ DataSpace mspace1( RANK, dims, maxdims);
+
+ /*
+ * Create a new file. If file exists its contents will be overwritten.
+ */
+ H5File file( FILE_NAME, H5F_ACC_TRUNC );
+
+ /*
+ * Modify dataset creation properties, i.e. enable chunking.
+ */
+ DSetCreatPropList cparms;
+
+ hsize_t chunk_dims[2] ={2, 5};
+ cparms.setChunk( RANK, chunk_dims );
+
+ /*
+ * Create a new dataset within the file using cparms
+ * creation properties.
+ */
+
+ DataSet dataset = file.createDataSet( DATASET_NAME, PredType::NATIVE_INT, mspace1, cparms);
+
+ /*
+ * Extend the dataset. This call assures that dataset is at least 3 x 3.
+ */
+ hsize_t size[2];
+ size[0] = 3;
+ size[1] = 3;
+ dataset.extend( size );
+
+ /*
+ * Select a hyperslab.
+ */
+ DataSpace fspace1 = dataset.getSpace ();
+ hssize_t offset[2];
+ offset[0] = 0;
+ offset[1] = 0;
+ hsize_t dims1[2] = { 3, 3}; /* data1 dimensions */
+ fspace1.selectHyperslab( H5S_SELECT_SET, dims1, offset );
+
+ /*
+ * Write the data to the hyperslab.
+ */
+ int data1[3][3] = { {1, 1, 1}, /* data to write */
+ {1, 1, 1},
+ {1, 1, 1} };
+ dataset.write( data1, PredType::NATIVE_INT, mspace1, fspace1 );
+
+ /*
+ * Extend the dataset. Dataset becomes 10 x 3.
+ */
+ hsize_t dims2[2] = { 7, 1}; /* data2 dimensions */
+ dims[0] = dims1[0] + dims2[0];
+ size[0] = dims[0];
+ size[1] = dims[1];
+ dataset.extend( size );
+
+ /*
+ * Select a hyperslab.
+ */
+ DataSpace fspace2 = dataset.getSpace ();
+ offset[0] = 3;
+ offset[1] = 0;
+ fspace2.selectHyperslab( H5S_SELECT_SET, dims2, offset );
+
+ /*
+ * Define memory space
+ */
+ DataSpace mspace2( RANK, dims2 );
+
+ /*
+ * Write the data to the hyperslab.
+ */
+ int data2[7] = { 2, 2, 2, 2, 2, 2, 2};
+ dataset.write( data2, PredType::NATIVE_INT, mspace2, fspace2 );
+
+ /*
+ * Extend the dataset. Dataset becomes 10 x 5.
+ */
+ hsize_t dims3[2] = { 2, 2}; /* data3 dimensions */
+ dims[1] = dims1[1] + dims3[1];
+ size[0] = dims[0];
+ size[1] = dims[1];
+ dataset.extend( size );
+
+ /*
+ * Select a hyperslab
+ */
+ DataSpace fspace3 = dataset.getSpace ();
+ offset[0] = 0;
+ offset[1] = 3;
+ fspace3.selectHyperslab( H5S_SELECT_SET, dims3, offset );
+
+ /*
+ * Define memory space.
+ */
+ DataSpace mspace3( RANK, dims3 );
+
+ /*
+ * Write the data to the hyperslab.
+ */
+ int data3[2][2] = { {3, 3}, {3, 3} };
+ dataset.write( data3, PredType::NATIVE_INT, mspace3, fspace3 );
+
+ /*
+ * Read the data from this dataset and display it.
+ */
+ int i, j;
+ int data_out[NX][NY];
+ for (i = 0; i < NX; i++)
+ {
+ for (j = 0; j < NY; j++)
+ data_out[i][j] = 0;
+ }
+ dataset.read( data_out, PredType::NATIVE_INT );
+ /*
+ * Resulting dataset
+ *
+ * 1 1 1 3 3
+ * 1 1 1 3 3
+ * 1 1 1 0 0
+ * 2 0 0 0 0
+ * 2 0 0 0 0
+ * 2 0 0 0 0
+ * 2 0 0 0 0
+ * 2 0 0 0 0
+ * 2 0 0 0 0
+ * 2 0 0 0 0
+ */
+ /*
+ * Display the result.
+ */
+ for (i=0; i < NX; i++)
+ {
+ for(j=0; j < NY; j++)
+ cout << data_out[i][j] << " ";
+ cout << endl;
+ }
+ } // 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 DataSpace operations
+ catch( DataTypeIException error )
+ {
+ error.printError();
+ }
+ return 0;
+}