summaryrefslogtreecommitdiffstats
path: root/c++/src
diff options
context:
space:
mode:
Diffstat (limited to 'c++/src')
-rw-r--r--c++/src/H5Attribute.cpp31
-rw-r--r--c++/src/H5Attribute.h2
-rw-r--r--c++/src/H5DataSet.cpp26
-rw-r--r--c++/src/H5DataSet.h4
-rw-r--r--c++/src/H5DataSpace.cpp8
-rw-r--r--c++/src/H5DataType.cpp2
-rw-r--r--c++/src/H5Exception.cpp10
-rw-r--r--c++/src/H5Exception.h7
-rw-r--r--c++/src/H5File.cpp2
-rw-r--r--c++/src/H5Group.cpp2
-rw-r--r--c++/src/H5StrType.cpp11
-rw-r--r--c++/src/H5StrType.h3
12 files changed, 83 insertions, 25 deletions
diff --git a/c++/src/H5Attribute.cpp b/c++/src/H5Attribute.cpp
index 09e53d3..5c9dfb3 100644
--- a/c++/src/H5Attribute.cpp
+++ b/c++/src/H5Attribute.cpp
@@ -52,6 +52,33 @@ void Attribute::write( const DataType& mem_type, const void *buf ) const
}
}
+void Attribute::write( const DataType& mem_type, const string& strg ) 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
+
+ herr_t ret_value = H5Awrite( id, mem_type.getId(), strg_C );
+ if( ret_value < 0 )
+ {
+ throw AttributeIException("Attribute::write", "H5Awrite failed");
+ }
+}
+
+// Reads data from this attribute.
+void Attribute::read( const DataType& mem_type, string& strg ) const
+{
+ size_t size = mem_type.getSize();
+ char* strg_C = new char[size+1]; // temporary C-string for C API
+ herr_t ret_value = H5Aread( id, mem_type.getId(), strg_C );
+ if( ret_value < 0 )
+ {
+ throw AttributeIException("Attribute::read", "H5Aread failed");
+ }
+ strg = strg_C;
+ delete strg_C;
+}
+
// Reads data from this attribute.
void Attribute::read( const DataType& mem_type, void *buf ) const
{
@@ -109,7 +136,7 @@ ssize_t Attribute::getName( size_t buf_size, string& attr_name ) const
throw AttributeIException("Attribute::getName", "H5Aget_name failed");
}
// otherwise, convert the C string attribute name and return
- attr_name = string( name_C );
+ attr_name = name_C;
delete name_C;
return( name_size );
}
@@ -145,7 +172,7 @@ Attribute::~Attribute()
try {
resetIdComponent( this ); }
catch (Exception close_error) { // thrown by p_close
- cerr << "Attribute::~Attribute" << close_error.getDetailMsg() << endl;
+ cerr << "Attribute::~Attribute - " << close_error.getDetailMsg() << endl;
}
}
diff --git a/c++/src/H5Attribute.h b/c++/src/H5Attribute.h
index 2725242..7053f8c 100644
--- a/c++/src/H5Attribute.h
+++ b/c++/src/H5Attribute.h
@@ -24,9 +24,11 @@ class H5_DLLCPP Attribute : public AbstractDs {
public:
// Writes data to this attribute.
void write(const DataType& mem_type, const void *buf ) const;
+ void write(const DataType& mem_type, const string& strg ) const;
// Reads data from this attribute.
void read( const DataType& mem_type, void *buf ) const;
+ void read( const DataType& mem_type, string& strg ) const;
// Gets a copy of the dataspace for this attribute.
virtual DataSpace getSpace() const;
diff --git a/c++/src/H5DataSet.cpp b/c++/src/H5DataSet.cpp
index 5eb640c..84bed5c 100644
--- a/c++/src/H5DataSet.cpp
+++ b/c++/src/H5DataSet.cpp
@@ -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;
}
}
diff --git a/c++/src/H5DataSet.h b/c++/src/H5DataSet.h
index c66a21c..9f01eb4 100644
--- a/c++/src/H5DataSet.h
+++ b/c++/src/H5DataSet.h
@@ -33,7 +33,7 @@ class H5_DLLCPP DataSet : public AbstractDs {
// Gets the storage size of this dataset.
hsize_t getStorageSize() const;
- // - C version not yet implemented??
+ // not yet implemented??
hsize_t getVlenBufSize( DataType& type, DataSpace& space ) const;
void vlenReclaim( DataType& type, DataSpace& space, DSetMemXferPropList& xfer_plist, void* buf ) const;
@@ -41,11 +41,13 @@ class H5_DLLCPP DataSet : public AbstractDs {
// The memory and file dataspaces and the transferring property list
// can be defaults.
void read( void* buf, const DataType& mem_type, const DataSpace& mem_space = DataSpace::ALL, const DataSpace& file_space = DataSpace::ALL, const DSetMemXferPropList& xfer_plist = DSetMemXferPropList::DEFAULT ) const;
+ void read( string& buf, const DataType& mem_type, const DataSpace& mem_space = DataSpace::ALL, const DataSpace& file_space = DataSpace::ALL, const DSetMemXferPropList& xfer_plist = DSetMemXferPropList::DEFAULT ) const;
// Writes the buffered data to this dataset.
// The memory and file dataspaces and the transferring property list
// can be defaults.
void write( const void* buf, const DataType& mem_type, const DataSpace& mem_space = DataSpace::ALL, const DataSpace& file_space = DataSpace::ALL, const DSetMemXferPropList& xfer_plist = DSetMemXferPropList::DEFAULT ) const;
+ void write( const string& buf, const DataType& mem_type, const DataSpace& mem_space = DataSpace::ALL, const DataSpace& file_space = DataSpace::ALL, const DSetMemXferPropList& xfer_plist = DSetMemXferPropList::DEFAULT ) const;
// Iterates the selected elements in the specified dataspace - not implemented in C++ style yet
int iterateElems( void* buf, const DataType& type, const DataSpace& space, H5D_operator_t op, void* op_data = NULL );
diff --git a/c++/src/H5DataSpace.cpp b/c++/src/H5DataSpace.cpp
index c6c64a8..5921274 100644
--- a/c++/src/H5DataSpace.cpp
+++ b/c++/src/H5DataSpace.cpp
@@ -57,7 +57,11 @@ DataSpace::DataSpace( int rank, const hsize_t * dims, const hsize_t * maxdims) :
/* Constructor that takes an existing dataspace id
Description:
- Uses an HDF5 id to create a DataSpace identifier instance. This id can be either an existing dataspace id or a default dataspace id. Design note: in the case of default dataspace, the identifier still has reference counter; the p_close function will take care of not to call H5Sclose on the default id.
+ Uses an HDF5 id to create a DataSpace identifier instance.
+ This id can be either an existing dataspace id or a default
+ dataspace id. Design note: in the case of default dataspace,
+ the identifier still has reference counter; the p_close function
+ will take care of not to call H5Sclose on the default id.
*/
DataSpace::DataSpace( const hid_t space_id ) : IdComponent( space_id ) {}
@@ -361,7 +365,7 @@ DataSpace::~DataSpace()
try {
resetIdComponent( this ); }
catch (Exception close_error) { // thrown by p_close
- cerr << "DataSpace::~DataSpace" << close_error.getDetailMsg() << endl;
+ cerr << "DataSpace::~DataSpace - " << close_error.getDetailMsg() << endl;
}
}
diff --git a/c++/src/H5DataType.cpp b/c++/src/H5DataType.cpp
index aba1949..290ebb7 100644
--- a/c++/src/H5DataType.cpp
+++ b/c++/src/H5DataType.cpp
@@ -357,7 +357,7 @@ DataType::~DataType()
try {
resetIdComponent( this ); }
catch (Exception close_error) { // thrown by p_close
- cerr << "DataType::~DataType" << close_error.getDetailMsg() << endl;
+ cerr << "DataType::~DataType - " << close_error.getDetailMsg() << endl;
}
}
diff --git a/c++/src/H5Exception.cpp b/c++/src/H5Exception.cpp
index d493662..807d703 100644
--- a/c++/src/H5Exception.cpp
+++ b/c++/src/H5Exception.cpp
@@ -18,7 +18,7 @@
#ifndef H5_NO_NAMESPACE
namespace H5 {
#ifndef H5_NO_STD
- using namespace std;
+ using namespace std;
#endif // H5_NO_STD
#endif
@@ -206,14 +206,6 @@ IdComponentException::IdComponentException(const string& func_name, const string
IdComponentException::IdComponentException(const char* func_name, const char* message) : Exception(func_name, message) {}
IdComponentException::~IdComponentException() {}
-// The following are from Java API but not done here:
-// AtomException, BtreeException, DataFiltersException,
-// ExternalFileListException, FunctionEntryExitException,
-// HeapException, InternalErrorException, LowLevelIOException,
-// MetaDataCacheException, ResourceUnavailableException,
-// SymbolTableException, ObjectHeaderException, FunctionArgumentException,
-// DataStorageException
-
#ifndef H5_NO_NAMESPACE
} // end namespace
#endif
diff --git a/c++/src/H5Exception.h b/c++/src/H5Exception.h
index a77400e..5f159e8 100644
--- a/c++/src/H5Exception.h
+++ b/c++/src/H5Exception.h
@@ -167,13 +167,6 @@ class H5_DLLCPP IdComponentException : public Exception {
virtual ~IdComponentException();
};
-// The following are from Java API but not done here:
-// AtomException, BtreeException, DataFiltersException,
-// ExternalFilelistException, FunctionEntryExitException,
-// HeapException, InternalErrorException, LowLevelIOException,
-// MetaDataCacheException, ResourceUnavailableException,
-// SymbolTableException, ObjectHeaderException, FunctionArgumentException,
-// DataStorageException
#ifndef H5_NO_NAMESPACE
}
#endif
diff --git a/c++/src/H5File.cpp b/c++/src/H5File.cpp
index a314693..75c9e55 100644
--- a/c++/src/H5File.cpp
+++ b/c++/src/H5File.cpp
@@ -203,7 +203,7 @@ H5File::~H5File()
try {
resetIdComponent( this ); }
catch (Exception close_error) { // thrown by p_close
- cerr << "H5File::~H5File" << close_error.getDetailMsg() << endl;
+ cerr << "H5File::~H5File - " << close_error.getDetailMsg() << endl;
}
}
diff --git a/c++/src/H5Group.cpp b/c++/src/H5Group.cpp
index f805778..279c620 100644
--- a/c++/src/H5Group.cpp
+++ b/c++/src/H5Group.cpp
@@ -156,7 +156,7 @@ Group::~Group()
try {
resetIdComponent( this ); }
catch (Exception close_error) { // thrown by p_close
- cerr << "Group::~Group" << close_error.getDetailMsg() << endl;
+ cerr << "Group::~Group - " << close_error.getDetailMsg() << endl;
}
}
diff --git a/c++/src/H5StrType.cpp b/c++/src/H5StrType.cpp
index 5b25be1..683fc0b 100644
--- a/c++/src/H5StrType.cpp
+++ b/c++/src/H5StrType.cpp
@@ -43,6 +43,17 @@ StrType::StrType( const PredType& pred_type ) : AtomType()
copy( pred_type );
}
+// Creates a string type with a specified length - 1st argument could
+// have been skipped, but this constructor will collide with the one
+// that takes an existing id below
+StrType::StrType( const PredType& pred_type, const size_t size ) : AtomType()
+{
+ // use DataType::copy to make a copy of the string predefined type
+ // then set its length
+ copy(pred_type);
+ setSize(size);
+}
+
// Creates a string datatype using an existing id
StrType::StrType( const hid_t existing_id ) : AtomType( existing_id ) {}
diff --git a/c++/src/H5StrType.h b/c++/src/H5StrType.h
index 0ddc748..8d6070c 100644
--- a/c++/src/H5StrType.h
+++ b/c++/src/H5StrType.h
@@ -28,6 +28,9 @@ class H5_DLLCPP StrType : public AtomType {
// Creates a string type using a predefined type
StrType( const PredType& pred_type );
+ // Creates a string type with specified length
+ StrType( const PredType& pred_type, const size_t size );
+
// Creates a string datatype using an existing id
StrType( const hid_t existing_id );