summaryrefslogtreecommitdiffstats
path: root/src/common
diff options
context:
space:
mode:
authorPiotr Dziwinski <piotrdz@gmail.com>2012-07-04 19:56:22 +0200
committerPiotr Dziwinski <piotrdz@gmail.com>2012-07-04 19:56:22 +0200
commitaf3057df7eb41973349b407539846f17d9094c21 (patch)
tree0940a188a0cfc43a99505f55513516866a57d145 /src/common
parentf95df35dc58e01b99ffddfc4ad394feaa4460b09 (diff)
downloadcolobot-af3057df7eb41973349b407539846f17d9094c21.tar.gz
colobot-af3057df7eb41973349b407539846f17d9094c21.tar.bz2
colobot-af3057df7eb41973349b407539846f17d9094c21.zip
Merged changes from dev
Resolved conflicts & added fixes.
Diffstat (limited to 'src/common')
-rw-r--r--src/common/logger.cpp136
-rw-r--r--src/common/logger.h111
-rw-r--r--src/common/profile.cpp12
-rw-r--r--src/common/profile.h12
-rw-r--r--src/common/singleton.h57
5 files changed, 316 insertions, 12 deletions
diff --git a/src/common/logger.cpp b/src/common/logger.cpp
new file mode 100644
index 0000000..41d60eb
--- /dev/null
+++ b/src/common/logger.cpp
@@ -0,0 +1,136 @@
+// * This file is part of the COLOBOT source code
+// * Copyright (C) 2012, Polish Portal of Colobot (PPC)
+// *
+// * 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 3 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, see http://www.gnu.org/licenses/.
+
+// logger.cpp
+
+#include <common/logger.h>
+
+#include <stdio.h>
+
+
+template<> CLogger* CSingleton<CLogger>::mInstance = 0;
+
+
+CLogger& CLogger::GetInstance()
+{
+ assert(mInstance);
+ return *mInstance;
+}
+
+
+CLogger* CLogger::GetInstancePointer()
+{
+ assert(mInstance);
+ return mInstance;
+}
+
+
+CLogger::CLogger()
+{
+ mFile = NULL;
+ mLogLevel = LOG_INFO;
+}
+
+
+CLogger::~CLogger()
+{
+ Close();
+}
+
+
+void CLogger::Log(LogType type, const char *str, va_list args)
+{
+ if (type < mLogLevel)
+ return;
+
+ switch (type) {
+ 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::Info(const char *str, ...)
+{
+ va_list args;
+ va_start(args, str);
+ Log(LOG_INFO, str, args);
+ va_end(args);
+}
+
+
+void CLogger::Warn(const char *str, ...)
+{
+ va_list args;
+ va_start(args, str);
+ Log(LOG_WARN, str, args);
+ va_end(args);
+}
+
+
+void CLogger::Error(const char *str, ...)
+{
+ va_list args;
+ va_start(args, str);
+ Log(LOG_ERROR, str, args);
+ va_end(args);
+}
+
+
+void CLogger::Message(const char *str, ...)
+{
+ va_list args;
+ va_start(args, str);
+ Log(LOG_NONE, str, args);
+ va_end(args);
+}
+
+
+void CLogger::SetOutputFile(std::string filename)
+{
+ mFilename = filename;
+ Open();
+}
+
+
+void CLogger::Open()
+{
+ mFile = fopen(mFilename.c_str(), "w");
+ if (mFile == NULL)
+ fprintf(stderr, "Could not create file %s\n", mFilename.c_str());
+}
+
+
+void CLogger::Close()
+{
+ if (IsOpened())
+ fclose(mFile);
+}
+
+
+bool CLogger::IsOpened()
+{
+ return mFile != NULL;
+}
+
+
+void CLogger::SetLogLevel(LogType type) {
+ mLogLevel = type;
+}
diff --git a/src/common/logger.h b/src/common/logger.h
new file mode 100644
index 0000000..1b3829c
--- /dev/null
+++ b/src/common/logger.h
@@ -0,0 +1,111 @@
+// * This file is part of the COLOBOT source code
+// * Copyright (C) 2012, Polish Portal of Colobot (PPC)
+// *
+// * 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 3 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, see http://www.gnu.org/licenses/.
+
+// logger.h
+
+
+#pragma once
+
+#include <string>
+#include <cstdarg>
+
+#include <common/singleton.h>
+
+/**
+ * @file common/logger.h
+ * @brief Class for loggin information to file or console
+ */
+
+
+/**
+ * \public
+ * \enum LogType common/logger.h
+ * \brief Enum representing log level
+**/
+enum LogType
+{
+ LOG_INFO = 1, /*!< lowest level, information */
+ LOG_WARN = 2, /*!< warning */
+ LOG_ERROR = 3, /*!< error */
+ LOG_NONE = 4 /*!< none level, used for custom messages */
+};
+
+
+/**
+* @class CLogger
+*
+* @brief Class for loggin information to file or console
+*
+*/
+class CLogger : public CSingleton<CLogger>
+{
+ public:
+ CLogger();
+ ~CLogger();
+
+ /** Write message to console or file
+ * @param const char str - message to write
+ * @param ... - additional arguments
+ */
+ void Message(const char *str, ...);
+
+ /** Write message to console or file with LOG_INFO level
+ * @param const char str - message to write
+ * @param ... - additional arguments
+ */
+ void Info(const char *str, ...);
+
+ /** Write message to console or file with LOG_WARN level
+ * @param const char str - message to write
+ * @param ... - additional arguments
+ */
+ void Warn(const char *str, ...);
+
+ /** Write message to console or file with LOG_ERROR level
+ * @param const char str - message to write
+ * @param ... - additional arguments
+ */
+ void Error(const char *str, ...);
+
+ /** Set output file to write logs to
+ * @param std::string filename - output file to write to
+ */
+ void SetOutputFile(std::string filename);
+
+ /** Set log level. Logs with level below will not be shown
+ * @param LogType level - minimum log level to write
+ */
+ void SetLogLevel(LogType level);
+
+ static CLogger& GetInstance();
+ static CLogger* GetInstancePointer();
+
+ private:
+ std::string mFilename;
+ FILE *mFile;
+ LogType mLogLevel;
+
+ void Open();
+ void Close();
+ bool IsOpened();
+ void Log(LogType type, const char* str, va_list args);
+};
+
+
+//! Global function to get Logger instance
+inline CLogger* GetLogger() {
+ return CLogger::GetInstancePointer();
+}
diff --git a/src/common/profile.cpp b/src/common/profile.cpp
index 07dafae..d921d34 100644
--- a/src/common/profile.cpp
+++ b/src/common/profile.cpp
@@ -42,13 +42,13 @@ bool InitCurrentDirectory()
}
-bool SetProfileString(char* section, char* key, char* string)
+bool SetLocalProfileString(char* section, char* key, char* string)
{
WritePrivateProfileString(section, key, string, g_filename);
return true;
}
-bool GetProfileString(char* section, char* key, char* buffer, int max)
+bool GetLocalProfileString(char* section, char* key, char* buffer, int max)
{
int nb;
@@ -62,7 +62,7 @@ bool GetProfileString(char* section, char* key, char* buffer, int max)
}
-bool SetProfileInt(char* section, char* key, int value)
+bool SetLocalProfileInt(char* section, char* key, int value)
{
char s[20];
@@ -71,7 +71,7 @@ bool SetProfileInt(char* section, char* key, int value)
return true;
}
-bool GetProfileInt(char* section, char* key, int &value)
+bool GetLocalProfileInt(char* section, char* key, int &value)
{
char s[20];
int nb;
@@ -87,7 +87,7 @@ bool GetProfileInt(char* section, char* key, int &value)
}
-bool SetProfileFloat(char* section, char* key, float value)
+bool SetLocalProfileFloat(char* section, char* key, float value)
{
char s[20];
@@ -96,7 +96,7 @@ bool SetProfileFloat(char* section, char* key, float value)
return true;
}
-bool GetProfileFloat(char* section, char* key, float &value)
+bool GetLocalProfileFloat(char* section, char* key, float &value)
{
char s[20];
int nb;
diff --git a/src/common/profile.h b/src/common/profile.h
index 1a36050..2c76a0b 100644
--- a/src/common/profile.h
+++ b/src/common/profile.h
@@ -20,11 +20,11 @@
extern bool InitCurrentDirectory();
-extern bool SetProfileString(char* section, char* key, char* string);
-extern bool GetProfileString(char* section, char* key, char* buffer, int max);
-extern bool SetProfileInt(char* section, char* key, int value);
-extern bool GetProfileInt(char* section, char* key, int &value);
-extern bool SetProfileFloat(char* section, char* key, float value);
-extern bool GetProfileFloat(char* section, char* key, float &value);
+extern bool SetLocalProfileString(char* section, char* key, char* string);
+extern bool GetLocalProfileString(char* section, char* key, char* buffer, int max);
+extern bool SetLocalProfileInt(char* section, char* key, int value);
+extern bool GetLocalProfileInt(char* section, char* key, int &value);
+extern bool SetLocalProfileFloat(char* section, char* key, float value);
+extern bool GetLocalProfileFloat(char* section, char* key, float &value);
diff --git a/src/common/singleton.h b/src/common/singleton.h
new file mode 100644
index 0000000..dc09645
--- /dev/null
+++ b/src/common/singleton.h
@@ -0,0 +1,57 @@
+// * This file is part of the COLOBOT source code
+// * Copyright (C) 2012, Polish Portal of Colobot (PPC)
+// *
+// * 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 3 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, see http://www.gnu.org/licenses/.
+
+// singleton.h
+
+
+#pragma once
+
+#include <cassert>
+
+
+template<typename T> class CSingleton
+{
+ protected:
+ static T* mInstance;
+
+ public:
+ static T& GetInstance() {
+ aserrt(mInstance);
+ return *mInstance;
+ }
+
+ static T& GetInstancePointer() {
+ aserrt(mInstance);
+ return mInstance;
+ }
+
+ static bool IsCreated() {
+ return mInstance != NULL;
+ }
+
+ CSingleton() {
+ assert(!mInstance);
+ mInstance = static_cast<T *>(this);
+ }
+
+ ~CSingleton() {
+ mInstance = NULL;
+ }
+
+ private:
+ CSingleton& operator=(const CSingleton<T> &);
+ CSingleton(const CSingleton<T> &);
+};