function h5ex_d_alloc %************************************************************************** % % This example shows how to set the space allocation time % for a dataset. The program first creates two datasets, % one with the default allocation time (late) and one with % early allocation time, and displays whether each has been % allocated and their allocation size. Next, it writes data % to the datasets, and again displays whether each has been % allocated and their allocation size. % % This file is intended for use with HDF5 Library version 1.8 %************************************************************************** FILE='h5ex_d_alloc.h5'; DATASET1='DS1'; DATASET2='DS2'; DIM0=4; DIM1=7; dims = [DIM0, DIM1]; % % Initialize data. % wdata = int32(zeros(DIM0,DIM1)); for i = 1:DIM0 for j = 1:DIM1 ii=i-1; jj=j-1; wdata(i,j) = ii * jj - jj; end end % %% Create a new file using the default properties. % file = H5F.create (FILE,'H5F_ACC_TRUNC','H5P_DEFAULT','H5P_DEFAULT'); % % Create dataspace. Setting maximum size to [] sets the maximum % size to be the current size. Remember to flip the dataspace so that % we don't have to transpose the data. % space = H5S.create_simple (2, fliplr(dims), []); % % Create the dataset creation property list, and set the chunk % size. % dcpl = H5P.create('H5P_DATASET_CREATE'); % % Set the allocation time to "early". This way we can be sure % that reading from the dataset immediately after creation will % return the fill value. % H5P.set_alloc_time (dcpl, 'H5D_ALLOC_TIME_EARLY'); fprintf ('Creating datasets...\n'); fprintf ('%s has allocation time H5D_ALLOC_TIME_LATE\n', DATASET1); fprintf ('%s has allocation time H5D_ALLOC_TIME_EARLY\n\n', DATASET2); % % Create the dataset using the dataset creation property list. % dset1 = H5D.create (file, DATASET1, 'H5T_STD_I32LE', space, 'H5P_DEFAULT'); dset2 = H5D.create (file, DATASET2, 'H5T_STD_I32LE', space, dcpl); % % Retrieve and print space status and storage size for dset1. % H5D_SPACE_STATUS_ALLOCATED = H5ML.get_constant_value('H5D_SPACE_STATUS_ALLOCATED'); space_status = H5D.get_space_status (dset1); storage_size = H5D.get_storage_size (dset1); if ( space_status == H5D_SPACE_STATUS_ALLOCATED ) fprintf ('Space for %s has been allocated.\n', DATASET1 ); else fprintf ('Space for %s has not been allocated.\n', DATASET1 ); end fprintf ('Storage size for %s is: %ld bytes.\n', DATASET1, storage_size); % % Retrieve and print space status and storage size for dset2. % space_status = H5D.get_space_status (dset2); storage_size = H5D.get_storage_size (dset2); if ( space_status == H5D_SPACE_STATUS_ALLOCATED ) fprintf ('Space for %s has been allocated.\n', DATASET2 ); else fprintf ('Space for %s has not been allocated.\n', DATASET2 ); end fprintf ('Storage size for %s is: %ld bytes.\n', DATASET2, storage_size); fprintf ('\nWriting data...\n\n'); % % Write the data to the datasets. % H5D.write (dset1,'H5T_NATIVE_INT','H5S_ALL','H5S_ALL','H5P_DEFAULT',wdata); H5D.write (dset2,'H5T_NATIVE_INT','H5S_ALL','H5S_ALL','H5P_DEFAULT',wdata); % %% Retrieve and print space status and storage size for dset1. % space_status = H5D.get_space_status (dset1); storage_size = H5D.get_storage_size (dset1); if ( space_status == H5D_SPACE_STATUS_ALLOCATED ) fprintf ('Space for %s has been allocated.\n', DATASET1 ); else fprintf ('Space for %s has not been allocated.\n', DATASET1 ); end fprintf ('Storage size for %s is: %ld bytes.\n', DATASET1, storage_size); % % Retrieve and print space status and storage size for dset2. % space_status = H5D.get_space_status (dset2); storage_size = H5D.get_storage_size (dset2); if ( space_status == H5D_SPACE_STATUS_ALLOCATED ) fprintf ('Space for %s has been allocated.\n', DATASET2 ); else fprintf ('Space for %s has not been allocated.\n', DATASET2 ); end fprintf ('Storage size for %s is: %ld bytes.\n', DATASET2, storage_size); % % Close and release resources. % H5P.close (dcpl); H5D.close (dset1); H5D.close (dset2); H5S.close (space); H5F.close (file);