[svn-r3122] Purpose:
Fix and improve
Description:
- Put functions that are common to H5File and Group into a
prototype class, CommonFG. I didn't do that before because
of the fear of the consequences of multiple inheritance, since
H5File and Group already inherit from different super classes.
I recently read a C++ book and learned to use MI more safely.
This change reduced some more of code redundancy.
- Added missing const to some function parameters
Platforms tested:
Solaris/CC 5.0 (arabica)
This commit is contained in:
@@ -1,12 +1,7 @@
|
||||
/*
|
||||
These functions provide code that are common to both H5File and Group.
|
||||
Some of the member functions of these two classes call a common function
|
||||
and provide it a file or group id to perform a task that can be done on
|
||||
either an H5File or Group instance. 10/31/00
|
||||
|
||||
The name of the functions ends with a T because these functions were
|
||||
template functions until it was realized that more than one of our
|
||||
supported platforms have not supported template functions.
|
||||
This class is a prototype class. Most of its member functions are those
|
||||
that are common to both H5File and Group. H5File and Group will inherit
|
||||
these functions.
|
||||
*/
|
||||
|
||||
#ifndef _CommonFG_H
|
||||
@@ -16,45 +11,109 @@ supported platforms have not supported template functions.
|
||||
namespace H5 {
|
||||
#endif
|
||||
|
||||
// Creates a new group at this location which can be a file or another group.
|
||||
Group createGroupT( const hid_t loc_id, const string name, size_t size_hint );
|
||||
class Group;
|
||||
class H5File;
|
||||
class CommonFG {
|
||||
public:
|
||||
// Creates a new group at this location which can be a file or another group.
|
||||
Group createGroup( const string& name, size_t size_hint = 0 ) const;
|
||||
Group createGroup( const char* name, size_t size_hint = 0 ) const;
|
||||
|
||||
// Opens an existing group in a location which can be a file or another group
|
||||
Group openGroupT( const hid_t loc_id, const string name );
|
||||
// Opens an existing group in a location which can be a file or another group
|
||||
Group openGroup( const string& name ) const;
|
||||
Group openGroup( const char* name ) const;
|
||||
|
||||
// Creates a new dataset at this location.
|
||||
DataSet createDataSetT( const hid_t loc_id, const string name, const DataType& data_type, const DataSpace& data_space, const DSetCreatPropList& create_plist );
|
||||
// Creates a new dataset at this location.
|
||||
DataSet createDataSet( const string& name, const DataType& data_type, const DataSpace& data_space, const DSetCreatPropList& create_plist = DSetCreatPropList::DEFAULT ) const;
|
||||
DataSet createDataSet( const char* name, const DataType& data_type, const DataSpace& data_space, const DSetCreatPropList& create_plist = DSetCreatPropList::DEFAULT ) const;
|
||||
|
||||
// Opens an existing dataset at this location.
|
||||
DataSet openDataSetT( const hid_t loc_id, const string name );
|
||||
// Opens an existing dataset at this location.
|
||||
DataSet openDataSet( const string& name ) const;
|
||||
DataSet openDataSet( const char* name ) const;
|
||||
|
||||
// Creates a link of the specified type from new_name to current_name;
|
||||
// both names are interpreted relative to the specified location id
|
||||
void linkT( const hid_t loc_id, H5G_link_t link_type, const string curr_name, const string new_name );
|
||||
// Creates a link of the specified type from new_name to current_name;
|
||||
// both names are interpreted relative to the specified location id
|
||||
void link( H5G_link_t link_type, const string& curr_name, const string& new_name ) const;
|
||||
void link( H5G_link_t link_type, const char* curr_name, const char* new_name ) const;
|
||||
|
||||
// Removes the specified name at this location.
|
||||
void unlinkT( const hid_t loc_id, const string name );
|
||||
// Removes the specified name at this location.
|
||||
void unlink( const string& name ) const;
|
||||
void unlink( const char* name ) const;
|
||||
|
||||
// Renames an object at this location.
|
||||
void moveT( const hid_t loc_id, const string src, const string dst );
|
||||
// Get id of the location, either group or file - pure virtual so
|
||||
// the subclass can get the correct id
|
||||
virtual hid_t getLocId() const = 0;
|
||||
|
||||
// Returns information about an object
|
||||
void getObjinfoT( const hid_t loc_id, const string name, hbool_t follow_link, H5G_stat_t& statbuf );
|
||||
// Renames an object at this location.
|
||||
void move( const string& src, const string& dst ) const;
|
||||
void move( const char* src, const char* dst ) const;
|
||||
|
||||
// Returns the name of the object that the symbolic link points to.
|
||||
string getLinkvalT( const hid_t loc_id, const string name, size_t size );
|
||||
// Returns information about an object
|
||||
void getObjinfo( const string& name, hbool_t follow_link, H5G_stat_t& statbuf ) const;
|
||||
void getObjinfo( const char* name, hbool_t follow_link, H5G_stat_t& statbuf ) const;
|
||||
|
||||
// Sets the comment for an object specified by its name
|
||||
void setCommentT( const hid_t loc_id, const string name, const string comment );
|
||||
// Returns the name of the object that the symbolic link points to.
|
||||
string getLinkval( const string& name, size_t size ) const;
|
||||
string getLinkval( const char* name, size_t size ) const;
|
||||
|
||||
// Retrieves comment for specified object
|
||||
string getCommentT( const hid_t loc_id, const string name, size_t bufsize );
|
||||
// Sets the comment for an object specified by its name
|
||||
void setComment( const string& name, const string& comment ) const;
|
||||
void setComment( const char* name, const char* comment ) const;
|
||||
|
||||
// Mounts the file 'child' onto this group
|
||||
void mountT( const hid_t loc_id, const string name, hid_t child_id, PropList& plist );
|
||||
// Retrieves comment for specified object
|
||||
string getComment( const string& name, size_t bufsize ) const;
|
||||
string getComment( const char* name, size_t bufsize ) const;
|
||||
|
||||
// Mounts the file 'child' onto this group
|
||||
void mount( const string& name, H5File& child, PropList& plist ) const;
|
||||
void mount( const char* name, H5File& child, PropList& plist) const;
|
||||
|
||||
// Unmounts the file named 'name' from this parent group
|
||||
void unmount( const string& name ) const;
|
||||
void unmount( const char* name ) const;
|
||||
|
||||
// Iterates over the elements of this group - not implemented in
|
||||
// C++ style yet
|
||||
int iterateElems( const string& name, int *idx, H5G_iterate_t op, void *op_data );
|
||||
int iterateElems( const char* name, int *idx, H5G_iterate_t op, void *op_data );
|
||||
|
||||
// Opens a generic named datatype in this file
|
||||
DataType openDataType( const string& name ) const;
|
||||
DataType openDataType( const char* name ) const;
|
||||
|
||||
// Opens a named enumeration datatype in this file
|
||||
EnumType openEnumType( const string& name ) const;
|
||||
EnumType openEnumType( const char* name ) const;
|
||||
|
||||
// Opens a named compound datatype in this file
|
||||
CompType openCompType( const string& name ) const;
|
||||
CompType openCompType( const char* name ) const;
|
||||
|
||||
// Opens a named integer datatype in this file
|
||||
IntType openIntType( const string& name ) const;
|
||||
IntType openIntType( const char* name ) const;
|
||||
|
||||
// Opens a named floating-point datatype in this file
|
||||
FloatType openFloatType( const string& name ) const;
|
||||
FloatType openFloatType( const char* name ) const;
|
||||
|
||||
// Opens a named string datatype in this file
|
||||
StrType openStrType( const string& name ) const;
|
||||
StrType openStrType( const char* name ) const;
|
||||
|
||||
// for H5File and Group to throw appropriate exception
|
||||
virtual void throwException() const = 0;
|
||||
|
||||
CommonFG();
|
||||
|
||||
virtual ~CommonFG();
|
||||
|
||||
private:
|
||||
// Common code for member functions openXxxType
|
||||
hid_t p_openDataType( const char* name ) const;
|
||||
|
||||
}; // end of CommonFG declaration
|
||||
|
||||
// Unmounts the file named 'name' from this parent group
|
||||
void unmountT( const hid_t loc_id, const string name );
|
||||
#ifndef H5_NO_NAMESPACE
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include "H5StrType.h"
|
||||
#include "H5CompType.h"
|
||||
#include "H5DataSet.h"
|
||||
#include "H5CommonFG.h"
|
||||
#include "H5Group.h"
|
||||
#include "H5File.h"
|
||||
#include "H5Library.h"
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
namespace H5 {
|
||||
#endif
|
||||
|
||||
class H5File : public IdComponent {
|
||||
class H5File : public IdComponent, public CommonFG {
|
||||
public:
|
||||
// copy constructor: makes a copy of the original H5File object.
|
||||
H5File(const H5File& original );
|
||||
@@ -18,17 +18,11 @@ class H5File : public IdComponent {
|
||||
const FileCreatPropList& create_plist = FileCreatPropList::DEFAULT,
|
||||
const FileAccPropList& access_plist = FileAccPropList::DEFAULT );
|
||||
|
||||
// Sets and gets H5File's data member
|
||||
//void setId( hid_t new_file_id );
|
||||
//hid_t getId() const;
|
||||
// Gets the file id
|
||||
virtual hid_t getLocId() const;
|
||||
|
||||
// Creates a new group in this file
|
||||
Group createGroup( const string& name, size_t size_hint = 0 ) const;
|
||||
Group createGroup( const char* name, size_t size_hint = 0 ) const;
|
||||
|
||||
// Opens an existing group in this file
|
||||
Group openGroup( const string& name ) const;
|
||||
Group openGroup( const char* name ) const;
|
||||
// Throw file exception
|
||||
virtual void throwException() const;
|
||||
|
||||
// Determines if a file, specified by its name, is in HDF5 format
|
||||
static bool isHdf5(const string& name );
|
||||
@@ -37,90 +31,18 @@ class H5File : public IdComponent {
|
||||
// Reopens this file
|
||||
void reopen();
|
||||
|
||||
// Creates a new dataset in this file
|
||||
DataSet createDataSet( const string& name, const DataType& data_type, const DataSpace& data_space, const DSetCreatPropList& create_plist = DSetCreatPropList::DEFAULT ) const;
|
||||
DataSet createDataSet( const char* name, const DataType& data_type, const DataSpace& data_space, const DSetCreatPropList& create_plist = DSetCreatPropList::DEFAULT ) const;
|
||||
|
||||
// Opens a existing dataset in this file
|
||||
DataSet openDataSet( const string& name ) const;
|
||||
DataSet openDataSet( const char* name ) const;
|
||||
|
||||
// Opens a generic named datatype in this file
|
||||
DataType openDataType( const string& name ) const;
|
||||
DataType openDataType( const char* name ) const;
|
||||
|
||||
// Opens a named enumeration datatype in this file
|
||||
EnumType openEnumType( const string& name ) const;
|
||||
EnumType openEnumType( const char* name ) const;
|
||||
|
||||
// Opens a named compound datatype in this file
|
||||
CompType openCompType( const string& name ) const;
|
||||
CompType openCompType( const char* name ) const;
|
||||
|
||||
// Opens a named integer datatype in this file
|
||||
IntType openIntType( const string& name ) const;
|
||||
IntType openIntType( const char* name ) const;
|
||||
|
||||
// Opens a named floating-point datatype in this file
|
||||
FloatType openFloatType( const string& name ) const;
|
||||
FloatType openFloatType( const char* name ) const;
|
||||
|
||||
// Opens a named string datatype in this file
|
||||
StrType openStrType( const string& name ) const;
|
||||
StrType openStrType( const char* name ) const;
|
||||
|
||||
// Gets the creation property list of this file
|
||||
FileCreatPropList getCreatePlist() const;
|
||||
|
||||
// Gets the access property list of this file
|
||||
FileAccPropList getAccessPlist() const;
|
||||
|
||||
// Creates a link from new_name to current_name in this file
|
||||
void link( H5G_link_t link_type, const string& curr_name, const string& new_name ) const;
|
||||
void link( H5G_link_t link_type, const char* curr_name, const char* new_name ) const;
|
||||
|
||||
// Removes a name linked to this file
|
||||
void unlink( const string& name ) const;
|
||||
void unlink( const char* name ) const;
|
||||
|
||||
// Renames an object within this file
|
||||
void move( const string& src, const string& dst ) const;
|
||||
void move( const char* src, const char* dst ) const;
|
||||
|
||||
// Retrieves information about an object given its name and link
|
||||
void getObjinfo( const string& name, hbool_t follow_link, H5G_stat_t& statbuf ) const;
|
||||
void getObjinfo( const char* name, hbool_t follow_link, H5G_stat_t& statbuf ) const;
|
||||
|
||||
// Returns the name of the object that the symbolic link 'name'
|
||||
// points to
|
||||
string getLinkval( const string& name, size_t size ) const;
|
||||
string getLinkval( const char* name, size_t size ) const;
|
||||
|
||||
// Sets the comment for an object specified by its name
|
||||
void setComment( const string& name, const string& comment ) const;
|
||||
void setComment( const char* name, const char* comment ) const;
|
||||
|
||||
// Gets the comment of an object specified by its name
|
||||
string getComment( const string& name, size_t bufsize ) const;
|
||||
string getComment( const char* name, size_t bufsize ) const;
|
||||
|
||||
// Mounts a file, specified by its name, to this file
|
||||
void mount( const string& name, H5File& child, PropList& plist ) const;
|
||||
void mount( const char* name, H5File& child, PropList& plist ) const;
|
||||
|
||||
// Unmounts a file, specified by its name, from this file
|
||||
void unmount( const string& name ) const;
|
||||
void unmount( const char* name ) const;
|
||||
|
||||
// Used by the API to appropriately close a file
|
||||
void p_close() const;
|
||||
|
||||
virtual ~H5File();
|
||||
|
||||
private:
|
||||
// Common code for member functions openXxxType - templates, maybe???
|
||||
hid_t p_openDataType( const char* name ) const;
|
||||
|
||||
// This function is private and contains common code between the
|
||||
// constructors taking a string or a char*
|
||||
void getFile( const char* name, unsigned int flags, const FileCreatPropList& create_plist, const FileAccPropList& access_plist );
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
namespace H5 {
|
||||
#endif
|
||||
|
||||
class Group : public H5Object {
|
||||
class Group : public H5Object, public CommonFG {
|
||||
public:
|
||||
// default constructor
|
||||
Group();
|
||||
@@ -13,86 +13,11 @@ class Group : public H5Object {
|
||||
// Copy constructor: makes a copy of the original object
|
||||
Group( const Group& original );
|
||||
|
||||
// Creates a group in this group
|
||||
Group createGroup( const string& name, size_t size_hint = 0 );
|
||||
Group createGroup( const char* name, size_t size_hint = 0 );
|
||||
// for CommonFG to get the file id
|
||||
virtual hid_t getLocId() const;
|
||||
|
||||
// Opens an existing group in this group
|
||||
Group openGroup( const string& name );
|
||||
Group openGroup( const char* name );
|
||||
|
||||
// Creates a dataset in this group
|
||||
DataSet createDataSet( const string& name, const DataType& data_type, const DataSpace& data_space, const DSetCreatPropList& create_plist = DSetCreatPropList::DEFAULT );
|
||||
DataSet createDataSet( const char* name, const DataType& data_type, const DataSpace& data_space, const DSetCreatPropList& create_plist = DSetCreatPropList::DEFAULT );
|
||||
|
||||
// Opens a dataset in this group
|
||||
DataSet openDataSet( const string& name );
|
||||
DataSet openDataSet( const char* name );
|
||||
|
||||
// Opens a generic named datatype in this group.
|
||||
DataType openDataType( const string& name ) const;
|
||||
DataType openDataType( const char* name ) const;
|
||||
|
||||
// Opens a named enumeration datatype in this group.
|
||||
EnumType openEnumType( const string& name ) const;
|
||||
EnumType openEnumType( const char* name ) const;
|
||||
|
||||
// Opens a named compound datatype in this group.
|
||||
CompType openCompType( const string& name ) const;
|
||||
CompType openCompType( const char* name ) const;
|
||||
|
||||
// Opens a named integer datatype in this group.
|
||||
IntType openIntType( const string& name ) const;
|
||||
IntType openIntType( const char* name ) const;
|
||||
|
||||
// Opens a named floating-point datatype in this group.
|
||||
FloatType openFloatType( const string& name ) const;
|
||||
FloatType openFloatType( const char* name ) const;
|
||||
|
||||
// Opens a named string datatype in this group.
|
||||
StrType openStrType( const string& name ) const;
|
||||
StrType openStrType( const char* name ) const;
|
||||
|
||||
// Creates a link from new_name to current_name in this group.
|
||||
void link( H5G_link_t link_type, const string& curr_name, const string& new_name );
|
||||
void link( H5G_link_t link_type, const char* curr_name, const char* new_name );
|
||||
|
||||
// Removes a name linked to this group.
|
||||
void unlink( const string& name );
|
||||
void unlink( const char* name );
|
||||
|
||||
// Iterates over the elements of this group - not implemented in
|
||||
// C++ style yet
|
||||
int iterateElems( const string& name, int *idx, H5G_iterate_t op, void *op_data );
|
||||
int iterateElems( const char* name, int *idx, H5G_iterate_t op, void *op_data );
|
||||
|
||||
// Renames an object within this group.
|
||||
void move( const string& src, const string& dst );
|
||||
void move( const char* src, const char* dst );
|
||||
|
||||
// Retrieves information about the named object.
|
||||
void getObjinfo( const string& name, hbool_t follow_link, H5G_stat_t& statbuf );
|
||||
void getObjinfo( const char* name, hbool_t follow_link, H5G_stat_t& statbuf );
|
||||
|
||||
// Returns the name of the object that the symbolic link points to.
|
||||
string getLinkval( const string& name, size_t size );
|
||||
string getLinkval( const char* name, size_t size );
|
||||
|
||||
// Sets comment for an object specified by its name.
|
||||
void setComment( const string& name, const string& comment );
|
||||
void setComment( const char* name, const char* comment );
|
||||
|
||||
// Gets the comment of an object specified by its name.
|
||||
string getComment( const string& name, size_t bufsize );
|
||||
string getComment( const char* name, size_t bufsize );
|
||||
|
||||
// Mounts the file 'child' onto this group.
|
||||
void mount( const string& name, H5File& child, PropList& plist);
|
||||
void mount( const char* name, H5File& child, PropList& plist);
|
||||
|
||||
// Unmounts the file named 'name' from this parent group.
|
||||
void unmount( const string& name );
|
||||
void unmount( const char* name );
|
||||
// Throw group exception
|
||||
virtual void throwException() const;
|
||||
|
||||
// Used by the API to appropriately close a group
|
||||
void p_close() const;
|
||||
@@ -104,10 +29,6 @@ class Group : public H5Object {
|
||||
// to return a Group; will not be published; maybe, use friend???)
|
||||
Group( const hid_t group_id );
|
||||
|
||||
private:
|
||||
// Common code for member functions openXxxType - templates, maybe???
|
||||
hid_t p_openDataType( const char* name ) const;
|
||||
|
||||
};
|
||||
#ifndef H5_NO_NAMESPACE
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ class IdComponent {
|
||||
public:
|
||||
// Parent classes must reset the current IdComponent copy
|
||||
// before setting new id to control reference count
|
||||
void setId( const hid_t new_id );
|
||||
void setId( hid_t new_id );
|
||||
|
||||
// Pure virtual function so appropriate close function can
|
||||
// be called by subclasses' for the corresponding object
|
||||
|
||||
@@ -5,4 +5,3 @@
|
||||
#endif
|
||||
|
||||
#include <hdf5.h>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user