FuzzingDefs.cpp
119 lines
| 4.0 KiB
| text/x-c
|
CppLexer
Alexandre Leroux
|
r1200 | #include "FuzzingDefs.h" | ||
Alexandre Leroux
|
r1248 | const QString ACQUISITION_TIMEOUT_PROPERTY = QStringLiteral("acquisitionTimeout"); | ||
Alexandre Leroux
|
r1201 | const QString NB_MAX_OPERATIONS_PROPERTY = QStringLiteral("component"); | ||
Alexandre Leroux
|
r1237 | const QString NB_MAX_SYNC_GROUPS_PROPERTY = QStringLiteral("nbSyncGroups"); | ||
Alexandre Leroux
|
r1201 | const QString NB_MAX_VARIABLES_PROPERTY = QStringLiteral("nbMaxVariables"); | ||
Alexandre Leroux
|
r1204 | const QString AVAILABLE_OPERATIONS_PROPERTY = QStringLiteral("availableOperations"); | ||
Alexandre Leroux
|
r1224 | const QString CACHE_TOLERANCE_PROPERTY = QStringLiteral("cacheTolerance"); | ||
Alexandre Leroux
|
r1223 | const QString INITIAL_RANGE_PROPERTY = QStringLiteral("initialRange"); | ||
Alexandre Leroux
|
r1209 | const QString MAX_RANGE_PROPERTY = QStringLiteral("maxRange"); | ||
Alexandre Leroux
|
r1207 | const QString METADATA_POOL_PROPERTY = QStringLiteral("metadataPool"); | ||
const QString PROVIDER_PROPERTY = QStringLiteral("provider"); | ||||
Alexandre Leroux
|
r1243 | const QString OPERATION_DELAY_BOUNDS_PROPERTY = QStringLiteral("operationDelays"); | ||
Alexandre Leroux
|
r1228 | const QString VALIDATORS_PROPERTY = QStringLiteral("validators"); | ||
Alexandre Leroux
|
r1244 | const QString VALIDATION_FREQUENCY_BOUNDS_PROPERTY = QStringLiteral("validationFrequencyBounds"); | ||
r1396 | const QString CUSTOM_OPERATIONS_PROPERTY = QStringLiteral("customOperations"); | |||
Alexandre Leroux
|
r1235 | |||
// //////////// // | ||||
// FuzzingState // | ||||
// //////////// // | ||||
const SyncGroup &FuzzingState::syncGroup(SyncGroupId id) const | ||||
{ | ||||
return m_SyncGroupsPool.at(id); | ||||
} | ||||
SyncGroup &FuzzingState::syncGroup(SyncGroupId id) | ||||
{ | ||||
return m_SyncGroupsPool.at(id); | ||||
} | ||||
const VariableState &FuzzingState::variableState(VariableId id) const | ||||
{ | ||||
return m_VariablesPool.at(id); | ||||
} | ||||
VariableState &FuzzingState::variableState(VariableId id) | ||||
{ | ||||
return m_VariablesPool.at(id); | ||||
} | ||||
Alexandre Leroux
|
r1239 | SyncGroupId FuzzingState::syncGroupId(VariableId variableId) const | ||
{ | ||||
auto end = m_SyncGroupsPool.cend(); | ||||
auto it | ||||
= std::find_if(m_SyncGroupsPool.cbegin(), end, [&variableId](const auto &syncGroupEntry) { | ||||
const auto &syncGroup = syncGroupEntry.second; | ||||
return syncGroup.m_Variables.find(variableId) != syncGroup.m_Variables.end(); | ||||
}); | ||||
return it != end ? it->first : SyncGroupId{}; | ||||
} | ||||
Alexandre Leroux
|
r1240 | std::vector<SyncGroupId> FuzzingState::syncGroupsIds() const | ||
{ | ||||
std::vector<SyncGroupId> result{}; | ||||
for (const auto &entry : m_SyncGroupsPool) { | ||||
result.push_back(entry.first); | ||||
} | ||||
return result; | ||||
} | ||||
void FuzzingState::synchronizeVariable(VariableId variableId, SyncGroupId syncGroupId) | ||||
{ | ||||
if (syncGroupId.isNull()) { | ||||
return; | ||||
} | ||||
Alexandre Leroux
|
r1328 | // Registers variable into sync group | ||
Alexandre Leroux
|
r1240 | auto &syncGroup = m_SyncGroupsPool.at(syncGroupId); | ||
Alexandre Leroux
|
r1328 | auto &variableState = m_VariablesPool.at(variableId); | ||
Alexandre Leroux
|
r1240 | syncGroup.m_Variables.insert(variableId); | ||
if (syncGroup.m_Variables.size() == 1) { | ||||
Alexandre Leroux
|
r1328 | // If it's the first variable, sets the variable range as the sync group range | ||
Alexandre Leroux
|
r1240 | syncGroup.m_Range = variableState.m_Range; | ||
} | ||||
Alexandre Leroux
|
r1328 | else { | ||
// If a variable is added to an existing group, sets its range to the group's range | ||||
variableState.m_Range = syncGroup.m_Range; | ||||
} | ||||
Alexandre Leroux
|
r1240 | } | ||
Alexandre Leroux
|
r1241 | void FuzzingState::desynchronizeVariable(VariableId variableId, SyncGroupId syncGroupId) | ||
{ | ||||
if (syncGroupId.isNull()) { | ||||
return; | ||||
} | ||||
Alexandre Leroux
|
r1242 | // Unregisters variable from sync group: if there is no more variable in the group, resets the | ||
// range | ||||
Alexandre Leroux
|
r1241 | auto &syncGroup = m_SyncGroupsPool.at(syncGroupId); | ||
syncGroup.m_Variables.erase(variableId); | ||||
if (syncGroup.m_Variables.empty()) { | ||||
syncGroup.m_Range = INVALID_RANGE; | ||||
} | ||||
} | ||||
Alexandre Leroux
|
r1242 | void FuzzingState::updateRanges(VariableId variableId, const SqpRange &newRange) | ||
{ | ||||
auto syncGroupId = this->syncGroupId(variableId); | ||||
// Retrieves the variables to update: | ||||
Alexandre Leroux
|
r1328 | // - if the variable is synchronized to others, updates the range of the group and of all | ||
// synchronized variables | ||||
Alexandre Leroux
|
r1242 | // - otherwise, updates only the variable | ||
Alexandre Leroux
|
r1328 | if (syncGroupId.isNull()) { | ||
Alexandre Leroux
|
r1242 | m_VariablesPool.at(variableId).m_Range = newRange; | ||
} | ||||
Alexandre Leroux
|
r1328 | else { | ||
auto &syncGroup = m_SyncGroupsPool.at(syncGroupId); | ||||
syncGroup.m_Range = newRange; | ||||
for (const auto &variableId : syncGroup.m_Variables) { | ||||
m_VariablesPool.at(variableId).m_Range = newRange; | ||||
} | ||||
} | ||||
Alexandre Leroux
|
r1242 | } | ||