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

CoinMessageHandler Class Reference

#include <CoinMessageHandler.hpp>

List of all members.

Public Member Functions

Virtual methods that the derived classes may provide
virtual int print ()
Constructors etc
 CoinMessageHandler ()
 Constructor.

 CoinMessageHandler (FILE *fp)
 Constructor to put to file pointer (won't be closed).

virtual ~CoinMessageHandler ()
 CoinMessageHandler (const CoinMessageHandler &)
CoinMessageHandleroperator= (const CoinMessageHandler &)
virtual CoinMessageHandlerclone () const
 Clone.

gets and sets methods
int logLevel () const
void setLogLevel (int value)
void setPrefix (bool yesNo)
 Switch on or off prefix.

bool prefix () const
double doubleValue (int position) const
 values in message

int numberDoubleFields () const
int intValue (int position) const
int numberIntFields () const
char charValue (int position) const
int numberCharFields () const
std::string stringValue (int position) const
int numberStringFields () const
CoinOneMessage currentMessage () const
 Current message.

std::string currentSource () const
 Source of current message.

const char * messageBuffer () const
 Output buffer.

int highestNumber () const
 Highest message number (indicates any errors).

FILE * filePointer () const
 Set new file pointer.

void setFilePointer (FILE *fp)
Actions to create a message
CoinMessageHandlermessage (int messageNumber, const CoinMessages &messages)
 Start a message.

CoinMessageHandlermessage ()
 returns current (if you want to make more uniform in look)

char * nextPerCent (char *start, const bool initial=false)
CoinMessageHandleroperator<< (int intvalue)
 Adds into message.

CoinMessageHandleroperator<< (long longvalue)
CoinMessageHandleroperator<< (double doublevalue)
CoinMessageHandleroperator<< (std::string stringvalue)
CoinMessageHandleroperator<< (char charvalue)
CoinMessageHandleroperator<< (const char *stringvalue)
CoinMessageHandleroperator<< (CoinMessageMarker)
int finish ()
CoinMessageHandlerprinting (bool onOff)
CoinMessageHandlermessage (int externalNumber, const char *header, const char *msg, char severity)

Private Attributes

Private member data
double doubleValue_ [10]
 values in message

long longValue_ [10]
char charValue_ [10]
std::string stringValue_ [10]
int logLevel_
 Log level.

int prefix_
 Whether we want prefix (may get more subtle so is int).

CoinOneMessage currentMessage_
 Current message.

int internalNumber_
 Internal number for use with enums.

char * format_
 Format string for message (remainder).

int numberDoubleFields_
 Number fields filled in, 0 in constructor then incremented.

int numberIntFields_
int numberCharFields_
int numberStringFields_
char messageBuffer_ [1000]
 Output buffer.

char * messageOut_
 Position in output buffer.

std::string source_
 Current source of message.

int printStatus_
int highestNumber_
 Highest message number (indicates any errors).

FILE * fp_
 File pointer.


Detailed Description

Base class for message handling

The default behavior is just to print. Inherit to change that This is a first attempt and it shows. messages <3000 are informational <6000 warnings <9000 errors - but will try and carry on or return code >=9000 stops Where there are derived classes I have started message numbers at 1001

Messages can be printed with or without a prefix e.g. Clp0102I. A prefix makes the messages look less nimble but is very useful for "grep" etc.

Definition at line 183 of file CoinMessageHandler.hpp.


Constructor & Destructor Documentation

CoinMessageHandler::~CoinMessageHandler  )  [virtual]
 

Destructor

Definition at line 305 of file CoinMessageHandler.cpp.

00306 {
00307 }

CoinMessageHandler::CoinMessageHandler const CoinMessageHandler  ) 
 

The copy constructor

Definition at line 309 of file CoinMessageHandler.cpp.

References charValue_, currentMessage_, doubleValue_, format_, fp_, highestNumber_, internalNumber_, logLevel_, longValue_, CoinOneMessage::message(), messageBuffer_, messageOut_, numberCharFields_, numberDoubleFields_, numberIntFields_, numberStringFields_, prefix_, printStatus_, source_, and stringValue_.

