00001
00002
00003 #ifndef CoinMessageHandler_H
00004 #define CoinMessageHandler_H
00005
00006 #if defined(_MSC_VER)
00007
00008 # pragma warning(disable:4786)
00009 #endif
00010
00011
00012 #include <iostream>
00013 #include <cstdio>
00014 #include <string>
00015
00043 class CoinOneMessage {
00044
00045 public:
00049 CoinOneMessage();
00051 CoinOneMessage(int externalNumber, char detail,
00052 const char * message);
00054 ~CoinOneMessage();
00056 CoinOneMessage(const CoinOneMessage&);
00058 CoinOneMessage& operator=(const CoinOneMessage&);
00060
00063
00064 void replaceMessage(const char * message);
00066 inline void setDetail(int level)
00067 {detail_=level;}
00069 inline int detail() const
00070 {return detail_;}
00072 char * message() const
00073 {return message_;}
00075
00078
00079 inline int externalNumber() const
00080 {return externalNumber_;}
00081 inline void setExternalNumber(int number)
00082 {externalNumber_=number;}
00084 inline char severity() const
00085 {return severity_;}
00087
00090
00091 int externalNumber_;
00093 char detail_;
00095 char severity_;
00097 char * message_;
00099 };
00100
00105 class CoinMessages {
00106
00107 public:
00112 enum Language {
00113 us_en = 0,
00114 uk_en,
00115 it
00116 };
00120 CoinMessages(int numberMessages=0);
00122 ~CoinMessages();
00124 CoinMessages(const CoinMessages&);
00126 CoinMessages& operator=(const CoinMessages&);
00128
00131
00132 void addMessage(int messageNumber, const CoinOneMessage & message);
00134 void replaceMessage(int messageNumber,
00135 const char * message);
00137 inline Language language() const
00138 {return language_;}
00139 void setLanguage(Language language)
00140 {language_ = language;}
00142 void setDetailMessage(int newLevel, int messageNumber);
00144 void setDetailMessages(int newLevel, int numberMessages,
00145 int * messageNumbers);
00147
00150
00151 int numberMessages_;
00153 Language language_;
00155 char source_[5];
00157 CoinOneMessage ** message_;
00159 };
00160
00161
00162 enum CoinMessageMarker {
00163 CoinMessageEol = 0,
00164 CoinMessageNewline = 1
00165 };
00166
00183 class CoinMessageHandler {
00184
00185 public:
00191 virtual int print() ;
00193
00196
00197 CoinMessageHandler();
00199 CoinMessageHandler(FILE *fp);
00201 virtual ~CoinMessageHandler();
00203 CoinMessageHandler(const CoinMessageHandler&);
00205 CoinMessageHandler& operator=(const CoinMessageHandler&);
00207 virtual CoinMessageHandler * clone() const;
00209
00220 inline int logLevel() const
00221 { return logLevel_;}
00222 void setLogLevel(int value);
00224 void setPrefix(bool yesNo);
00225 bool prefix() const;
00227 inline double doubleValue(int position) const
00228 { return doubleValue_[position];}
00229 inline int numberDoubleFields() const
00230 {return numberDoubleFields_;}
00231 inline int intValue(int position) const
00232 { return longValue_[position];}
00233 inline int numberIntFields() const
00234 {return numberIntFields_;}
00235 inline char charValue(int position) const
00236 { return charValue_[position];}
00237 inline int numberCharFields() const
00238 {return numberCharFields_;}
00239 inline std::string stringValue(int position) const
00240 { return stringValue_[position];}
00241 inline int numberStringFields() const
00242 {return numberStringFields_;}
00244 inline CoinOneMessage currentMessage() const
00245 {return currentMessage_;}
00247 inline std::string currentSource() const
00248 {return source_;}
00250 inline const char * messageBuffer() const
00251 {return messageBuffer_;}
00253 inline int highestNumber() const
00254 {return highestNumber_;}
00256 inline FILE * filePointer() const
00257 { return fp_;}
00258 inline void setFilePointer(FILE * fp)
00259 { fp_ = fp;}
00261
00264
00265 CoinMessageHandler & message(int messageNumber,
00266 const CoinMessages & messages);
00268 CoinMessageHandler & message();
00271 char * nextPerCent(char * start , const bool initial=false);
00273 CoinMessageHandler & operator<< (int intvalue);
00274 CoinMessageHandler & operator<< (long longvalue);
00275 CoinMessageHandler & operator<< (double doublevalue);
00276 CoinMessageHandler & operator<< (std::string stringvalue);
00277 CoinMessageHandler & operator<< (char charvalue);
00278 CoinMessageHandler & operator<< (const char *stringvalue);
00279 CoinMessageHandler & operator<< (CoinMessageMarker);
00282 int finish();
00285 CoinMessageHandler & printing(bool onOff);
00286
00290 CoinMessageHandler & message(int externalNumber,const char * header,
00291 const char * msg,char severity);
00292
00294
00295 private:
00298
00299 double doubleValue_[10];
00300 long longValue_[10];
00301 char charValue_[10];
00302 std::string stringValue_[10];
00304 int logLevel_;
00306 int prefix_;
00308 CoinOneMessage currentMessage_;
00310 int internalNumber_;
00312 char * format_;
00314 int numberDoubleFields_;
00315 int numberIntFields_;
00316 int numberCharFields_;
00317 int numberStringFields_;
00319 char messageBuffer_[1000];
00321 char * messageOut_;
00323 std::string source_;
00329 int printStatus_;
00331 int highestNumber_;
00333 FILE * fp_;
00335 };
00336
00337 #endif