diff options
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/event.h | 4 | ||||
-rw-r--r-- | src/common/iman.h | 4 | ||||
-rw-r--r-- | src/common/logger.cpp | 14 | ||||
-rw-r--r-- | src/common/logger.h | 3 | ||||
-rw-r--r-- | src/common/profile.cpp | 21 | ||||
-rw-r--r-- | src/common/profile.h | 69 | ||||
-rw-r--r-- | src/common/test/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/common/test/colobot.ini | 7 | ||||
-rw-r--r-- | src/common/test/profile_test.cpp | 8 |
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; } |