[zhoulongyu]: 使用嵌套std::map 把配置文件相关的三个参数映射起来, 完成char[]数据类型的set和get
This commit is contained in:
parent
1d214080ce
commit
b94f6ac956
|
@ -16,6 +16,8 @@
|
|||
#include "ILog.h"
|
||||
#include <string.h>
|
||||
|
||||
#define CHECK_MAP(map) (map.size()==1? true:false)
|
||||
|
||||
IpcConfig::IpcConfig()
|
||||
{
|
||||
mCfgChanged = CONFIG_HAS_NOT_CHANGED;
|
||||
|
@ -26,12 +28,13 @@ IpcConfig::IpcConfig()
|
|||
IpcConfigKey::TEST_NUM,
|
||||
std::reference_wrapper<int>(mAllData.testNum)));
|
||||
|
||||
mCfgMapString.insert(
|
||||
std::make_pair<
|
||||
IpcConfigKey,
|
||||
std::reference_wrapper<CHAR_STRING>>(
|
||||
IpcConfigKey::TEST_STRING,
|
||||
std::map<std::string, std::reference_wrapper<CHAR_STRING>> innerMap;
|
||||
innerMap.insert(
|
||||
std::make_pair(
|
||||
"test_string",
|
||||
std::reference_wrapper<CHAR_STRING>(mAllData.testString)));
|
||||
mCfgMapString.insert(std::make_pair(IpcConfigKey::TEST_STRING, innerMap));
|
||||
|
||||
}
|
||||
const StatusCode IpcConfig::Init(void)
|
||||
{
|
||||
|
@ -296,26 +299,26 @@ void IpcConfig::SetBool(const IpcConfigKey &key, const bool &value)
|
|||
}
|
||||
const std::string IpcConfig::GetString(const IpcConfigKey &key)
|
||||
{
|
||||
std::map<IpcConfigKey, std::reference_wrapper<CHAR_STRING>>::iterator iter;
|
||||
std::map<IpcConfigKey, std::map<std::string, std::reference_wrapper<CHAR_STRING>>>::iterator iter;
|
||||
iter = mCfgMapString.find(key);
|
||||
if (iter != mCfgMapString.end())
|
||||
if (iter != mCfgMapString.end() && CHECK_MAP(iter->second))
|
||||
{
|
||||
std::reference_wrapper<CHAR_STRING> s = iter->second;
|
||||
const std::string sv(s);
|
||||
const std::string sv(iter->second.begin()->second); // char[] --> const std::strinbg
|
||||
return sv;
|
||||
}
|
||||
LogError("Can't find the key.\n");
|
||||
const std::string UNKNOWN_CONFIG = "undefine";
|
||||
return UNKNOWN_CONFIG;
|
||||
}
|
||||
|
||||
void IpcConfig::SetString(const IpcConfigKey &key, const std::string string)
|
||||
{
|
||||
std::map<IpcConfigKey, std::reference_wrapper<CHAR_STRING>>::iterator iter;
|
||||
std::map<IpcConfigKey, std::map<std::string, std::reference_wrapper<CHAR_STRING>>>::iterator iter;
|
||||
iter = mCfgMapString.find(key);
|
||||
if (iter != mCfgMapString.end())
|
||||
if (iter != mCfgMapString.end() && CHECK_MAP(iter->second))
|
||||
{
|
||||
strncpy(iter->second, string.c_str(), sizeof(CHAR_STRING));
|
||||
strncpy(iter->second.begin()->second, string.c_str(), sizeof(CHAR_STRING)); // const std::strinbg --> char[]
|
||||
const char * name = iter->second.begin()->first.c_str(); // const std::strinbg --> const char *
|
||||
ConfigSetString(mCfg, name, iter->second.begin()->second);
|
||||
mCfgChanged = CONFIG_HAS_CHANGED;
|
||||
}
|
||||
else
|
||||
|
@ -335,7 +338,6 @@ void IpcConfig::ReadAllConfigParameters(void)
|
|||
mAllData.testNum = DEFAULT_TEST_NUM;
|
||||
ConfigSetInt(mCfg, "test_num", mAllData.testNum);
|
||||
}
|
||||
|
||||
const char *testString = NULL;
|
||||
StatusCode string_code = ConfigGetString(mCfg, "test_string", &(testString));
|
||||
if (StatusCodeEqual(string_code, "CONFIG_CODE_PARAM_NOT_EXIST"))
|
||||
|
|
|
@ -80,6 +80,6 @@ private:
|
|||
std::map<IpcConfigKey, std::reference_wrapper<double>> mCfgMapDouble;
|
||||
std::map<IpcConfigKey, std::reference_wrapper<long double>> mCfgMapLongDouble;
|
||||
std::map<IpcConfigKey, std::reference_wrapper<bool>> mCfgMapBool;
|
||||
std::map<IpcConfigKey, std::reference_wrapper<CHAR_STRING>> mCfgMapString;
|
||||
std::map<IpcConfigKey, std::map<std::string, std::reference_wrapper<CHAR_STRING>>> mCfgMapString;
|
||||
};
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user