-smx_context_t BoostContextFactory::create_context(std::function<void()> code, void_pfn_smxprocess_t cleanup_func,
- smx_actor_t process)
-{
- BoostContext* context = nullptr;
- if (BoostContext::parallel_)
-#if HAVE_THREAD_CONTEXTS
- context = this->new_context<BoostParallelContext>(std::move(code), cleanup_func, process);
-#else
- xbt_die("No support for parallel execution");
-#endif
- else
- context = this->new_context<BoostSerialContext>(std::move(code), cleanup_func, process);
- return context;
-}
-
-void BoostContextFactory::run_all()
-{
-#if HAVE_THREAD_CONTEXTS
- if (BoostContext::parallel_) {
- BoostContext::threads_working_ = 0;
- xbt_parmap_apply(BoostContext::parmap_,
- [](void* arg) {
- smx_actor_t process = static_cast<smx_actor_t>(arg);
- BoostContext* context = static_cast<BoostContext*>(process->context);
- return context->resume();
- },
- simix_global->process_to_run);
- } else
-#endif
- {
- if (xbt_dynar_is_empty(simix_global->process_to_run))
- return;
- smx_actor_t first_process = xbt_dynar_get_as(simix_global->process_to_run, 0, smx_actor_t);
- BoostContext::process_index_ = 1;
- /* execute the first process */
- static_cast<BoostContext*>(first_process->context)->resume();
- }
-}
-
-