-/*******************************************************************************
-
- 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.
-
-*******************************************************************************/
-
-#include <cstdarg>
-#include <cstdio> // snprintf
-#include <cstring> // strcpy
+/*] 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.
+*
+**************************************************************************/
+
+#include <fstream>
#include "Log.hh"
+#include "Script.hh"
namespace Mf {
-static LogLevel logLevel_ = WARNING;
+Log::Level Log::gLevel = Log::INFO;
-static void printLog_(int logLevel, const char* fmt, va_list args)
-{
- if (logLevel_ < logLevel) return;
- switch (logLevel)
- {
- case ERROR:
- fprintf(stderr, " error: ");
- break;
- case WARNING:
- fprintf(stderr, "warning: ");
- break;
- case INFO:
- fprintf(stderr, " info: ");
- break;
- case DEBUGGING:
- fprintf(stderr, " debug: ");
- break;
- }
-
- vfprintf(stderr, fmt, args);
- fprintf(stderr, "\n");
+void Log::setLevel(Level level)
+{
+ gLevel = level;
}
-
-LogLevel setLogLevel(LogLevel level)
+Log::Level Log::getLevel()
{
- if (level != 0)
- logLevel_ = level;
-
- return logLevel_;
+ return gLevel;
}
-void
-logError(const char* fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
+std::ostream& log(std::clog);
- printLog_(ERROR, fmt, args);
+static std::ofstream nullLog_;
+std::ostream& nullLog(nullLog_);
- va_end(args);
-}
+Log logError(Log::ERRORR, " error: ");
+Log logWarning(Log::WARNING, "warning: ");
+Log logInfo(Log::INFO, " info: ");
-void
-logWarning(const char* fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
- printLog_(WARNING, fmt, args);
-
- va_end(args);
-}
-
-void
-logInfo(const char* fmt, ...)
+static int logScript_(Script& script, Log::Level level)
{
- va_list args;
- va_start(args, fmt);
+ static Log* logs[] = {0, &logError, &logWarning, &logInfo};
- printLog_(INFO, fmt, args);
+ Script::Slot param = script[1];
- va_end(args);
-}
+ while (!param.isNone())
+ {
+ (*logs[level])(param);
+ ++param.index;
+ }
-void
-logDebug(const char* fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
+ return 0;
+}
- printLog_(DEBUGGING, fmt, args);
- va_end(args);
+void importLogFunctions(Script& script)
+{
+ script.importFunction("LogError",
+ boost::bind(logScript_, _1, Log::ERRORR));
+ script.importFunction("LogWarning",
+ boost::bind(logScript_, _1, Log::WARNING));
+ script.importFunction("LogInfo",
+ boost::bind(logScript_, _1, Log::INFO));
+ script.importFunction("print",
+ boost::bind(logScript_, _1, Log::INFO));
}