00310 {
00311   logLevel_=rhs.logLevel_;
00312   prefix_ = rhs.prefix_;
00313   currentMessage_=rhs.currentMessage_;
00314   internalNumber_=rhs.internalNumber_;
00315   int i;
00316   numberDoubleFields_ = rhs.numberDoubleFields_;
00317   for (i=0;i<numberDoubleFields_;i++) 
00318     doubleValue_[i]=rhs.doubleValue_[i];
00319   numberIntFields_ = rhs.numberIntFields_;
00320   for (i=0;i<numberIntFields_;i++) 
00321     longValue_[i]=rhs.longValue_[i];
00322   numberCharFields_ = rhs.numberCharFields_;
00323   for (i=0;i<numberCharFields_;i++) 
00324     charValue_[i]=rhs.charValue_[i];
00325   numberStringFields_ = rhs.numberStringFields_;
00326   for (i=0;i<numberStringFields_;i++) 
00327     stringValue_[i]=rhs.stringValue_[i];
00328   int offset = rhs.format_ - rhs.currentMessage_.message();
00329   format_ = currentMessage_.message()+offset;
00330   strcpy(messageBuffer_,rhs.messageBuffer_);
00331   offset = rhs.messageOut_-rhs.messageBuffer_;
00332   messageOut_= messageBuffer_+offset;
00333   printStatus_= rhs.printStatus_;
00334   highestNumber_= rhs.highestNumber_;
00335   fp_ = rhs.fp_;
00336   source_ = rhs.source_;
00337 }


Member Function Documentation

int CoinMessageHandler::finish  ) 
 

Stop (and print) - or use eol

Definition at line 470 of file CoinMessageHandler.cpp.

References format_, internalNumber_, messageBuffer_, messageOut_, numberDoubleFields_, print(), and printStatus_.

00471 {
00472   if (messageOut_!=messageBuffer_) {
00473     // put out last message
00474     print();
00475   }
00476   numberDoubleFields_=0;
00477   numberIntFields_=0;
00478   numberCharFields_=0;
00479   numberStringFields_=0;
00480   internalNumber_=-1;
00481   format_ = NULL;
00482   messageBuffer_[0]='\0';
00483   messageOut_=messageBuffer_;
00484   printStatus_=true;
00485   return 0;
00486 }

int CoinMessageHandler::logLevel  )  const [inline]
 

Amount of print out: 0 - none 1 - minimal 2 - normal low 3 - normal high 4 - verbose above that 8,16,32 etc just for selective debug and are for printf messages in code

Definition at line 220 of file CoinMessageHandler.hpp.

References logLevel_.

00221           { return logLevel_;}

CoinMessageHandler & CoinMessageHandler::message int  externalNumber,
const char *  header,
const char *  msg,
char  severity
 

The following is to help existing codes interface Starts message giving number and complete text

Definition at line 423 of file CoinMessageHandler.cpp.

References currentMessage_, highestNumber_, internalNumber_, messageBuffer_, messageOut_, numberDoubleFields_, prefix_, print(), printStatus_, CoinOneMessage::setExternalNumber(), and source_.

00425 {
00426   if (messageOut_!=messageBuffer_) {
00427     // put out last message
00428     print();
00429   }
00430   numberDoubleFields_=0;
00431   numberIntFields_=0;
00432   numberCharFields_=0;
00433   numberStringFields_=0;
00434   internalNumber_=externalNumber;
00435   currentMessage_= CoinOneMessage();
00436   currentMessage_.setExternalNumber(externalNumber);
00437   source_ = source;
00438   // mark so will not update buffer
00439   printStatus_=2;
00440   highestNumber_ = max(highestNumber_,externalNumber);
00441   // If we get here we always print
00442   if (prefix_) {
00443     sprintf(messageOut_,"%s%4.4d%c ",source_.c_str(),
00444             externalNumber,
00445             severity);
00446   }
00447   strcat(messageBuffer_,msg);
00448   messageOut_=messageBuffer_+strlen(messageBuffer_);
00449   return *this;
00450 }

char * CoinMessageHandler::nextPerCent char *  start,
const bool  initial = false
 

Gets position of next field in format if initial then copies until first

Definition at line 490 of file CoinMessageHandler.cpp.

References messageOut_, nextPerCent(), and printStatus_.

Referenced by message(), nextPerCent(), operator<<(), and printing().

00491 {
00492   if (start) {
00493     bool foundNext=false;
00494     while (!foundNext) {
00495       char * nextPerCent = strchr(start,'%');
00496       if (nextPerCent) {
00497         // %? is skipped over as it is just a separator
00498         if (nextPerCent[1]!='?') {
00499           if (initial&&!printStatus_) {
00500             int numberToCopy=nextPerCent-start;
00501             strncpy(messageOut_,start,numberToCopy);
00502             messageOut_+=numberToCopy;
00503           } 
00504           start=nextPerCent;
00505           if (start[1]!='%') {
00506             foundNext=true;
00507             if (!initial) 
00508               *start='\0'; //zap
00509           } else {
00510             start+=2;
00511             if (initial) {
00512               *messageOut_='%';
00513               messageOut_++;
00514             } 
00515           }
00516         } else {
00517           foundNext=true;
00518           // skip to % and zap
00519           start=nextPerCent;
00520           *start='\0'; 
00521         }
00522       } else {
00523         if (initial&&!printStatus_) {
00524           strcpy(messageOut_,start);
00525           messageOut_+=strlen(messageOut_);
00526         } 
00527         start=0;
00528         foundNext=true;
00529       } 
00530     } 
00531   } 
00532   return start;
00533 }

