• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files

oberror.h

Go to the documentation of this file.
00001 /**********************************************************************
00002 oberror.h - Handle error messages, warnings, notices, etc.
00003  
00004 Copyright (C) 2002 by Stefan Kebekus
00005 Some portions Copyright (C) 2003-2006 by Geoffrey R. Hutchison
00006  
00007 This file is part of the Open Babel project.
00008 For more information, see <http://openbabel.sourceforge.net/>
00009  
00010 This program is free software; you can redistribute it and/or modify
00011 it under the terms of the GNU General Public License as published by
00012 the Free Software Foundation version 2 of the License.
00013  
00014 This program is distributed in the hope that it will be useful, but
00015 WITHOUT ANY WARRANTY; without even the implied warranty of
00016 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00017 General Public License for more details.
00018 ***********************************************************************/
00019 
00020 #ifndef OB_ERROR_H
00021 #define OB_ERROR_H
00022 
00023 #include <openbabel/babelconfig.h>
00024 
00025 #include <iosfwd>
00026 #include <sstream>
00027 #include <string>
00028 #include <vector>
00029 #include <deque>
00030 
00031 #ifndef OBERROR
00032 #define OBERROR
00033 #endif
00034 
00035 namespace OpenBabel
00036 {
00037 
00039   enum obMessageLevel {
00040     obError,     
00041     obWarning,   
00042     obInfo,      
00043     obAuditMsg,  
00044     obDebug      
00045   };
00046 
00047   enum errorQualifier {always, onceOnly};
00048 
00052   class OBERROR OBError
00053     {
00054     public:
00055 
00057       OBError( const std::string &method = "",
00058                const std::string &errorMsg = "",
00059                const std::string &explanation = "",
00060                const std::string &possibleCause = "",
00061                const std::string &suggestedRemedy = "",
00062                const obMessageLevel = obDebug );
00063 
00065       std::string message(void) const;
00066   
00068       friend std::ostream& operator<< ( std::ostream &os, const OBError &er )
00069         { return os << er.message(); };
00070 
00073       std::string    GetMethod() const           { return _method;          }
00075       std::string    GetError() const            { return _errorMsg;        }
00077       std::string    GetExplanation() const      { return _explanation;     }
00079       std::string    GetPossibleCause() const    { return _possibleCause;   }
00081       std::string    GetSuggestedRemedy() const  { return _suggestedRemedy; }
00083       obMessageLevel GetLevel() const            { return _level;           }
00084 
00085       bool operator== (const OBError&)const;
00086 
00087     protected:
00088 
00090       std::string _method;
00092       std::string _errorMsg;
00094       std::string _explanation;
00096       std::string _possibleCause;
00098       std::string _suggestedRemedy;
00099 
00101       obMessageLevel _level;
00102     };
00103 
00105   // More documentation in oberror.cpp
00106   class OBERROR OBMessageHandler
00107     {
00108     protected:
00110       unsigned int           _messageCount[5];
00111 
00112     public:
00113       OBMessageHandler();
00114       ~OBMessageHandler();
00115     
00117       void ThrowError(OBError err, errorQualifier qqualifier = always);
00119       void ThrowError(const std::string &method, const std::string &errorMsg, 
00120                       obMessageLevel level = obDebug, errorQualifier qualifier = always);
00121 
00123       std::vector<std::string> GetMessagesOfLevel(const obMessageLevel);
00124 
00126       void StartLogging() { _logging = true; }
00128       void StopLogging()  { _logging = false; }
00129 
00131       void SetMaxLogEntries(unsigned int max) { _maxEntries = max; }
00133       unsigned int GetMaxLogEntries() { return _maxEntries; }
00134 
00136       void ClearLog() { _messageList.clear(); }
00137 
00140       void SetOutputLevel(const obMessageLevel level) { _outputLevel = level; }
00142       obMessageLevel GetOutputLevel() { return _outputLevel; }
00143 
00144       void SetOutputStream(std::ostream *os) { _outputStream = os; }
00145       std::ostream* GetOutputStream() { return _outputStream; }
00146 
00148       bool StartErrorWrap();
00150       bool StopErrorWrap();
00151 
00153       unsigned int GetErrorMessageCount() { return _messageCount[obError];}
00155       unsigned int GetWarningMessageCount() { return _messageCount[obWarning];}
00157       unsigned int GetInfoMessageCount() { return _messageCount[obInfo];}
00159       unsigned int GetAuditMessageCount() { return _messageCount[obAuditMsg];}
00161       unsigned int GetDebugMessageCount() { return _messageCount[obDebug];}
00163       std::string GetMessageSummary();
00164 
00165     protected:
00167       std::deque<OBError>    _messageList;
00168 
00170       obMessageLevel         _outputLevel;
00171 
00172       // self-explanatory
00173       std::ostream          *_outputStream;
00174 
00176       bool                   _logging;
00178       unsigned int           _maxEntries;
00179 
00181       std::streambuf        *_inWrapStreamBuf;
00183       std::streambuf        *_filterStreamBuf;
00184     }; 
00185 
00186   OBERROR extern OBMessageHandler obErrorLog;
00187 
00190 
00200   class OBERROR obLogBuf : public std::stringbuf
00201     {
00202     public:
00204       virtual ~obLogBuf() { sync(); }
00205     
00206     protected:
00208       int sync()
00209         {
00210           obErrorLog.ThrowError("", str(), obInfo);
00211           str(std::string()); // clear the buffer
00212           return 0;
00213         }
00214     };
00215 
00216 } // end namespace OpenBabel
00217 
00218 #endif
00219 

This file is part of the documentation for Open Babel, version 2.2.0.

Documentation copyright © 1998-2007, the Open Babel Developers.
Open Babel is hosted by: SourceForge Logo
Generated on Thu Jul 3 14:30:34 2008 by doxygen 1.5.6.