[svn-r4605]

Purpose:
    Bug fix

Description:
    Add the overloaded member function Attribute::getName to return
    the attribute name's length as in C API.  This functionality was
    missing.  Note that the current getName that returns "string"
    is not removed, for different way of using getName.

Platforms tested:
    SunOS 5.7 (arabica)
    Windows 98
This commit is contained in:
Binh-Minh Ribler 2001-11-14 17:14:05 -05:00
parent c84ad4179d
commit 5077ac0c90
2 changed files with 17 additions and 7 deletions

View File

@ -76,23 +76,32 @@ hid_t Attribute::p_getType() const
}
}
// Gets the name of this attribute.
string Attribute::getName( size_t buf_size ) const
// Gets the name of this attribute, returning its length.
ssize_t Attribute::getName( size_t buf_size, string& attr_name ) const
{
char* name_C = new char[buf_size+1]; // temporary C-string for C API
// Calls C routine H5Aget_name to get the name of the attribute
herr_t name_size = H5Aget_name( id, buf_size, name_C );
ssize_t name_size = H5Aget_name( id, buf_size, name_C );
// If H5Aget_name returns a negative value, raise an exception,
if( name_size < 0 )
{
throw AttributeIException("Attribute::getName", "H5Aget_name failed");
}
// otherwise, create the string to hold the attribute name and return it
string name = string( name_C );
// otherwise, convert the C string attribute name and return
attr_name = string( name_C );
delete name_C;
return( name );
return( name_size );
}
// Gets the name of this attribute, returning the name, not the length.
string Attribute::getName( size_t buf_size ) const
{
string attr_name;
ssize_t name_size = getName( buf_size, attr_name );
return( attr_name );
// let caller catch exception if any
}
// This private function calls the C API H5Aclose to close this attribute.

View File

@ -18,7 +18,8 @@ class Attribute : public AbstractDs {
virtual DataSpace getSpace() const;
// Gets the name of this attribute.
string getName( size_t buf_size ) const;
ssize_t getName( size_t buf_size, string& attr_name ) const;
string getName( size_t buf_size ) const; // returns name, not its length
// do not inherit iterateAttrs from H5Object
int iterateAttrs() { return 0; }