IT++ Logo
itassert.cpp
Go to the documentation of this file.
00001 
00029 #ifndef _MSC_VER
00030 #  include <itpp/config.h>
00031 #else
00032 #  include <itpp/config_msvc.h>
00033 #endif
00034 
00035 #include <itpp/base/itassert.h>
00036 #include <iostream>
00037 #include <stdexcept>
00038 #include <cstdlib>
00039 
00040 
00041 namespace itpp
00042 {
00043 
00045 static bool warnings_enabled = true;
00046 static bool file_line_info_enabled = true;
00047 static std::ostream *warn = &std::cerr;
00049 
00050 void it_assert_f(std::string ass, std::string msg, std::string file, int line)
00051 {
00052   std::ostringstream error;
00053   if (file_line_info_enabled) {
00054     error << "*** Assertion failed in " << file << " on line " << line
00055     << ":\n" << msg << " (" << ass << ")\n";
00056   }
00057   else {
00058     error << msg << " (" << ass << ")\n";
00059   }
00060   std::cerr << error.str() << std::flush;
00061 #ifdef ITPP_EXCEPTIONS
00062   throw std::runtime_error(error.str());
00063 #else
00064   abort();
00065 #endif
00066 }
00067 
00068 void it_error_f(std::string msg, std::string file, int line)
00069 {
00070   std::ostringstream error;
00071   if (file_line_info_enabled) {
00072     error << "*** Error in " << file << " on line " << line << ":\n"
00073     << msg << "\n";
00074   }
00075   else {
00076     error << msg << "\n";
00077   }
00078   std::cerr << error.str() << std::flush;
00079 #ifdef ITPP_EXCEPTIONS
00080   throw std::runtime_error(error.str());
00081 #else
00082   abort();
00083 #endif
00084 }
00085 
00086 void it_info_f(std::string msg)
00087 {
00088   std::cerr << msg << std::flush;
00089 }
00090 
00091 void it_warning_f(std::string msg, std::string file, int line)
00092 {
00093   if (warnings_enabled) {
00094     if (file_line_info_enabled) {
00095       (*warn) << "*** Warning in " << file << " on line " << line << ":\n"
00096       << msg << std::endl << std::flush;
00097     }
00098     else {
00099       (*warn) << msg << std::endl << std::flush;
00100     }
00101   }
00102 }
00103 
00104 void it_enable_warnings()
00105 {
00106   warnings_enabled = true;
00107 }
00108 
00109 void it_disable_warnings()
00110 {
00111   warnings_enabled = false;
00112 }
00113 
00114 void it_redirect_warnings(std::ostream *warn_stream)
00115 {
00116   warn = warn_stream;
00117 }
00118 
00119 void it_error_msg_style(error_msg_style style)
00120 {
00121   switch (style) {
00122   case Full:
00123     file_line_info_enabled = true;
00124     break;
00125   case Minimum:
00126     file_line_info_enabled = false;
00127     break;
00128   default:
00129     file_line_info_enabled = true;
00130   }
00131 }
00132 
00133 } //namespace itpp
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
SourceForge Logo

Generated on Wed Jul 27 2011 16:27:04 for IT++ by Doxygen 1.7.4