00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <sstream>
00026
00027 #include <errno.h>
00028
00029 #include "Exception.h"
00030
00031 Exception& Exception::operator= ( const Exception& rhs ) {
00032
00033 if ( this == &rhs )
00034 return *this;
00035
00036 this->runtime_error::operator=( rhs );
00037 exception_queue = rhs.exception_queue;
00038
00039 return *this;
00040
00041 }
00042
00043 void Exception::print( ostream& os ) const {
00044 for ( size_t i = 0; i < exception_queue.size( ); i++ )
00045 os << exception_queue[ i ];
00046 }
00047
00048 void Exception::set_message( const string& msg ) {
00049 exception_queue.push_front( msg );
00050 }
00051
00052 void Exception::set_rethrow_message( const string& file, const int n ) {
00053 ostringstream ost;
00054 ost << "Re-throw exception from file '" << file << "' at line " << n << '\n';
00055 exception_queue.push_front( ost.str( ) );
00056 }
00057
00058 const char* Exception::what() const throw() {
00059
00060 if ( exception_queue.size( ) )
00061 return exception_queue[ 0 ].c_str( );
00062 else
00063 return (const char*) NULL;
00064
00065 }