@@ -36,3 +36,15 VariableState &FuzzingState::variableState(VariableId id) | |||
|
36 | 36 | return m_VariablesPool.at(id); |
|
37 | 37 | } |
|
38 | 38 | |
|
39 | SyncGroupId FuzzingState::syncGroupId(VariableId variableId) const | |
|
40 | { | |
|
41 | auto end = m_SyncGroupsPool.cend(); | |
|
42 | auto it | |
|
43 | = std::find_if(m_SyncGroupsPool.cbegin(), end, [&variableId](const auto &syncGroupEntry) { | |
|
44 | const auto &syncGroup = syncGroupEntry.second; | |
|
45 | return syncGroup.m_Variables.find(variableId) != syncGroup.m_Variables.end(); | |
|
46 | }); | |
|
47 | ||
|
48 | return it != end ? it->first : SyncGroupId{}; | |
|
49 | } | |
|
50 |
@@ -93,6 +93,10 struct FuzzingState { | |||
|
93 | 93 | const VariableState &variableState(VariableId id) const; |
|
94 | 94 | VariableState &variableState(VariableId id); |
|
95 | 95 | |
|
96 | /// @return the identifier of the synchronization group in which the variable passed in | |
|
97 | /// parameter is located. If the variable is not in any group, returns an invalid identifier | |
|
98 | SyncGroupId syncGroupId(VariableId variableId) const; | |
|
99 | ||
|
96 | 100 | |
|
97 | 101 | VariablesPool m_VariablesPool; |
|
98 | 102 | SyncGroupsPool m_SyncGroupsPool; |
@@ -152,6 +152,9 struct MoveOperation : public IFuzzingOperation { | |||
|
152 | 152 | struct SynchronizeOperation : public IFuzzingOperation { |
|
153 | 153 | bool canExecute(VariableId variableId, const FuzzingState &fuzzingState) const override |
|
154 | 154 | { |
|
155 | auto variable = fuzzingState.variableState(variableId).m_Variable; | |
|
156 | return variable != nullptr && !fuzzingState.m_SyncGroupsPool.empty() | |
|
157 | && fuzzingState.syncGroupId(variableId).isNull(); | |
|
155 | 158 | } |
|
156 | 159 | |
|
157 | 160 | void execute(VariableId variableId, FuzzingState &fuzzingState, |
@@ -163,6 +166,8 struct SynchronizeOperation : public IFuzzingOperation { | |||
|
163 | 166 | struct DesynchronizeOperation : public IFuzzingOperation { |
|
164 | 167 | bool canExecute(VariableId variableId, const FuzzingState &fuzzingState) const override |
|
165 | 168 | { |
|
169 | auto variable = fuzzingState.variableState(variableId).m_Variable; | |
|
170 | return variable != nullptr && !fuzzingState.syncGroupId(variableId).isNull(); | |
|
166 | 171 | } |
|
167 | 172 | |
|
168 | 173 | void execute(VariableId variableId, FuzzingState &fuzzingState, |
General Comments 0
You need to be logged in to leave comments.
Login now