[svn-r6990] Purpose:

Bug fix and minor code enhancement

Description:
    Missing methods to read/write C++ String for an attribute and
    a dataset.

Solution:
    Added overloaded functions read and write to H5::Attribute and
    H5::DataSet.

    Also, added another constructor StrType so the need to separately
    set the length of the string type can be eliminated.  It's minor
    but convenient.

    Made some minor changes to make error messages more readable.

Platforms:
    SunOS 5.7 (arabica)
    Linux 2.4 (eirene)
    IRIX 6.5.11 (modi4)
    HPUX 11.00 (kelgia)
This commit is contained in:
Binh-Minh Ribler
2003-06-06 23:02:11 -05:00
parent 4e4ab0d320
commit 5d1b56cb81
12 changed files with 83 additions and 25 deletions

View File

@@ -156,6 +156,20 @@ void DataSet::read( void* buf, const DataType& mem_type, const DataSpace& mem_sp
}
}
void DataSet::read( string& strg, const DataType& mem_type, const DataSpace& mem_space, const DataSpace& file_space, const DSetMemXferPropList& xfer_plist ) const
{
// Allocate C character string for reading
size_t size = mem_type.getSize();
char* strg_C = new char[size+1]; // temporary C-string for C API
// Use the overloaded member to read
read(strg_C, mem_type, mem_space, file_space, xfer_plist);
// Get the String and clean up
strg = strg_C;
delete strg_C;
}
// Writes raw data from an application buffer buffer to a dataset,
// converting from memory datatype and dataspace to file datatype
// and dataspace.
@@ -174,6 +188,16 @@ void DataSet::write( const void* buf, const DataType& mem_type, const DataSpace&
}
}
void DataSet::write( const string& strg, const DataType& mem_type, const DataSpace& mem_space, const DataSpace& file_space, const DSetMemXferPropList& xfer_plist ) const
{
// Convert string to C-string
const char* strg_C;
strg_C = strg.c_str(); // strg_C refers to the contents of strg as a C-str
// Use the overloaded member
write(strg_C, mem_type, mem_space, file_space, xfer_plist);
}
// Iterates over all selected elements in a dataspace.
int DataSet::iterateElems( void* buf, const DataType& type, const DataSpace& space, H5D_operator_t op, void* op_data )
{
@@ -262,7 +286,7 @@ DataSet::~DataSet()
try {
resetIdComponent( this ); }
catch (Exception close_error) { // thrown by p_close
cerr << "DataSet::~DataSet" << close_error.getDetailMsg() << endl;
cerr << "DataSet::~DataSet - " << close_error.getDetailMsg() << endl;
}
}