bool ResultsNotifier::do_deliver(SharedGroup& sg) { auto lock = lock_target(); // Target realm being null here indicates that we were unregistered while we // were in the process of advancing the Realm version and preparing for // delivery, i.e. the results was destroyed from the "wrong" thread if (!get_realm()) { return false; } // We can get called before the query has actually had the chance to run if // we're added immediately before a different set of async results are // delivered if (!m_initial_run_complete) { return false; } REALM_ASSERT(!m_query_handover); if (m_tv_handover) { m_tv_handover->version = version(); Results::Internal::set_table_view(*m_target_results, std::move(*sg.import_from_handover(std::move(m_tv_handover)))); } REALM_ASSERT(!m_tv_handover); return true; }
void ResultsNotifier::do_attach_to(SharedGroup& sg) { REALM_ASSERT(m_query_handover); m_query = sg.import_from_handover(std::move(m_query_handover)); m_sort = SortDescriptor::create_from_and_consume_patch(m_sort_handover, *m_query->get_table()); m_distinct = SortDescriptor::create_from_and_consume_patch(m_distinct_handover, *m_query->get_table()); }
void ResultsNotifier::deliver(SharedGroup& sg) { auto lock = lock_target(); // Target realm being null here indicates that we were unregistered while we // were in the process of advancing the Realm version and preparing for // delivery, i.e. the results was destroyed from the "wrong" thread if (!get_realm()) { return; } REALM_ASSERT(!m_query_handover); if (m_tv_to_deliver) { Results::Internal::set_table_view(*m_target_results, std::move(*sg.import_from_handover(std::move(m_tv_to_deliver)))); } REALM_ASSERT(!m_tv_to_deliver); }
void ResultsNotifier::do_attach_to(SharedGroup& sg) { REALM_ASSERT(m_query_handover); m_query = sg.import_from_handover(std::move(m_query_handover)); }
void ObjectNotifier::do_attach_to(SharedGroup& sg) { REALM_ASSERT(m_handover); REALM_ASSERT(!m_row); m_row = sg.import_from_handover(std::move(m_handover)); }