]> Dogcows Code - chaz/yoink/blobdiff - src/Moof/Log.hh
sockets documentation and cleanup
[chaz/yoink] / src / Moof / Log.hh
index 1f9d0c6b084d9a6f404f3ec756d7c6eb9418c9c2..324fdeed8555b0c747c1fd8eecacae903496cac7 100644 (file)
@@ -1,30 +1,13 @@
 
-/*******************************************************************************
-
- Copyright (c) 2009, Charles McGarvey
- All rights reserved.
- Redistribution   and   use  in  source  and  binary  forms,  with  or  without
- modification, are permitted provided that the following conditions are met:
-   * Redistributions  of  source  code  must retain the above copyright notice,
-     this list of conditions and the following disclaimer.
-   * Redistributions  in binary form must reproduce the above copyright notice,
-     this  list of conditions and the following disclaimer in the documentation
-     and/or other materials provided with the distribution.
- THIS  SOFTWARE  IS  PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND  ANY  EXPRESS  OR  IMPLIED  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED.  IN  NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- FOR  ANY  DIRECT,  INDIRECT,  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES  (INCLUDING,  BUT  NOT  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES;  LOSS  OF  USE,  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED  AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-*******************************************************************************/
+/*]  Copyright (c) 2009-2010, Charles McGarvey  [**************************
+**]  All rights reserved.
+*
+* vi:ts=4 sw=4 tw=75
+*
+* Distributable under the terms and conditions of the 2-clause BSD license;
+* see the file COPYING for a complete text of the license.
+*
+**************************************************************************/
 
 #ifndef _MOOF_LOG_H_
 #define _MOOF_LOG_H_
 /**
  * @file log.h
  * Functions related to logging the process.
- * The logging functions are logError(), logWarning(), logInfo(), and
- * logDebug(), listed from most critical to least critical.
+ * The logging functions are logError(), logWarning(), and logInfo(),
+ * listed from most critical to least critical.
  */
 
 #include <cstdlib>             // exit
+#include <iostream>
 
 
 /**
- * Macro which tests an assertion and issues an logError() and exits if false.
+ * Macro which tests an assertion and issues an logError() and exits if
+ * false.
  * @param X test to perform
  */
 
-#if ! NDEBUG
-#define ASSERT(X) if (!(X)) Mf::logError("false assertion at %s:%d, " #X, \
-               __FILE__, __LINE__), exit(1)
-#else
+#undef ASSERT
+
+#if NDEBUG
 #define ASSERT(X)
+#else
+#define ASSERT(X) if (!(X)) Mf::logError \
+       << "false assertion at " << __FILE__ << ":" << __LINE__ << ", " \
+       << #X, exit(1)
 #endif
 
 
 namespace Mf {
 
 
-/**
- * Possible values used for setting the log level using LogLevel().  Log
- * messages of lesser importance than the level specified are ignored.
- * @see LogLevel()
- */
-
-enum LogLevel
+class Log
 {
-       LOG_NONE                = -1,           ///< Disable all logging.
-       LOG_ERROR               =  1,           ///< Log only errors.
-       LOG_WARNING             =  2,           ///< Log warnings and errors.
-       LOG_SCRIPT              =  3,           ///< Log messages from Lua, too.
-       LOG_INFO                =  4,           ///< Log info, warnings, errors.
-       LOG_DEBUG               =  5,           ///< Log all messages.
-};
+public:
 
+       enum Level
+       {
+               NONE            = 0,            ///< Disable all logging.
+               ERRORR          = 1,            ///< Log only errors.
+               WARNING         = 2,            ///< Log warnings and errors.
+               INFO            = 3,            ///< Log everything.
+       };
 
-/**
- * Set and/or get the level of logs which will be logged.  If not called,
- * defaults to WARNING
- * @param level LOG_LEVEL_* constant or 0 for no change.
- * @return The currently set log level.
- */
+       static void setLevel(Level level);
+       static Level getLevel();
 
-LogLevel setLogLevel(LogLevel level);
 
+       Log(Level level, const char* type) :
+               mLevel(level),
+               mType(type) /* only pass literal strings */ {}
 
-/**
- * Log an error.
- * @param fmt Log format string.
- * @param ... Extra format arguments.
- */
 
-void logError(const char* fmt, ...);
+       template <class T>
+       void operator () (const T& item)
+       {
+               *this << item << std::endl;
+       }
 
-/**
- * Log a warning.
- * @param fmt Log format string.
- * @param ... Extra format arguments.
- */
+private:
 
-void logWarning(const char* fmt, ...);
+       template <class T> friend std::ostream& operator << (Log&, const T&);
 
-/**
- * Log a message.
- * @param fmt Log format string.
- * @param ... Extra format arguments.
- */
+       static Level    gLevel;
 
-void logInfo(const char* fmt, ...);
+       Level                   mLevel;
+       const char*             mType;
+};
 
-/**
- * Log a debug message.
- * @param fmt Log format string.
- * @param ... Extra format arguments.
- */
 
-void logDebug(const char* fmt, ...);
+extern std::ostream&   log;
+extern std::ostream&   nullLog;
+
+extern Log logError;
+extern Log logWarning;
+extern Log logInfo;
+
+
+template <class T>
+inline std::ostream& operator << (Log& logObj, const T& item)
+{
+       if (Log::gLevel < logObj.mLevel) return nullLog;
+       return log << logObj.mType << item;
+}
+
 
-void logScript(const char* fmt, ...);
 class Script;
-int logScript(Script& script);
-void importLogScript(Script& script);
+void importLogFunctions(Script& script);
 
 
 } // namespace Mf
This page took 0.019868 seconds and 4 git commands to generate.