mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-11-27 02:10:55 +08:00
Purpose: Add new C++ wrappers
Description: Added wrappers for H5Pset_file_space and H5Pget_file_space // Sets the strategy and the threshold value that the library will // will employ in managing file space. void setFileSpace(H5F_file_space_type_t strategy, hsize_t threshold) const; // Returns the strategy that the library uses in managing file space. H5F_file_space_type_t getFileSpaceStrategy() const; // Returns the threshold value that the library uses in tracking free // space sections. hsize_t getFileSpaceThreshold() const; Platforms tested: Linux/32 2.6 (jam) Linux/64 (jelly) Darwin (osx1010test)
This commit is contained in:
parent
fc8866d41e
commit
40b13c7445
@ -294,6 +294,69 @@ unsigned FileCreatPropList::getIstorek() const
|
||||
return( ik );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// Function: FileCreatPropList::setFileSpace
|
||||
///\brief Sets the strategy and the threshold value that the library
|
||||
/// will employ in managing file space.
|
||||
///\param ik - IN: Symbol table tree rank
|
||||
///\param lk - IN: Symbol table node size
|
||||
///\exception H5::PropListIException
|
||||
///\par Description
|
||||
/// If the given strategy is zero, the property will not be
|
||||
/// changed and the existing strategy will be retained.
|
||||
/// If the given threshold value is zero, the property will not be
|
||||
/// changed and the existing threshold will be retained.
|
||||
// Programmer Binh-Minh Ribler - Feb, 2017
|
||||
//--------------------------------------------------------------------------
|
||||
void FileCreatPropList::setFileSpace(H5F_file_space_type_t strategy, hsize_t threshold) const
|
||||
{
|
||||
herr_t ret_value = H5Pset_file_space(id, strategy, threshold);
|
||||
if( ret_value < 0 )
|
||||
{
|
||||
throw PropListIException("FileCreatPropList::setFileSpace",
|
||||
"H5Pset_file_space failed");
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// Function: FileCreatPropList::getFileSpaceStrategy
|
||||
///\brief Returns the strategy that the library uses in managing file space.
|
||||
///\return The strategy value
|
||||
///\exception H5::PropListIException
|
||||
// Programmer Binh-Minh Ribler - Feb, 2017
|
||||
//--------------------------------------------------------------------------
|
||||
H5F_file_space_type_t FileCreatPropList::getFileSpaceStrategy() const
|
||||
{
|
||||
H5F_file_space_type_t strategy = H5F_FILE_SPACE_ALL;
|
||||
herr_t ret_value = H5Pget_file_space(id, &strategy, NULL);
|
||||
if (ret_value < 0)
|
||||
{
|
||||
throw PropListIException("FileCreatPropList::getFileSpaceStrategy",
|
||||
"H5Pget_file_space for strategry failed");
|
||||
}
|
||||
return(strategy);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// Function: FileCreatPropList::getFileSpaceThreshold
|
||||
///\brief Returns the threshold value that the library uses in tracking
|
||||
/// free space sections.
|
||||
///\return The threshold value
|
||||
///\exception H5::PropListIException
|
||||
// Programmer Binh-Minh Ribler - Feb, 2017
|
||||
//--------------------------------------------------------------------------
|
||||
hsize_t FileCreatPropList::getFileSpaceThreshold() const
|
||||
{
|
||||
hsize_t threshold = 0;
|
||||
herr_t ret_value = H5Pget_file_space(id, NULL, &threshold);
|
||||
if (ret_value < 0)
|
||||
{
|
||||
throw PropListIException("FileCreatPropList::getFileSpaceThreshold",
|
||||
"H5Pget_file_space for threshold failed");
|
||||
}
|
||||
return(threshold);
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
// Function: FileCreatPropList destructor
|
||||
///\brief Noop destructor.
|
||||
|
@ -65,6 +65,17 @@ class H5_DLLCPP FileCreatPropList : public PropList {
|
||||
// indexing chunked datasets.
|
||||
void setIstorek( unsigned ik ) const;
|
||||
|
||||
// Sets the strategy and the threshold value that the library will
|
||||
// will employ in managing file space.
|
||||
void setFileSpace(H5F_file_space_type_t strategy, hsize_t threshold) const;
|
||||
|
||||
// Returns the strategy that the library uses in managing file space.
|
||||
H5F_file_space_type_t getFileSpaceStrategy() const;
|
||||
|
||||
// Returns the threshold value that the library uses in tracking free
|
||||
// space sections.
|
||||
hsize_t getFileSpaceThreshold() const;
|
||||
|
||||
///\brief Returns this class name.
|
||||
virtual H5std_string fromClass () const { return("FileCreatPropList"); }
|
||||
|
||||
|
@ -411,6 +411,9 @@ static void test_file_size()
|
||||
|
||||
// use C test utility routine to close property list.
|
||||
H5Pclose(fapl_id);
|
||||
herr_t ret = H5Pclose(fapl_id);
|
||||
if (ret < 0)
|
||||
issue_fail_msg("test_file_size()", __LINE__, __FILE__, "H5Pclose failed");
|
||||
|
||||
} // test_file_size()
|
||||
|
||||
@ -734,9 +737,7 @@ static void test_libver_bounds()
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: test_commonfg
|
||||
*
|
||||
* Purpose: Verify that a file created and modified with the
|
||||
* specified libver bounds has the specified object header
|
||||
* versions for the right objects.
|
||||
* Purpose: Verify that H5File works as a root group.
|
||||
*
|
||||
* Return: None
|
||||
*
|
||||
@ -795,6 +796,77 @@ static void test_commonfg()
|
||||
|
||||
} /* end test_commonfg() */
|
||||
|
||||
const H5std_string FILE7("tfile7.h5");
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: test_filespace_info
|
||||
*
|
||||
* Purpose: Verify that setting and retrieving the file space strategy
|
||||
* and free space section threshold work correctly.
|
||||
*
|
||||
* Return: None
|
||||
*
|
||||
* Programmer: Binh-Minh Ribler
|
||||
* February, 2017
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static void test_filespace_info()
|
||||
{
|
||||
// Output message about test being performed
|
||||
SUBTEST("File space information");
|
||||
|
||||
hid_t fapl_id = h5_fileaccess(); // in h5test.c, returns a file access template
|
||||
hsize_t in_threshold = 2; // Free space section threshold to set */
|
||||
hsize_t out_threshold = 0; // Free space section threshold to get */
|
||||
// File space handling strategy
|
||||
H5F_file_space_type_t in_strategy = H5F_FILE_SPACE_ALL;
|
||||
// File space handling strategy
|
||||
H5F_file_space_type_t out_strategy = H5F_FILE_SPACE_DEFAULT;
|
||||
|
||||
try {
|
||||
// Use the file access template id to create a file access prop.
|
||||
// list object to pass in H5File::H5File
|
||||
FileAccPropList fapl(fapl_id);
|
||||
|
||||
/* Create file-creation proplist */
|
||||
FileCreatPropList fcpl;
|
||||
|
||||
/* Set file space strategy and free space section threshold */
|
||||
fcpl.setFileSpace(in_strategy, in_threshold);
|
||||
|
||||
// Create a file using default properties.
|
||||
H5File file7(FILE7, H5F_ACC_TRUNC, fcpl);
|
||||
|
||||
/* Close the file */
|
||||
file7.close();
|
||||
|
||||
/* Re-open the file */
|
||||
file7.openFile(FILE7, H5F_ACC_RDWR, fapl);
|
||||
|
||||
/* Get the file's creation property */
|
||||
FileCreatPropList fcpl2 = file7.getCreatePlist();
|
||||
|
||||
/* Get and verify the file space info from the creation property list */
|
||||
out_strategy = fcpl2.getFileSpaceStrategy();
|
||||
verify_val(static_cast<unsigned>(out_strategy), static_cast<unsigned>(in_strategy), "FileCreatPropList::getFileSpaceStrategy", __LINE__, __FILE__);
|
||||
|
||||
out_threshold = fcpl2.getFileSpaceThreshold();
|
||||
verify_val(static_cast<unsigned>(out_threshold), static_cast<unsigned>(in_threshold), "FileCreatPropList::getFileSpaceThreshold", __LINE__, __FILE__);
|
||||
|
||||
PASSED();
|
||||
} // end of try block
|
||||
|
||||
catch (Exception& E)
|
||||
{
|
||||
issue_fail_msg("test_filespace_info()", __LINE__, __FILE__, E.getCDetailMsg());
|
||||
}
|
||||
// Close file access template.
|
||||
herr_t ret = H5Pclose(fapl_id);
|
||||
if (ret < 0)
|
||||
issue_fail_msg("test_filespace_info()", __LINE__, __FILE__, "H5Pclose failed");
|
||||
|
||||
} /* test_filespace_info() */
|
||||
|
||||
/*-------------------------------------------------------------------------
|
||||
* Function: test_file
|
||||
*
|
||||
@ -821,7 +893,8 @@ void test_file()
|
||||
test_file_name(); // Test getting file's name
|
||||
test_file_attribute(); // Test file attribute feature
|
||||
test_libver_bounds(); // Test format version
|
||||
test_commonfg();
|
||||
test_commonfg(); // Test H5File as a root group
|
||||
test_filespace_info(); // Test file space info
|
||||
} // test_file()
|
||||
|
||||
|
||||
@ -849,4 +922,5 @@ void cleanup_file()
|
||||
HDremove(FILE4.c_str());
|
||||
HDremove(FILE5.c_str());
|
||||
HDremove(FILE6.c_str());
|
||||
HDremove(FILE7.c_str());
|
||||
} // cleanup_file
|
||||
|
Loading…
Reference in New Issue
Block a user