Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

CoinMessageHandler.hpp

00001 // Copyright (C) 2002, International Business Machines
00002 // Corporation and others.  All Rights Reserved.
00003 #ifndef CoinMessageHandler_H
00004 #define CoinMessageHandler_H
00005 
00006 #if defined(_MSC_VER)
00007 // Turn off compiler warning about long names
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 // for convenience eol
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

Generated on Wed Dec 3 14:34:19 2003 for Coin by doxygen 1.3.5