forked from eranif/codelite
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathclDapSettingsStore.cpp
More file actions
112 lines (93 loc) · 2.83 KB
/
Copy pathclDapSettingsStore.cpp
File metadata and controls
112 lines (93 loc) · 2.83 KB
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
#include "clDapSettingsStore.hpp"
#include "fileutils.h"
JSONItem DapEntry::To() const
{
auto json = JSONItem::createObject();
json.addProperty("name", m_name);
json.addProperty("command", m_command);
json.addProperty("connection_string", m_connection_string);
json.addProperty("environment", m_environment);
json.addProperty("flags", m_flags);
json.addProperty("env_format", (int)m_envFormat);
json.addProperty("launch_type", (int)m_launch_type);
return json;
}
void DapEntry::From(const JSONItem& json)
{
m_name = json["name"].toString();
m_command = json["command"].toString();
m_connection_string = json["connection_string"].toString();
m_environment = json["environment"].toString();
m_flags = json["flags"].toSize_t(m_flags);
m_envFormat = (dap::EnvFormat)json["env_format"].toInt((int)dap::EnvFormat::LIST);
m_launch_type = (DapLaunchType)json["launch_type"].toInt((int)m_launch_type);
}
//////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////
clDapSettingsStore::clDapSettingsStore() {}
clDapSettingsStore::~clDapSettingsStore() {}
void clDapSettingsStore::Clear() { m_entries.clear(); }
void clDapSettingsStore::Load(const wxFileName& file)
{
Clear();
// ensure that we have something to load
if(!file.FileExists()) {
wxFileName::Mkdir(file.GetPath(), wxS_DIR_DEFAULT, wxPATH_MKDIR_FULL);
FileUtils::WriteFileContent(file, "[]");
}
JSON root(file);
if(!root.isOk()) {
return;
}
JSONItem arr = root.toElement();
int count = arr.arraySize();
for(int i = 0; i < count; ++i) {
DapEntry d;
d.From(arr[i]);
m_entries.insert({ d.GetName(), d });
}
}
void clDapSettingsStore::Save(const wxFileName& path)
{
if(!path.IsOk()) {
return;
}
JSON root(cJSON_Array);
for(const auto& vt : m_entries) {
root.toElement().arrayAppend(vt.second.To());
}
root.save(path);
}
bool clDapSettingsStore::Get(const wxString& name, DapEntry* entry) const
{
if(!entry || m_entries.count(name) == 0) {
return false;
}
*entry = m_entries.find(name)->second;
return true;
}
bool clDapSettingsStore::Set(const DapEntry& entry)
{
m_entries.erase(entry.GetName());
return m_entries.insert({ entry.GetName(), entry }).second;
}
bool clDapSettingsStore::Delete(const wxString& name)
{
if(m_entries.count(name) == 0) {
return false;
}
m_entries.erase(name);
return true;
}
void clDapSettingsStore::Set(const std::vector<DapEntry>& entries)
{
m_entries.clear();
Update(entries);
}
void clDapSettingsStore::Update(const std::vector<DapEntry>& entries)
{
for(const auto& d : entries) {
m_entries.erase(d.GetName());
m_entries.insert({ d.GetName(), d });
}
}