CoinMessageHandler & CoinMessageHandler::operator= const CoinMessageHandler  ) 
 

assignment operator.

Definition at line 340 of file CoinMessageHandler.cpp.

References charValue_, currentMessage_, doubleValue_, format_, fp_, highestNumber_, internalNumber_, logLevel_, longValue_, CoinOneMessage::message(), messageBuffer_, messageOut_, numberCharFields_, numberDoubleFields_, numberIntFields_, numberStringFields_, prefix_, printStatus_, source_, and stringValue_.

00341 {
00342   if (this != &rhs) {
00343     logLevel_=rhs.logLevel_;
00344     prefix_ = rhs.prefix_;
00345     currentMessage_=rhs.currentMessage_;
00346     internalNumber_=rhs.internalNumber_;
00347     int i;
00348     numberDoubleFields_ = rhs.numberDoubleFields_;
00349     for (i=0;i<numberDoubleFields_;i++) 
00350       doubleValue_[i]=rhs.doubleValue_[i];
00351     numberIntFields_ = rhs.numberIntFields_;
00352     for (i=0;i<numberIntFields_;i++) 
00353       longValue_[i]=rhs.longValue_[i];
00354     numberCharFields_ = rhs.numberCharFields_;
00355     for (i=0;i<numberCharFields_;i++) 
00356       charValue_[i]=rhs.charValue_[i];
00357     numberStringFields_ = rhs.numberStringFields_;
00358     for (i=0;i<numberStringFields_;i++) 
00359       stringValue_[i]=rhs.stringValue_[i];
00360     int offset = rhs.format_ - rhs.currentMessage_.message();
00361     format_ = currentMessage_.message()+offset;
00362     strcpy(messageBuffer_,rhs.messageBuffer_);
00363     offset = rhs.messageOut_-rhs.messageBuffer_;
00364     messageOut_= messageBuffer_+offset;
00365     printStatus_= rhs.printStatus_;
00366     highestNumber_= rhs.highestNumber_;
00367     fp_ = rhs.fp_;
00368     source_ = rhs.source_;
00369   }
00370   return *this;
00371 }

int CoinMessageHandler::print  )  [virtual]
 

Print message, return 0 normally. At present this is the only virtual method

Definition at line 215 of file CoinMessageHandler.cpp.

References currentMessage_, fp_, messageBuffer_, messageOut_, and CoinOneMessage::severity_.

Referenced by finish(), and message().

00216 {
00217   if (messageOut_>messageBuffer_) {
00218     *messageOut_=0;
00219     //take off trailing spaces and commas
00220     messageOut_--;
00221     while (messageOut_>=messageBuffer_) {
00222       if (*messageOut_==' '||*messageOut_==',') {
00223         *messageOut_=0;
00224         messageOut_--;
00225       } else {
00226         break;
00227       } 
00228     } 
00229     fprintf(fp_,"%s\n",messageBuffer_);
00230     if (currentMessage_.severity_=='S') {
00231       fprintf(fp_,"Stopping due to previous errors.\n");
00232       //Should do walkback
00233       abort();
00234     } 
00235   }
00236   return 0;
00237 }

CoinMessageHandler & CoinMessageHandler::printing bool  onOff  ) 
 

Allows for skipping printing of part of message, but putting in data

Definition at line 454 of file CoinMessageHandler.cpp.

References format_, nextPerCent(), and printStatus_.

00455 {
00456   // has no effect if skipping or whole message in
00457   if (printStatus_<2) {
00458     assert(format_[1]=='?');
00459     if (onOff)
00460       printStatus_=0;
00461     else
00462       printStatus_=1;
00463     format_ = nextPerCent(format_+2,true);
00464   }
00465   return *this;
00466 }


Member Data Documentation

int CoinMessageHandler::printStatus_ [private]
 

0 - normal, 1 - put in values, move along format, no print 2 - put in values, no print 3 - skip message

Definition at line 329 of file CoinMessageHandler.hpp.

Referenced by CoinMessageHandler(), finish(), message(), nextPerCent(), operator<<(), operator=(), and printing().


The documentation for this class was generated from the following files:
Generated on Wed Dec 3 14:34:26 2003 for Coin by doxygen 1.3.5