OpenFPGA/vpr7_x2p/printhandler/SRC/TIO_InputOutputHandlers/TIO_PrintHandler.h

446 lines
15 KiB
C++

//===========================================================================//
// Purpose : Declaration and inline definitions for a TIO_PrintHandler
// singleton class. This class handles all user interface messages.
//
// Inline methods include:
// - SetTimeStampsEnabled
// - SetPrefix
// - ClearPrefix
// - SetMaxErrorCount
// - SetMaxWarningCount
// - GetErrorCount
// - GetWarningCount
// - GetInternalCount
// - GetLogFileName
// - GetUserFileName
// - EnableStdioOutput, DisableStdioOutput
// - EnableCustomOutput, DisableCustomOutput
// - EnableLogFileOutput, DisableLogFileOutput
// - EnableUserFileOutput, DisableUserFileOutput
// - IsStdioOutputEnabled
// - IsCustomOutputEnabled
// - IsLogFileOutputEnabled
// - IsUserFileOutputEnabled
//
// Protected methods include:
// - TIO_PrintHandler_c, ~TIO_PrintHandler_c
//
// Private methods include:
// - WriteMessage_
// - FormatMessage_
// - PrefixMessage_
// - OutputMessage_
//
//===========================================================================//
#ifndef TIO_PRINT_HANDLER_H
#define TIO_PRINT_HANDLER_H
#include <string>
using namespace std;
#include "TIO_Typedefs.h"
#include "TIO_StdioOutput.h"
#include "TIO_CustomOutput.h"
#include "TIO_FileOutput.h"
//===========================================================================//
// Purpose : Class declaration
// Author : Jeff Rudolph
//---------------------------------------------------------------------------//
// Version history
// 05/01/12 jeffr : Original
//===========================================================================//
class TIO_PrintHandler_c
{
public:
static void NewInstance( void );
static void DeleteInstance( void );
static TIO_PrintHandler_c& GetInstance( bool newInstance = true );
static bool HasInstance( void );
void Info( const char* pszText, ... );
void Info( TIO_PrintMode_t mode,
const char* pszText, va_list vaArgs );
bool Warning( const char* pszText, ... );
bool Warning( TIO_PrintMode_t mode,
const char* pszText, va_list vaArgs );
bool Error( const char* pszText, ... );
bool Error( TIO_PrintMode_t mode,
const char* pszText, va_list vaArgs );
bool Fatal( const char* pszText, ... );
bool Fatal( TIO_PrintMode_t mode,
const char* pszText, va_list vaArgs );
void Trace( const char* pszText, ... );
void Trace( FILE* pfile,
size_t lenSpace,
const char* pszText, ... );
void Trace( TIO_PrintMode_t mode,
const char* pszText, va_list vaArgs );
bool Internal( const char* pszSource,
const char* pszText, ... );
bool Internal( TIO_PrintMode_t mode,
const char* pszSource,
const char* pszText, va_list vaArgs );
void Direct( const char* pszText, ... );
void Direct( TIO_PrintMode_t mode,
const char* pszText, va_list vaArgs );
void Write( const char* pszText, ... );
void Write( size_t lenSpace,
const char* pszText, ... );
void Write( FILE* pfile,
size_t lenSpace,
const char* pszText, ... );
void WriteBanner( FILE* pfile,
size_t lenSpace );
void WriteBanner( void );
void WriteCenter( FILE* pfile,
size_t lenSpace,
const char* pszText,
size_t lenText,
const char* pszPrefix = 0,
const char* pszPostfix = 0 );
void WriteVersion( void );
void WriteHelp( void );
void SetStdioOutput( FILE* pstream );
void SetCustomOutput( TIO_PFX_CustomHandler_t pfxCustomHandler );
bool SetLogFileOutput( const char* pszLogFileName = 0,
TIO_FileOpenMode_t fileOpenMode = TIO_FILE_OPEN_WRITE );
bool SetUserFileOutput( const char* pszUserFileName = 0,
TIO_FileOpenMode_t fileOpenMode = TIO_FILE_OPEN_WRITE );
void SetTimeStampsEnabled( bool timeStampsEnable );
void SetPrefix( const char* pszPrefix );
void SetPrefix( const string& srPrefix );
void ClearPrefix( void );
void AddInfoAcceptRegExp( const char* pszRegExp );
void AddInfoRejectRegExp( const char* pszRegExp );
void AddWarningAcceptRegExp( const char* pszRegExp );
void AddWarningRejectRegExp( const char* pszRegExp );
void AddErrorAcceptRegExp( const char* pszRegExp );
void AddErrorRejectRegExp( const char* pszRegExp );
void AddTraceAcceptRegExp( const char* pszRegExp );
void AddTraceRejectRegExp( const char* pszRegExp );
void SetMaxWarningCount( unsigned long maxWarningCount );
void SetMaxErrorCount( unsigned long maxErrorCount );
unsigned long GetWarningCount( void ) const;
unsigned long GetErrorCount( void ) const;
unsigned long GetInternalCount( void ) const;
const char* GetLogFileName( void ) const;
const char* GetUserFileName( void ) const;
void FindUserName( string* psrUserName ) const;
void FindHostName( string* psrHostName ) const;
void FindWorkingDir( string* psrWorkingDir ) const;
void EnableStdioOutput( void );
void EnableCustomOutput( void );
void EnableLogFileOutput( void );
void EnableUserFileOutput( void );
void EnableOutput( int outputMask = TIO_PRINT_OUTPUT_ALL );
void DisableStdioOutput( void );
void DisableCustomOutput( void );
void DisableLogFileOutput( void );
void DisableUserFileOutput( void );
void DisableOutput( int outputMask = TIO_PRINT_OUTPUT_ALL );
bool IsStdioOutputEnabled( void ) const;
bool IsCustomOutputEnabled( void ) const;
bool IsLogFileOutputEnabled( void ) const;
bool IsUserFileOutputEnabled( void ) const;
bool IsOutputEnabled( int outputMask = TIO_PRINT_OUTPUT_ALL );
bool IsWithinMaxWarningCount( void ) const;
bool IsWithinMaxErrorCount( void ) const;
bool IsWithinMaxCount( void ) const;
bool IsValidMaxWarningCount( void );
bool IsValidMaxErrorCount( void );
bool IsValidNew( const void* pvoid,
size_t allocLen,
const char* pszSource );
protected:
TIO_PrintHandler_c( void );
~TIO_PrintHandler_c( void );
private:
bool WriteMessage_( TIO_PrintMode_t mode,
const char* pszText,
va_list vaArgs,
const char* pszSource = 0 );
bool FormatMessage_( const char* pszText,
va_list vaArgs,
char* pszMessage );
bool PrefixMessage_( TIO_PrintMode_t mode,
const char* pszText,
const char* pszSource,
char* pszMessage );
void OutputMessage_( TIO_PrintMode_t mode,
const char* pszText,
const char* pszSource = 0 );
void ApplySystemCommand_( const char* pszCommand,
size_t lenCommandStdout,
string* psrCommandStdout ) const;
private:
class TIO_PrintHandlerOutputs_c
{
public:
TIO_StdioOutput_c stdioOutput; // Used for optional standard output IF
TIO_CustomOutput_c customOutput; // Used for optional custom output IF
TIO_FileOutput_c logFileOutput; // Used for optional log file output IF
TIO_FileOutput_c userFileOutput; // Used for optional user file output IF
bool isStdioEnabled; // Enable optional standard output IF
bool isCustomEnabled; // Enable optional custom output IF
bool isLogFileEnabled; // Enable optional log file output IF
bool isUserFileEnabled; // Enable optional user file output IF
} outputs_;
class TIO_PrintHandlerDisplay_c
{
public:
void* pinfoAcceptList; // Define INFO accept message filters
void* pinfoRejectList; // Define INFO reject message filters
void* pwarningAcceptList; // Define WARNING accept message filters
void* pwarningRejectList; // Define WARNING reject message filters
void* perrorAcceptList; // Define ERROR accept message filters
void* perrorRejectList; // Define ERROR reject message filters
void* ptraceAcceptList; // Define TRACE accept message filters
void* ptraceRejectList; // Define TRACE reject message filters
} display_;
class TIO_PrintHandlerCounts_c
{
public:
unsigned long warningCount; // Track total warning message count
unsigned long errorCount; // Track total error message count
unsigned long internalCount; // Track total internal message count
unsigned long maxWarningCount; // Define max warning message count
unsigned long maxErrorCount; // Define max error message count
bool isMaxWarningEnabled; // Enable max warning message check
bool isMaxErrorEnabled; // Enable max error message check
} counts_;
class TIO_PrintHandlerFormat_c
{
public:
bool timeStampsEnabled; // Enable print message time stamps
string srPrefix; // Define print message prefix
} formats_;
static TIO_PrintHandler_c* pinstance_; // Define ptr for singleton instance
private:
enum TIO_DefCapacity_e
{
TIO_DISPLAY_INFO_LIST_DEF_CAPACITY = 1,
TIO_DISPLAY_WARNING_LIST_DEF_CAPACITY = 1,
TIO_DISPLAY_ERROR_LIST_DEF_CAPACITY = 1,
TIO_DISPLAY_TRACE_LIST_DEF_CAPACITY = 1
};
};
//===========================================================================//
// Purpose : Class inline definition(s)
// Author : Jeff Rudolph
//---------------------------------------------------------------------------//
// Version history
// 05/01/12 jeffr : Original
//===========================================================================//
inline void TIO_PrintHandler_c::SetTimeStampsEnabled(
bool timeStampsEnabled )
{
this->formats_.timeStampsEnabled = timeStampsEnabled;
}
//===========================================================================//
inline void TIO_PrintHandler_c::SetPrefix(
const char* pszPrefix )
{
this->formats_.srPrefix = TIO_PSZ_STR( pszPrefix );
}
//===========================================================================//
inline void TIO_PrintHandler_c::SetPrefix(
const string& srPrefix )
{
this->formats_.srPrefix = srPrefix;
}
//===========================================================================//
inline void TIO_PrintHandler_c::ClearPrefix(
void )
{
this->formats_.srPrefix = "";
}
//===========================================================================//
inline void TIO_PrintHandler_c::SetMaxWarningCount(
unsigned long maxWarningCount )
{
this->counts_.maxWarningCount = maxWarningCount;
}
//===========================================================================//
inline void TIO_PrintHandler_c::SetMaxErrorCount(
unsigned long maxErrorCount )
{
this->counts_.maxErrorCount = maxErrorCount;
}
//===========================================================================//
inline unsigned long TIO_PrintHandler_c::GetWarningCount(
void ) const
{
return( this->counts_.warningCount );
}
//===========================================================================//
inline unsigned long TIO_PrintHandler_c::GetErrorCount(
void ) const
{
return( this->counts_.errorCount );
}
//===========================================================================//
inline unsigned long TIO_PrintHandler_c::GetInternalCount(
void ) const
{
return( this->counts_.internalCount );
}
//===========================================================================//
inline const char* TIO_PrintHandler_c::GetLogFileName(
void ) const
{
return( this->outputs_.logFileOutput.GetName( ));
}
//===========================================================================//
inline const char* TIO_PrintHandler_c::GetUserFileName(
void ) const
{
return( this->outputs_.userFileOutput.GetName( ));
}
//===========================================================================//
inline void TIO_PrintHandler_c::EnableStdioOutput(
void )
{
this->outputs_.stdioOutput.SetEnabled( this->outputs_.isStdioEnabled );
}
//===========================================================================//
inline void TIO_PrintHandler_c::EnableCustomOutput(
void )
{
this->outputs_.customOutput.SetEnabled( this->outputs_.isCustomEnabled );
}
//===========================================================================//
inline void TIO_PrintHandler_c::EnableLogFileOutput(
void )
{
this->outputs_.logFileOutput.SetEnabled( this->outputs_.isLogFileEnabled );
}
//===========================================================================//
inline void TIO_PrintHandler_c::EnableUserFileOutput(
void )
{
this->outputs_.userFileOutput.SetEnabled( this->outputs_.isUserFileEnabled );
}
//===========================================================================//
inline void TIO_PrintHandler_c::DisableStdioOutput(
void )
{
this->outputs_.stdioOutput.SetEnabled( false );
}
//===========================================================================//
inline void TIO_PrintHandler_c::DisableCustomOutput(
void )
{
this->outputs_.customOutput.SetEnabled( false );
}
//===========================================================================//
inline void TIO_PrintHandler_c::DisableLogFileOutput(
void )
{
this->outputs_.logFileOutput.SetEnabled( false );
}
//===========================================================================//
inline void TIO_PrintHandler_c::DisableUserFileOutput(
void )
{
this->outputs_.userFileOutput.SetEnabled( false );
}
//===========================================================================//
inline bool TIO_PrintHandler_c::IsStdioOutputEnabled(
void ) const
{
return( this->outputs_.isStdioEnabled );
}
//===========================================================================//
inline bool TIO_PrintHandler_c::IsCustomOutputEnabled(
void ) const
{
return( this->outputs_.isCustomEnabled );
}
//===========================================================================//
inline bool TIO_PrintHandler_c::IsLogFileOutputEnabled(
void ) const
{
return( this->outputs_.isLogFileEnabled );
}
//===========================================================================//
inline bool TIO_PrintHandler_c::IsUserFileOutputEnabled(
void ) const
{
return( this->outputs_.isUserFileEnabled );
}
#endif