1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
#pragma once
#include "SettingsRepositoryInterface.h"
class cMemorySettingsRepository : public cSettingsRepositoryInterface
{
public:
virtual bool KeyExists(const AString keyname) const override;
virtual bool HasValue(const AString & a_KeyName, const AString & a_ValueName) const override;
virtual int AddKeyName(const AString & keyname) override;
virtual bool AddKeyComment(const AString & keyname, const AString & comment) override;
virtual AString GetKeyComment(const AString & keyname, const int commentID) const override;
virtual bool DeleteKeyComment(const AString & keyname, const int commentID) override;
virtual void AddValue(const AString & a_KeyName, const AString & a_ValueName, const AString & a_Value) override;
void AddValue(const AString & a_KeyName, const AString & a_ValueName, const Int64 a_Value);
void AddValue(const AString & a_KeyName, const AString & a_ValueName, const bool a_Value);
virtual std::vector<std::pair<AString, AString>> GetValues(AString a_keyName) override;
virtual AString GetValue(const AString & keyname, const AString & valuename, const AString & defValue = "")
const override;
virtual AString GetValueSet(const AString & keyname, const AString & valuename, const AString & defValue = "")
override;
virtual int GetValueSetI(const AString & keyname, const AString & valuename, const int defValue = 0) override;
virtual Int64 GetValueSetI(const AString & keyname, const AString & valuename, const Int64 defValue = 0) override;
virtual bool GetValueSetB(const AString & keyname, const AString & valuename, const bool defValue = false) override;
virtual bool SetValue(
const AString & a_KeyName,
const AString & a_ValueName,
const AString & a_Value,
const bool a_CreateIfNotExists = true
) override;
virtual bool SetValueI(
const AString & a_KeyName,
const AString & a_ValueName,
const int a_Value,
const bool a_CreateIfNotExists = true
) override;
virtual bool DeleteValue(const AString & keyname, const AString & valuename) override;
virtual bool Flush() override;
void SetReadOnly() { m_Writable = false; }
private:
bool m_Writable = true;
struct sValue
{
sValue(AString value) :
#ifndef NDEBUG
m_Type(eType::String),
#endif
m_stringValue(std::move(value))
{
}
sValue(Int64 value) :
#ifndef NDEBUG
m_Type(eType::Int64),
#endif
m_intValue(value)
{
}
sValue(bool value) :
#ifndef NDEBUG
m_Type(eType::Bool),
#endif
m_boolValue(value)
{
}
AString getStringValue() const
{
ASSERT(m_Type == eType::String);
return m_stringValue;
}
Int64 getIntValue() const
{
ASSERT(m_Type == eType::Int64);
return m_intValue;
}
bool getBoolValue() const
{
ASSERT(m_Type == eType::Bool);
return m_boolValue;
}
private:
#ifndef NDEBUG
enum class eType
{
String,
Int64,
Bool
} m_Type;
#endif
AString m_stringValue;
union
{
Int64 m_intValue;
bool m_boolValue;
};
};
std::unordered_map<AString, std::unordered_multimap<AString, sValue>> m_Map {};
};
|