summaryrefslogtreecommitdiffstats
path: root/src/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/common')
-rw-r--r--src/common/event.h4
-rw-r--r--src/common/iman.h4
-rw-r--r--src/common/logger.cpp14
-rw-r--r--src/common/logger.h3
-rw-r--r--src/common/profile.cpp21
-rw-r--r--src/common/profile.h69
-rw-r--r--src/common/test/CMakeLists.txt2
-rw-r--r--src/common/test/colobot.ini7
-rw-r--r--src/common/test/profile_test.cpp8
9 files changed, 106 insertions, 26 deletions
diff --git a/src/common/event.h b/src/common/event.h
index 0d9aa7c..54086d4 100644
--- a/src/common/event.h
+++ b/src/common/event.h
@@ -19,8 +19,8 @@
#pragma once
-#include "common/key.h"
-#include "math/point.h"
+#include <common/key.h>
+#include <math/point.h>
#include <string.h>
diff --git a/src/common/iman.h b/src/common/iman.h
index 38e5f37..89b5206 100644
--- a/src/common/iman.h
+++ b/src/common/iman.h
@@ -18,8 +18,8 @@
#pragma once
-#include "common/singleton.h"
-#include "common/misc.h"
+#include <common/singleton.h>
+#include <common/misc.h>
diff --git a/src/common/logger.cpp b/src/common/logger.cpp
index a0dcca0..be73ec7 100644
--- a/src/common/logger.cpp
+++ b/src/common/logger.cpp
@@ -24,20 +24,6 @@
template<> CLogger* CSingleton<CLogger>::mInstance = nullptr;
-CLogger& CLogger::GetInstance()
-{
- assert(mInstance);
- return *mInstance;
-}
-
-
-CLogger* CLogger::GetInstancePointer()
-{
- assert(mInstance);
- return mInstance;
-}
-
-
CLogger::CLogger()
{
mFile = NULL;
diff --git a/src/common/logger.h b/src/common/logger.h
index 2d0ab3e..4febff0 100644
--- a/src/common/logger.h
+++ b/src/common/logger.h
@@ -91,9 +91,6 @@ class CLogger : public CSingleton<CLogger>
*/
void SetLogLevel(LogType level);
- static CLogger& GetInstance();
- static CLogger* GetInstancePointer();
-
private:
std::string mFilename;
FILE *mFile;
diff --git a/src/common/profile.cpp b/src/common/profile.cpp
index 467e991..29a68e1 100644
--- a/src/common/profile.cpp
+++ b/src/common/profile.cpp
@@ -27,6 +27,7 @@ CProfile::CProfile()
{
m_ini = new CSimpleIniA();
m_ini->SetUnicode();
+ m_ini->SetMultiKey();
}
@@ -39,8 +40,8 @@ CProfile::~CProfile()
bool CProfile::InitCurrentDirectory()
{
- m_ini->LoadFile("colobot.ini");
- return true;
+ bool result = m_ini->LoadFile("colobot.ini") == SI_OK;
+ return result;
}
@@ -86,3 +87,19 @@ bool CProfile::GetLocalProfileFloat(std::string section, std::string key, float
value = m_ini->GetDoubleValue(section.c_str(), key.c_str(), 0.0d);
return true;
}
+
+
+std::vector< std::string > CProfile::GetLocalProfileSection(std::string section, std::string key)
+{
+ std::vector< std::string > ret_list;
+
+ CSimpleIniA::TNamesDepend values;
+ m_ini->GetAllValues(section.c_str(), key.c_str(), values);
+ values.sort(CSimpleIniA::Entry::LoadOrder());
+
+ for (auto item : values) {
+ ret_list.push_back(item.pItem);
+ }
+
+ return ret_list;
+}
diff --git a/src/common/profile.h b/src/common/profile.h
index ae67e52..0886522 100644
--- a/src/common/profile.h
+++ b/src/common/profile.h
@@ -19,31 +19,96 @@
#pragma once
#include <cstdlib>
+#include <vector>
+#include <utility>
#include <lib/simpleini/SimpleIni.h>
#include <common/singleton.h>
+/**
+ * @file common/profile.h
+ * @brief Class for loading profile (currently for loading ini config file)
+ */
+
+/**
+* @class CProfile
+*
+* @brief Class for loading profile (currently for loading ini config file)
+*
+*/
class CProfile : public CSingleton<CProfile>
{
public:
CProfile();
~CProfile();
+ /** Loads colobot.ini from current directory
+ * @return return true on success
+ */
bool InitCurrentDirectory();
+
+ /** Sets string value in section under specified key
+ * @param std::string section
+ * @param std::string key
+ * @param std::string value
+ * @return return true on success
+ */
bool SetLocalProfileString(std::string section, std::string key, std::string value);
+
+ /** Gets string value in section under specified key
+ * @param std::string section
+ * @param std::string key
+ * @param std::string& buffer
+ * @return return true on success
+ */
bool GetLocalProfileString(std::string section, std::string key, std::string& buffer);
+ /** Sets int value in section under specified key
+ * @param std::string section
+ * @param std::string key
+ * @param int value
+ * @return return true on success
+ */
bool SetLocalProfileInt(std::string section, std::string key, int value);
+
+ /** Gets int value in section under specified key
+ * @param std::string section
+ * @param std::string key
+ * @param int& value
+ * @return return true on success
+ */
bool GetLocalProfileInt(std::string section, std::string key, int &value);
+ /** Sets float value in section under specified key
+ * @param std::string section
+ * @param std::string key
+ * @param float value
+ * @return return true on success
+ */
bool SetLocalProfileFloat(std::string section, std::string key, float value);
+
+ /** Gets float value in section under specified key
+ * @param std::string section
+ * @param std::string key
+ * @param float& value
+ * @return return true on success
+ */
bool GetLocalProfileFloat(std::string section, std::string key, float &value);
- static CProfile& GetInstance();
- static CProfile* GetInstancePointer();
+ /** Gets all values in section under specified key
+ * @param std::string section
+ * @param std::string key
+ * @return vector of values
+ */
+ std::vector< std::string > GetLocalProfileSection(std::string section, std::string key);
private:
CSimpleIniA *m_ini;
};
+
+//! Global function to get profile instance
+inline CProfile* GetProfile() {
+ return CProfile::GetInstancePointer();
+}
diff --git a/src/common/test/CMakeLists.txt b/src/common/test/CMakeLists.txt
index 3adca4e..d81acab 100644
--- a/src/common/test/CMakeLists.txt
+++ b/src/common/test/CMakeLists.txt
@@ -6,7 +6,7 @@ set(CMAKE_CXX_FLAGS_DEBUG "-Wall -g -O0 -std=c++11")
include_directories("../../")
include_directories("../../../")
-#add_executable(image_test ../image.cpp image_test.cpp)
+add_executable(image_test ../image.cpp image_test.cpp)
add_executable(profile_test ../profile.cpp profile_test.cpp)
add_test(profile_test ./profile_test)
diff --git a/src/common/test/colobot.ini b/src/common/test/colobot.ini
index c4d2162..f6a5f96 100644
--- a/src/common/test/colobot.ini
+++ b/src/common/test/colobot.ini
@@ -6,3 +6,10 @@ string_value=Hello world
[test_int]
int_value=42
+
+[test_multi]
+entry=1
+entry=2
+entry=3
+entry=4
+entry=5
diff --git a/src/common/test/profile_test.cpp b/src/common/test/profile_test.cpp
index 3ba0fad..65e20c5 100644
--- a/src/common/test/profile_test.cpp
+++ b/src/common/test/profile_test.cpp
@@ -2,6 +2,7 @@
#include <iostream>
#include <string>
+#include <vector>
using namespace std;
@@ -31,5 +32,12 @@ int main()
return 1;
}
+ vector<string> list;
+ list = profile.GetLocalProfileSection("test_multi", "entry");
+ if (list.size() != 5) {
+ cout << "GetLocalProfileSection failed!" << endl;
+ return 1;
+ }
+
return 0;
}