Read the position of an entity from the published snapshot.
323{
324#ifdef MAYAFLUX_PLATFORM_MACOS
325 auto [snap, slot] = acquire_snapshot();
326 if (!snap) {
327 return std::nullopt;
328 }
329 auto it = snap->id_to_slot.find(id);
330 std::optional<PointT> result = (it != snap->id_to_slot.end())
331 ? std::optional<PointT>(snap->positions[it->second])
332 : std::nullopt;
333 release_snapshot(slot);
334 return result;
335#else
336 auto snap_ptr =
m_snapshot.load(std::memory_order_acquire);
337 if (!snap_ptr) {
338 return std::nullopt;
339 }
340 auto it = snap_ptr->id_to_slot.find(id);
341 if (it == snap_ptr->id_to_slot.end()) {
342 return std::nullopt;
343 }
344 return snap_ptr->positions[it->second];
345#endif
346}
std::atomic< std::shared_ptr< const SpatialSnapshot< PointT > > > m_snapshot