forked from PetroleumCyberneticsGroup/FieldOpt
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodel_synchronization_object.cpp
More file actions
119 lines (101 loc) · 4.57 KB
/
Copy pathmodel_synchronization_object.cpp
File metadata and controls
119 lines (101 loc) · 4.57 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
113
114
115
116
117
118
119
#include <boost/lexical_cast.hpp>
#include <iostream>
#include "model_synchronization_object.h"
namespace Model {
using namespace std;
using namespace boost::uuids;
ModelSynchronizationObject::ModelSynchronizationObject(Model *model) {
discrete_variable_ids_ = createNameToIdMapping(model->variables()->GetDiscreteVariables());
continous_variable_ids_ = createNameToIdMapping(model->variables()->GetContinousVariables());
binary_variable_ids_ = createNameToIdMapping(model->variables()->GetBinaryVariables());
}
map<string, uuid>
ModelSynchronizationObject::createNameToIdMapping(const QHash<QUuid, Properties::DiscreteProperty *> *qhash) const {
auto name_id_map = map<string, uuid>();
for (auto prop : qhash->values())
name_id_map[prop->name().toStdString()] = qUuidToBoostUuid(prop->id());
return name_id_map;
}
map<string, uuid>
ModelSynchronizationObject::createNameToIdMapping(const QHash<QUuid, Properties::ContinousProperty *> *qhash) const
{
auto name_id_map = map<string, uuid>();
for (auto prop : qhash->values())
name_id_map[prop->name().toStdString()] = qUuidToBoostUuid(prop->id());
return name_id_map;
}
map<string, uuid>
ModelSynchronizationObject::createNameToIdMapping(const QHash<QUuid, Properties::BinaryProperty *> *qhash) const
{
auto name_id_map = map<string, uuid>();
for (auto prop : qhash->values())
name_id_map[prop->name().toStdString()] = qUuidToBoostUuid(prop->id());
return name_id_map;
}
QHash<QString, QUuid> ModelSynchronizationObject::convertToQtMapping(const std::map<string, uuid> map) {
QHash<QString, QUuid> qmap = QHash<QString, QUuid>();
for (auto const &ent : map) {
qmap[QString::fromStdString((ent.first))] = boostUuidToQuuid(ent.second);
}
return qmap;
}
QHash<QString, QUuid> ModelSynchronizationObject::GetDiscreteVariableMap() {
return convertToQtMapping(discrete_variable_ids_);
}
QHash<QString, QUuid> ModelSynchronizationObject::GetContinousVariableMap() {
return convertToQtMapping(continous_variable_ids_);
}
QHash<QString, QUuid> ModelSynchronizationObject::GetBinaryVariableMap() {
return convertToQtMapping(binary_variable_ids_);
}
void ModelSynchronizationObject::UpdateVariablePropertyIds(Model *model) {
auto vpc = model->variable_container_;
// Binary variables
if (vpc->BinaryVariableSize() > 0) {
for (auto name : GetBinaryVariableMap().keys()) {
auto prop = vpc->GetBinaryVariable(name);
QUuid new_uuid = GetBinaryVariableMap()[name];
QUuid old_uuid = prop->id();
prop->UpdateId(new_uuid);
vpc->binary_variables_->insert(new_uuid, prop);
vpc->binary_variables_->remove(old_uuid);
}
}
// Continous variables
if (vpc->ContinousVariableSize() > 0) {
for (auto name : GetContinousVariableMap().keys()) {
auto prop = vpc->GetContinousVariable(name);
QUuid new_uuid = GetContinousVariableMap()[name];
QUuid old_uuid = prop->id();
prop->UpdateId(new_uuid);
vpc->continous_variables_->insert(new_uuid, prop);
vpc->continous_variables_->remove(old_uuid);
}
}
// Discrete variables
if (vpc->DiscreteVariableSize() > 0) {
for (auto name : GetDiscreteVariableMap().keys()) {
auto prop = vpc->GetDiscreteVariable(name);
QUuid new_uuid = GetDiscreteVariableMap()[name];
QUuid old_uuid = prop->id();
prop->UpdateId(new_uuid);
vpc->discrete_variables_->insert(new_uuid, prop);
vpc->discrete_variables_->remove(old_uuid);
}
}
}
QUuid ModelSynchronizationObject::boostUuidToQuuid(const uuid buuid) const {
return QUuid(boostUuidToQstring(buuid));
}
uuid ModelSynchronizationObject::qUuidToBoostUuid(const QUuid quuid) const {
uuid buuid(string_generator()(quuid.toString().toStdString()));
return buuid;
}
QString ModelSynchronizationObject::boostUuidToQstring(const uuid buuid) const {
const std::string uuid_string = boost::lexical_cast<std::string>(buuid);
QString uuid_qstring = QString(uuid_string.c_str());
uuid_qstring.append("}");
uuid_qstring.prepend("{");
return uuid_qstring;
}
}