File: clDapSettingsStore.cpp

package info (click to toggle)
codelite 17.0.0%2Bdfsg-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 136,384 kB
  • sloc: cpp: 491,550; ansic: 280,393; php: 10,259; sh: 8,930; lisp: 7,664; vhdl: 6,518; python: 6,020; lex: 4,920; yacc: 3,123; perl: 2,385; javascript: 1,715; cs: 1,193; xml: 1,110; makefile: 805; cobol: 741; sql: 709; ruby: 620; f90: 566; ada: 534; asm: 464; fortran: 350; objc: 289; tcl: 258; java: 157; erlang: 61; pascal: 51; ml: 49; awk: 44; haskell: 36
file content (118 lines) | stat: -rw-r--r-- 3,016 bytes parent folder | download | duplicates (3)
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
#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::Contains(const wxString& name) const
{
    DapEntry entry;
    return Get(name, &entry);
}

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 });
    }
}