| 292 | } |
| 293 | |
| 294 | void GpsTrack::NotifyCallback(pair<size_t, size_t> const & addedIds, pair<size_t, size_t> const & evictedIds) |
| 295 | { |
| 296 | lock_guard<mutex> lg(m_callbackGuard); |
| 297 | |
| 298 | if (!m_callback) |
| 299 | return; |
| 300 | |
| 301 | if (m_needSendSnapshop) |
| 302 | { |
| 303 | m_needSendSnapshop = false; |
| 304 | |
| 305 | vector<pair<size_t, location::GpsInfo>> toAdd; |
| 306 | toAdd.reserve(m_collection->GetSize()); |
| 307 | m_collection->ForEach([&toAdd](location::GpsInfo const & point, size_t id) -> bool |
| 308 | { |
| 309 | toAdd.emplace_back(id, point); |
| 310 | return true; |
| 311 | }); |
| 312 | |
| 313 | if (toAdd.empty()) |
| 314 | return; // nothing to send |
| 315 | |
| 316 | m_callback(std::move(toAdd), make_pair(kInvalidId, kInvalidId), m_collection->GetTrackStatistics()); |
| 317 | } |
| 318 | else |
| 319 | { |
| 320 | vector<pair<size_t, location::GpsInfo>> toAdd; |
| 321 | if (addedIds.first != kInvalidId) |
| 322 | { |
| 323 | size_t const addedCount = addedIds.second - addedIds.first + 1; |
| 324 | ASSERT_GREATER_OR_EQUAL(m_collection->GetSize(), addedCount, ()); |
| 325 | toAdd.reserve(addedCount); |
| 326 | m_collection->ForEach([&toAdd](location::GpsInfo const & point, size_t id) -> bool |
| 327 | { |
| 328 | toAdd.emplace_back(id, point); |
| 329 | return true; |
| 330 | }, m_collection->GetSize() - addedCount); |
| 331 | ASSERT_EQUAL(toAdd.size(), addedCount, ()); |
| 332 | } |
| 333 | |
| 334 | if (toAdd.empty() && evictedIds.first == kInvalidId) |
| 335 | return; // nothing to send |
| 336 | |
| 337 | m_callback(std::move(toAdd), evictedIds, m_collection->GetTrackStatistics()); |
| 338 | } |
| 339 | } |
nothing calls this directly
no test coverage detected