logEvent.h

00001 /*  _________________________________________________________________________
00002  *
00003  *  UTILIB: A utility library for developing portable C++ codes.
00004  *  Copyright (c) 2001, Sandia National Laboratories.
00005  *  This software is distributed under the GNU Lesser General Public License.
00006  *  For more information, see the README file in the top UTILIB directory.
00007  *  _________________________________________________________________________
00008  */
00009 
00010 //
00011 // logEvent.H
00012 //
00020 #ifndef __logEvent_H
00021 #define __logEvent_H
00022 
00023 #ifdef __GNUC__
00024 #pragma interface
00025 #endif
00026 
00027 #if defined(USING_MPI) && defined(DEBUGGING) && defined(MPE)
00028 
00029 #include "paramTable.h"
00030 
00031 #include <values.h>
00032 #include "mpi.h"
00033 #include "mpe.h"
00034 
00035 
00036 class logEvent
00037 {
00038 public:
00039 
00041   CLASS_PARAMETER(eventLog);
00042 
00044   enum { undefinedState = -MAXINT };
00045 
00047   static void init()  { MPE_Init_log(); };
00048 
00054   static void open();
00055 
00060   static void close();
00061 
00067   static int defineState(const char* description,const char* color);
00068 
00070   static void log_start(int stateNumber) { event(stateNumber*2); };
00072   static void log_end(int stateNumber)   { event(stateNumber*2 + 1); };
00073 
00075   static void log_point(int stateNumber)
00076     {
00077       log_start(stateNumber);
00078       log_end(stateNumber);
00079     };
00080   
00081 private:
00082 
00084   static void event(int eventNumber) 
00085     { 
00086       MPE_Log_event(eventNumber,0,(char *) ""); 
00087     };
00088 
00090   static int numberOfStates;
00091 
00092 };
00093 
00094 
00096 #define IF_LOGGING_COMPILED(arbitraryCode) arbitraryCode
00097 
00099 #define IF_LOGGING_EVENTS(level,action) \
00100    if (logEvent::eventLog() >= level) action
00101 
00103 #define LOG_EVENT(level,how,state) \
00104    IF_LOGGING_EVENTS(level,logEvent::log_##how(state);)
00105 
00107 #define LOG_EVENT_CONDITIONAL(level,cond,how,state) \
00108    IF_LOGGING_EVENTS(level,if (cond) logEvent::log_##how(state);)
00109 
00111 #define EVENT_LOGGING_PRESENT 1
00112 
00113 
00114 #else
00115 
00116 
00117 #define IF_LOGGING_COMPILED(arbitraryCode)          /* Nothing */
00118 #define IF_LOGGING_EVENTS(level,action)             /* Nothing */
00119 #define LOG_EVENT(level,how,state)                  /* Nothing */
00120 #define LOG_EVENT_CONDITIONAL(level,cond,how,state) /* Nothing */
00121 #undef  EVENT_LOGGING_PRESENT
00122 
00123 
00124 #endif
00125 
00126 
00127 #endif