summaryrefslogtreecommitdiffstats
path: root/src/common
diff options
context:
space:
mode:
authorPiotr Dziwinski <piotrdz@gmail.com>2013-03-10 15:44:21 +0100
committerPiotr Dziwinski <piotrdz@gmail.com>2013-03-10 15:44:21 +0100
commitbc859c4c597f106d40f07380bf255f180d565577 (patch)
tree177b7a904a128341f033251fd6a7011fa5644439 /src/common
parent1f565fdf389542eb0296bf7f685716200c559538 (diff)
downloadcolobot-bc859c4c597f106d40f07380bf255f180d565577.tar.gz
colobot-bc859c4c597f106d40f07380bf255f180d565577.tar.bz2
colobot-bc859c4c597f106d40f07380bf255f180d565577.zip
VBO override option; argv parsing using getopt
* added -vbo option to override autodetection of OpenGL VBO extension * refactored argument parsing to use getopt() * fixed failing UTs
Diffstat (limited to 'src/common')
-rw-r--r--src/common/logger.cpp82
-rw-r--r--src/common/logger.h131
2 files changed, 137 insertions, 76 deletions
diff --git a/src/common/logger.cpp b/src/common/logger.cpp
index 3ec9746..8bc4cef 100644
--- a/src/common/logger.cpp
+++ b/src/common/logger.cpp
@@ -36,25 +36,37 @@ CLogger::~CLogger()
}
-void CLogger::Log(LogType type, const char *str, va_list args)
+void CLogger::Log(LogLevel type, const char* str, va_list args)
{
if (type < mLogLevel)
return;
- switch (type) {
- case LOG_TRACE: fprintf(IsOpened() ? mFile : stderr, "[TRACE]: "); break;
- case LOG_DEBUG: fprintf(IsOpened() ? mFile : stderr, "[DEBUG]: "); break;
- case LOG_WARN: fprintf(IsOpened() ? mFile : stderr, "[WARN]: "); break;
- case LOG_INFO: fprintf(IsOpened() ? mFile : stderr, "[INFO]: "); break;
- case LOG_ERROR: fprintf(IsOpened() ? mFile : stderr, "[ERROR]: "); break;
- default: break;
+ switch (type)
+ {
+ case LOG_TRACE:
+ fprintf(IsOpened() ? mFile : stderr, "[TRACE]: ");
+ break;
+ case LOG_DEBUG:
+ fprintf(IsOpened() ? mFile : stderr, "[DEBUG]: ");
+ break;
+ case LOG_WARN:
+ fprintf(IsOpened() ? mFile : stderr, "[WARN]: ");
+ break;
+ case LOG_INFO:
+ fprintf(IsOpened() ? mFile : stderr, "[INFO]: ");
+ break;
+ case LOG_ERROR:
+ fprintf(IsOpened() ? mFile : stderr, "[ERROR]: ");
+ break;
+ default:
+ break;
}
vfprintf(IsOpened() ? mFile : stderr, str, args);
}
-void CLogger::Trace(const char *str, ...)
+void CLogger::Trace(const char* str, ...)
{
va_list args;
va_start(args, str);
@@ -63,7 +75,7 @@ void CLogger::Trace(const char *str, ...)
}
-void CLogger::Debug(const char *str, ...)
+void CLogger::Debug(const char* str, ...)
{
va_list args;
va_start(args, str);
@@ -72,7 +84,7 @@ void CLogger::Debug(const char *str, ...)
}
-void CLogger::Info(const char *str, ...)
+void CLogger::Info(const char* str, ...)
{
va_list args;
va_start(args, str);
@@ -81,7 +93,7 @@ void CLogger::Info(const char *str, ...)
}
-void CLogger::Warn(const char *str, ...)
+void CLogger::Warn(const char* str, ...)
{
va_list args;
va_start(args, str);
@@ -90,7 +102,7 @@ void CLogger::Warn(const char *str, ...)
}
-void CLogger::Error(const char *str, ...)
+void CLogger::Error(const char* str, ...)
{
va_list args;
va_start(args, str);
@@ -99,7 +111,7 @@ void CLogger::Error(const char *str, ...)
}
-void CLogger::Message(const char *str, ...)
+void CLogger::Message(const char* str, ...)
{
va_list args;
va_start(args, str);
@@ -118,6 +130,7 @@ void CLogger::SetOutputFile(std::string filename)
void CLogger::Open()
{
mFile = fopen(mFilename.c_str(), "w");
+
if (mFile == NULL)
fprintf(stderr, "Could not create file %s\n", mFilename.c_str());
}
@@ -136,6 +149,45 @@ bool CLogger::IsOpened()
}
-void CLogger::SetLogLevel(LogType type) {
+void CLogger::SetLogLevel(LogLevel type)
+{
mLogLevel = type;
}
+
+
+bool CLogger::ParseLogLevel(const std::string& str, LogLevel& logLevel)
+{
+ if (str == "trace")
+ {
+ logLevel = LOG_TRACE;
+ return true;
+ }
+ else if (str == "debug")
+ {
+ logLevel = LOG_DEBUG;
+ return true;
+ }
+ else if (str == "info")
+ {
+ logLevel = LOG_INFO;
+ return true;
+ }
+ else if (str == "warn")
+ {
+ logLevel = LOG_WARN;
+ return true;
+ }
+ else if (str == "error")
+ {
+ logLevel = LOG_ERROR;
+ return true;
+ }
+ else if (str == "none")
+ {
+ logLevel = LOG_NONE;
+ return true;
+ }
+
+ return false;
+}
+
diff --git a/src/common/logger.h b/src/common/logger.h
index 198e5e5..769f548 100644
--- a/src/common/logger.h
+++ b/src/common/logger.h
@@ -31,10 +31,10 @@
/**
* \public
- * \enum LogType common/logger.h
+ * \enum LogLevel common/logger.h
* \brief Enum representing log level
**/
-enum LogType
+enum LogLevel
{
LOG_TRACE = 1, /*!< lowest level, execution tracing */
LOG_DEBUG = 2, /*!< debugging messages */
@@ -53,65 +53,74 @@ enum LogType
*/
class CLogger : public CSingleton<CLogger>
{
- public:
- CLogger();
- ~CLogger();
-
- /** Write message to console or file
- * \param str - message to write
- * \param ... - additional arguments
- */
- void Message(const char *str, ...);
-
- /** Write message to console or file with LOG_TRACE level
- * \param str - message to write
- * \param ... - additional arguments
- */
- void Trace(const char *str, ...);
-
- /** Write message to console or file with LOG_DEBUG level
- * \param str - message to write
- * \param ... - additional arguments
- */
- void Debug(const char *str, ...);
-
- /** Write message to console or file with LOG_INFO level
- * \param str - message to write
- * \param ... - additional arguments
- */
- void Info(const char *str, ...);
-
- /** Write message to console or file with LOG_WARN level
- * \param str - message to write
- * \param ... - additional arguments
- */
- void Warn(const char *str, ...);
-
- /** Write message to console or file with LOG_ERROR level
- * \param str - message to write
- * \param ... - additional arguments
- */
- void Error(const char *str, ...);
-
- /** Set output file to write logs to
- * \param filename - output file to write to
- */
- void SetOutputFile(std::string filename);
-
- /** Set log level. Logs with level below will not be shown
- * \param level - minimum log level to write
- */
- void SetLogLevel(LogType level);
-
- private:
- std::string mFilename;
- FILE *mFile;
- LogType mLogLevel;
-
- void Open();
- void Close();
- bool IsOpened();
- void Log(LogType type, const char* str, va_list args);
+public:
+ CLogger();
+ ~CLogger();
+
+ /** Write message to console or file
+ * \param str - message to write
+ * \param ... - additional arguments
+ */
+ void Message(const char *str, ...);
+
+ /** Write message to console or file with LOG_TRACE level
+ * \param str - message to write
+ * \param ... - additional arguments
+ */
+ void Trace(const char *str, ...);
+
+ /** Write message to console or file with LOG_DEBUG level
+ * \param str - message to write
+ * \param ... - additional arguments
+ */
+ void Debug(const char *str, ...);
+
+ /** Write message to console or file with LOG_INFO level
+ * \param str - message to write
+ * \param ... - additional arguments
+ */
+ void Info(const char *str, ...);
+
+ /** Write message to console or file with LOG_WARN level
+ * \param str - message to write
+ * \param ... - additional arguments
+ */
+ void Warn(const char *str, ...);
+
+ /** Write message to console or file with LOG_ERROR level
+ * \param str - message to write
+ * \param ... - additional arguments
+ */
+ void Error(const char *str, ...);
+
+ /** Set output file to write logs to
+ * \param filename - output file to write to
+ */
+ void SetOutputFile(std::string filename);
+
+ /** Set log level. Logs with level below will not be shown
+ * \param level - minimum log level to write
+ */
+ void SetLogLevel(LogLevel level);
+
+ /** Parses string as a log level
+ * \param str string to parse
+ * \param logLevel result log level
+ *
+ * Valid values are "trace", "debug", "info", "warn", "error" and "none".
+ * On invalid value, returns \c false.
+ */
+ static bool ParseLogLevel(const std::string& str, LogLevel& logLevel);
+
+private:
+ std::string mFilename;
+ FILE *mFile;
+ LogLevel mLogLevel;
+
+ void Open();
+ void Close();
+ bool IsOpened();
+ void Log(LogLevel type, const char* str, va_list args);
};