30 auto start = std::chrono::high_resolution_clock::now();
33 auto it = lastAcceptedSnapshots.find(entityId);
36 if (it == lastAcceptedSnapshots.end())
38 lastAcceptedSnapshots.emplace(entityId, e);
40 auto end = std::chrono::high_resolution_clock::now();
42 stats.additional_time += (end - start);
47 bool isEqual = checkSnapshotEquality(oldSnapshot, e);
61 auto end = std::chrono::high_resolution_clock::now();
63 stats.additional_time += (end - start);
69 SnapshotEqualityFilter::checkSnapshotEquality(
75 std::vector<aron::data::VariantPtr> oldInstances;
76 std::vector<aron::data::VariantPtr> newInstances;
81 oldInstances.push_back(i.
data());
88 newInstances.push_back(i.
data());
92 if (oldInstances.size() != newInstances.size())
97 for (
size_t i = 0; i < newInstances.size(); i++)
99 if (!checkInstanceEquality(oldInstances[i], newInstances[i]))
108 SnapshotEqualityFilter::checkInstanceEquality(
112 if (!oldData && !newData)
116 if (!oldData || !newData)
123 bool zeroImportanceOld = oldData
124 && oldData->getImportance().has_value()
125 && *oldData->getImportance() == 0.f;
126 bool zeroImportanceNew = newData
127 && newData->getImportance().has_value()
128 && *newData->getImportance() == 0.f;
129 if (zeroImportanceOld || zeroImportanceNew)
134 auto oldDesc = oldData->getDescriptor();
135 auto newDesc = newData->getDescriptor();
139 if (oldDesc != newDesc)
152 return *oldInt == *newInt;
158 return *oldFloat == *newFloat;
164 return *oldDouble == *newDouble;
170 return *oldLong == *newLong;
176 return *oldString == *newString;
182 return *oldBool == *newBool;
188 return *oldNdarr == *newNdarr;
194 const auto& oldElems = oldList->getElements();
195 const auto& newElems = newList->getElements();
197 if (oldElems.size() != newElems.size())
202 for (
size_t i = 0; i < newElems.size(); i++)
204 if (!checkInstanceEquality(oldElems[i], newElems[i]))
215 auto oldKeys = oldDict->getAllKeys();
216 auto newKeys = newDict->getAllKeys();
218 if (oldKeys.size() != newKeys.size())
223 for (
const auto& key : newKeys)
225 if (!oldDict->hasElement(key))
229 if (!checkInstanceEquality(oldDict->at(key), newDict->at(key)))
252 stats.start_time = std::chrono::high_resolution_clock::now();