[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:
Binh-Minh Ribler
2000-12-13 08:06:57 -05:00
parent 9cbeb3c53f
commit 1aec17231d
6 changed files with 106 additions and 204 deletions

View File

@@ -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

View File

@@ -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"

View File

@@ -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 );

View File

@@ -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
}

View File

@@ -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

View File

@@ -5,4 +5,3 @@
#endif
#include <hdf5.h>