Warnings.hpp
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
00026
00027
00028
00029 #ifndef _WARNINGS_HPP_
00030 #define _WARNINGS_HPP_
00031
00032 #include <string>
00033 #include <deque>
00034 #include <sstream>
00035
00047 class Warnings
00048 {
00049 private:
00050
00051 static Warnings* mpInstance;
00054 typedef std::deque<std::pair<std::string, std::string> > WarningsContainerType;
00055
00056 WarningsContainerType mWarningMessages;
00058 protected:
00059
00064 Warnings();
00065
00066 public:
00067
00072 static void NoisyDestroy();
00073
00078 static void QuietDestroy();
00079
00088 void AddWarning(const std::string& rMessage, const std::string& rFilename, unsigned lineNumber, bool onlyOnce=false);
00089
00095 std::string PopWarning() const;
00096
00101 static Warnings* Instance();
00102
00106 unsigned GetNumWarnings();
00107
00111 std::string GetNextWarningMessage();
00112 };
00113
00114 #define WARNING(message) \
00115 { \
00116 std::stringstream msg_stream; \
00117 msg_stream << message; \
00118 Warnings::Instance()->AddWarning(msg_stream.str(), __FILE__, __LINE__); \
00119 }
00120
00138 #define WARN_ONCE_ONLY(message) \
00139 { \
00140 std::stringstream msg_stream; \
00141 msg_stream << message; \
00142 Warnings::Instance()->AddWarning(msg_stream.str(), __FILE__, __LINE__, true); \
00143 }
00144 #endif // _WARNINGS_HPP_