summaryrefslogtreecommitdiffstats
path: root/c++/src/H5Exception.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'c++/src/H5Exception.cpp')
-rw-r--r--c++/src/H5Exception.cpp92
1 files changed, 61 insertions, 31 deletions
diff --git a/c++/src/H5Exception.cpp b/c++/src/H5Exception.cpp
index 86606db..3eeb2b8 100644
--- a/c++/src/H5Exception.cpp
+++ b/c++/src/H5Exception.cpp
@@ -6,33 +6,43 @@
#include "H5Include.h"
#include <string>
-
-// Added this line for CC to work at this time. Will remove it when
-// the problem is fixed. BMR - 10/30/00
-
#include "H5Exception.h"
#ifndef H5_NO_NAMESPACE
namespace H5 {
#endif
-Exception::Exception() : detailMessage("") {}
+// Default constructor
+Exception::Exception() : detailMessage(""), funcName("") {}
+
+// Constructor taking only a detailed message as string object
+//Exception::Exception(const string& message) : detailMessage(message) {}
+// Constructor taking a function name and a detailed message as string objects
+Exception::Exception(const string& func_name, const string& message) : detailMessage(message), funcName(func_name) {}
+
+// Constructor taking a detailed message as character string
// digital alpha (gondolin) produces compilation error at static_cast<string>
// so I replaced this constructor by the one below it
//Exception::Exception( const char* message) : detailMessage(static_cast<string>(message)) {}
-
-Exception::Exception( const char* message)
+//Exception::Exception(const char* message)
+//{
+ //detailMessage = string(message);
+//}
+
+// Constructor taking a function name and a detailed message as character
+// strings
+Exception::Exception(const char* func_name, const char* message)
{
- detailMessage = string( message );
+ detailMessage = string(message);
+ funcName = string(func_name);
}
-Exception::Exception( const string& message ) : detailMessage( message ) {}
-
// copy constructor
Exception::Exception( const Exception& orig )
{
detailMessage = orig.detailMessage;
+ funcName = orig.funcName;
}
// Returns the character string that describes an error specified by
@@ -62,7 +72,7 @@ void Exception::setAutoPrint( H5E_auto_t func, void* client_data )
// the specified function.
herr_t ret_value = H5Eset_auto( func, client_data );
if( ret_value < 0 )
- throw Exception( "Exception::setAutoPrint" );
+ throw Exception( "Exception::setAutoPrint", "H5Eset_auto failed" );
}
// Turns off the automatic error printing.
@@ -72,7 +82,7 @@ void Exception::dontPrint()
// off the automatic error printing.
herr_t ret_value = H5Eset_auto( NULL, NULL );
if( ret_value < 0 )
- throw Exception( "Exception::dontPrint" );
+ throw Exception( "Exception::dontPrint", "H5Eset_auto failed" );
}
// Retrieves the current settings for the automatic error stack traversal
@@ -83,7 +93,7 @@ void Exception::getAutoPrint( H5E_auto_t& func, void** client_data )
// the automatic error printing
herr_t ret_value = H5Eget_auto( &func, client_data );
if( ret_value < 0 )
- throw Exception( "Exception::getAutoPrint" );
+ throw Exception( "Exception::getAutoPrint", "H5Eget_auto failed" );
}
// Clears the error stack for the current thread.
@@ -92,7 +102,7 @@ void Exception::clearErrorStack()
// calls the C API routine H5Eclear to clear the error stack
herr_t ret_value = H5Eclear();
if( ret_value < 0 )
- throw Exception( "Exception::clearErrorStack" );
+ throw Exception( "Exception::clearErrorStack", "H5Eclear failed" );
}
// Walks the error stack for the current thread, calling the specified function.
@@ -101,7 +111,7 @@ void Exception::walkErrorStack( H5E_direction_t direction, H5E_walk_t func, void
// calls the C API routine H5Ewalk to walk the error stack
herr_t ret_value = H5Ewalk( direction, func, client_data );
if( ret_value < 0 )
- throw Exception( "Exception::walkErrorStack" );
+ throw Exception( "Exception::walkErrorStack", "H5Ewalk failed" );
}
// Default error stack traversal callback function that prints error
@@ -111,18 +121,28 @@ void Exception::walkDefErrorStack( int n, H5E_error_t& err_desc, void* client_da
// calls the C API routine H5Ewalk_cb to walk the error stack
herr_t ret_value = H5Ewalk_cb( n, &err_desc, client_data );
if( ret_value < 0 )
- throw Exception( "Exception::walkDefErrorStack" );
+ throw Exception( "Exception::walkDefErrorStack", "H5Ewalk_cb failed" );
}
// Returns the detailed message set at the time the exception is thrown
-string Exception::getDetailMesg() const
+string Exception::getDetailMsg() const
{
- return( detailMessage );
+ return(detailMessage);
}
-const char* Exception::getCDetailMesg() const
+const char* Exception::getCDetailMsg() const
+{
+ return(detailMessage.c_str());
+}
+
+// Returns the function name where the exception is thrown
+string Exception::getFuncName() const
+{
+ return(funcName);
+}
+const char* Exception::getCFuncName() const
{
- return( detailMessage.c_str() );
+ return(funcName.c_str());
}
// Prints the error stack in a default manner.
@@ -130,49 +150,59 @@ void Exception::printError( FILE* stream ) const
{
herr_t ret_value = H5Eprint( NULL ); // print to stderr
if( ret_value < 0 )
- throw Exception( "Exception::printError" );
+ throw Exception( "Exception::printError", "H5Eprint failed" );
}
Exception::~Exception() {}
FileIException::FileIException():Exception(){}
-FileIException::FileIException( string message ): Exception( message ){}
+FileIException::FileIException(const string& func_name, const string& message) : Exception(func_name, message) {}
+FileIException::FileIException(const char* func_name, const char* message) : Exception(func_name, message) {}
FileIException::~FileIException() {}
GroupIException::GroupIException():Exception(){}
-GroupIException::GroupIException( string message ): Exception( message ){}
+GroupIException::GroupIException(const string& func_name, const string& message) : Exception(func_name, message) {}
+GroupIException::GroupIException(const char* func_name, const char* message) : Exception(func_name, message) {}
GroupIException::~GroupIException() {}
DataSpaceIException::DataSpaceIException():Exception(){}
-DataSpaceIException::DataSpaceIException( string message ): Exception( message ) {}
+DataSpaceIException::DataSpaceIException(const string& func_name, const string& message) : Exception(func_name, message) {}
+DataSpaceIException::DataSpaceIException(const char* func_name, const char* message) : Exception(func_name, message) {}
DataSpaceIException::~DataSpaceIException() {}
DataTypeIException::DataTypeIException():Exception(){}
-DataTypeIException::DataTypeIException( string message ): Exception( message ) {}
+DataTypeIException::DataTypeIException(const string& func_name, const string& message) : Exception(func_name, message) {}
+DataTypeIException::DataTypeIException(const char* func_name, const char* message) : Exception(func_name, message) {}
DataTypeIException::~DataTypeIException() {}
PropListIException::PropListIException():Exception(){}
-PropListIException::PropListIException( string message ): Exception( message ) {}
+PropListIException::PropListIException(const string& func_name, const string& message) : Exception(func_name, message) {}
+PropListIException::PropListIException(const char* func_name, const char* message) : Exception(func_name, message) {}
PropListIException::~PropListIException() {}
DataSetIException::DataSetIException():Exception(){}
-DataSetIException::DataSetIException( string message ): Exception( message ) {}
+DataSetIException::DataSetIException(const string& func_name, const string& message) : Exception(func_name, message) {}
+DataSetIException::DataSetIException(const char* func_name, const char* message) : Exception(func_name, message) {}
DataSetIException::~DataSetIException() {}
AttributeIException::AttributeIException():Exception(){}
-AttributeIException::AttributeIException( string message ): Exception( message ) {}
+AttributeIException::AttributeIException(const string& func_name, const string& message) : Exception(func_name, message) {}
+AttributeIException::AttributeIException(const char* func_name, const char* message) : Exception(func_name, message) {}
AttributeIException::~AttributeIException() {}
ReferenceException::ReferenceException():Exception(){}
-ReferenceException::ReferenceException( string message ): Exception( message ) {}
+ReferenceException::ReferenceException(const string& func_name, const string& message) : Exception(func_name, message) {}
+ReferenceException::ReferenceException(const char* func_name, const char* message) : Exception(func_name, message) {}
ReferenceException::~ReferenceException() {}
LibraryIException::LibraryIException():Exception(){}
-LibraryIException::LibraryIException( string message ): Exception( message ) {}
+LibraryIException::LibraryIException(const string& func_name, const string& message) : Exception(func_name, message) {}
+LibraryIException::LibraryIException(const char* func_name, const char* message) : Exception(func_name, message) {}
LibraryIException::~LibraryIException() {}
IdComponentException::IdComponentException(): Exception() {}
-IdComponentException::IdComponentException( string message ): Exception( message ) {}
+IdComponentException::IdComponentException(const string& func_name, const string& message) : Exception(func_name, message) {}
+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: