From 98f6ff61fb5c3be6357bbd9154dc5de9d5e315ba Mon Sep 17 00:00:00 2001 From: darkeye Date: Thu, 16 Nov 2000 08:48:43 +0000 Subject: [PATCH] added multiple verbosity-level event reporting and verbosity command line option --- darkice/trunk/src/Reporter.cpp | 74 +++++++++++ darkice/trunk/src/Reporter.h | 217 +++++++++++++++++++++++++++++++++ 2 files changed, 291 insertions(+) create mode 100644 darkice/trunk/src/Reporter.cpp create mode 100644 darkice/trunk/src/Reporter.h diff --git a/darkice/trunk/src/Reporter.cpp b/darkice/trunk/src/Reporter.cpp new file mode 100644 index 0000000..beb670d --- /dev/null +++ b/darkice/trunk/src/Reporter.cpp @@ -0,0 +1,74 @@ +/*------------------------------------------------------------------------------ + + Copyright (c) 2000 Tyrell Corporation. All rights reserved. + + Tyrell Reporter + + File : Reporter.cpp + Version : $Revision$ + Author : $Author$ + Location : $Source$ + + Copyright notice: + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +------------------------------------------------------------------------------*/ + +/* ============================================================ include files */ + +#include + +#include "Reporter.h" + + +/* =================================================== local data structures */ + + +/* ================================================ local constants & macros */ + +/*------------------------------------------------------------------------------ + * File identity + *----------------------------------------------------------------------------*/ +static const char fileid[] = "$Id$"; + + +/*------------------------------------------------------------------------------ + * Initial values for static members of the class + *----------------------------------------------------------------------------*/ +unsigned int Reporter::verbosity = 1; +ostream * Reporter::os = &cout; + + +/* =============================================== local function prototypes */ + + +/* ============================================================= module code */ + + + +/*------------------------------------------------------------------------------ + + $Source$ + + $Log$ + Revision 1.1 2000/11/16 08:48:43 darkeye + added multiple verbosity-level event reporting and verbosity command + line option + + + +------------------------------------------------------------------------------*/ + diff --git a/darkice/trunk/src/Reporter.h b/darkice/trunk/src/Reporter.h new file mode 100644 index 0000000..caf0424 --- /dev/null +++ b/darkice/trunk/src/Reporter.h @@ -0,0 +1,217 @@ +/*------------------------------------------------------------------------------ + + Copyright (c) 2000 Tyrell Corporation. All rights reserved. + + Tyrell Reporter + + File : Reporter.h + Version : $Revision$ + Author : $Author$ + Location : $Source$ + + Copyright notice: + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +------------------------------------------------------------------------------*/ +#ifndef REPORTER_H +#define REPORTER_H + +#ifndef __cplusplus +#error This is a C++ include file +#endif + + +/* ============================================================ include files */ + +#ifdef HAVE_CONFIG_H +#include "configure.h" +#endif + +#ifdef HAVE_UNISTD_H +#include +#else +#error need unistdt.h +#endif + + +#include + + +/* ================================================================ constants */ + + +/* =================================================================== macros */ + + +/* =============================================================== data types */ + +/** + * Class for reporting events. All objects of this class share + * the same verbosity level. Typical usage is to inherit this class + * and use the report() function to report events. Only reports + * which are of suffucient importance are really reported. + * + * The default verbosity is 1, and the default ostream is cout. + * + * Known problems: this class is not thread-safe. + * + * @author $Author$ + * @version $Revision$ + */ +class Reporter +{ + + + private: + + /** + * Verbosity level shared among all Reporter objects + */ + static unsigned int verbosity; + + /** + * The output stream to report to. + */ + static ostream * os; + + + protected: + + + public: + + /** + * Destructor. + * + * @exception Exception + */ + inline virtual + ~Reporter ( void ) throw () + { + (Reporter::os)->flush(); + } + + /** + * Set the verbosity level. This sets the verbosity for all + * Reporter objects. + * + * @param verbosity the new verbosity level. + */ + inline void + setReportVerbosity ( unsigned int verbosity ) throw () + { + Reporter::verbosity = verbosity; + } + + /** + * Get the verbosity level. + * + * @return the current verbosity level. + */ + inline unsigned int + getReportVerbosity ( void ) throw () + { + return Reporter::verbosity; + } + + /** + * Set the output stream to report to. This setting effects all + * Reporter objects. + * + * @param os the output stream + */ + inline void + setReportOutputStream ( ostream & os ) throw () + { + Reporter::os = &os; + } + + /** + * Get the output stream to report to. + * + * @return the output stream + */ + inline ostream & + getReportOutputStream ( void ) throw () + { + return *(Reporter::os); + } + + /** + * Report an event with a given verbosity. + * + * @param verbosity the importance of the event, with 0 being + * the most important. + * @param message the message to report. + */ + inline void + reportEvent ( unsigned int verbosity, + const char * message ) throw () + { + if ( Reporter::verbosity >= verbosity ) { + (*(Reporter::os)) << getpid() << ": " + << message << endl; + } + } + + /** + * Report an event with a given verbosity. + * + * @param verbosity the importance of the event, with 0 being + * the most important. + * @param message1 the message to report part 1. + * @param message2 the message to report part 2. + */ + template + inline void + reportEvent ( unsigned int verbosity, + const char * message1, + const T t ) throw () + { + if ( Reporter::verbosity >= verbosity ) { + (*(Reporter::os)) << getpid() << ": " + << message1 << " " << t << endl; + } + } + +}; + + + + +/* ================================================= external data structures */ + + +/* ====================================================== function prototypes */ + + + +#endif /* REPORTER_H */ + + +/*------------------------------------------------------------------------------ + + $Source$ + + $Log$ + Revision 1.1 2000/11/16 08:48:43 darkeye + added multiple verbosity-level event reporting and verbosity command + line option + + + +------------------------------------------------------------------------------*/ +