GDCM 2.0.17
|
00001 /*========================================================================= 00002 00003 Program: GDCM (Grassroots DICOM). A DICOM library 00004 Module: $URL$ 00005 00006 Copyright (c) 2006-2010 Mathieu Malaterre 00007 All rights reserved. 00008 See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details. 00009 00010 This software is distributed WITHOUT ANY WARRANTY; without even 00011 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00012 PURPOSE. See the above copyright notice for more information. 00013 00014 =========================================================================*/ 00015 #ifndef GDCMEXCEPTION_H 00016 #define GDCMEXCEPTION_H 00017 00018 #include <cassert> 00019 #include <cstdlib> // NULL 00020 #include <exception> 00021 #include <sstream> // ostringstream 00022 #include <stdexcept> // logic_error 00023 #include <string> 00024 00025 namespace gdcm 00026 { 00027 00034 class Exception : public std::exception 00035 { 00040 typedef std::logic_error StringHolder; 00041 00043 static StringHolder CreateWhat(const char* const desc, 00044 const char* const file, 00045 const unsigned int lineNumber, 00046 const char* const func) 00047 { 00048 assert(desc != NULL); 00049 assert(file != NULL); 00050 assert(func != NULL); 00051 std::ostringstream oswhat; 00052 oswhat << file << ":" << lineNumber << " (" << func << "):\n"; 00053 oswhat << desc; 00054 return StringHolder( oswhat.str() ); 00055 } 00056 00057 public: 00063 explicit Exception(const char *desc = "None", 00064 const char *file = __FILE__, 00065 unsigned int lineNumber = __LINE__, 00066 // FIXME: __PRETTY_FUNCTION__ is the non-mangled version for __GNUC__ compiler 00067 const char *func = "" /*__FUNCTION__*/) 00068 : 00069 What( CreateWhat(desc, file, lineNumber, func) ), 00070 Description(desc) 00071 { 00072 } 00073 00074 virtual ~Exception() throw() {} 00075 00077 const char* what() const throw() 00078 { 00079 return What.what(); 00080 } 00081 00083 const char * GetDescription() const { return Description.what(); } 00084 00085 private: 00086 StringHolder What; 00087 StringHolder Description; 00088 }; 00089 00090 } // end namespace gdcm 00091 00092 #endif