-void BoostContext::smx_ctx_boost_wrapper(BoostContext::ctx_arg_type arg)
-{
-#if BOOST_VERSION < 106100
- BoostContext* context = reinterpret_cast<BoostContext*>(arg);
-#else
- static_cast<BoostContext**>(arg.data)[0]->fc_ = arg.fctx;
- BoostContext* context = static_cast<BoostContext**>(arg.data)[1];
-#endif
- try {
- (*context)();
- context->Context::stop();
- } catch (StopRequest const&) {
- XBT_DEBUG("Caught a StopRequest");
- }
- context->suspend();
-}
-
-inline void BoostContext::smx_ctx_boost_jump_fcontext(BoostContext* from, BoostContext* to)
-{
-#if BOOST_VERSION < 105600
- boost::context::jump_fcontext(from->fc_, to->fc_, reinterpret_cast<intptr_t>(to));
-#elif BOOST_VERSION < 106100
- boost::context::jump_fcontext(&from->fc_, to->fc_, reinterpret_cast<intptr_t>(to));
-#else
- BoostContext* ctx[2] = {from, to};
- boost::context::detail::transfer_t arg = boost::context::detail::jump_fcontext(to->fc_, ctx);
- static_cast<BoostContext**>(arg.data)[0]->fc_ = arg.fctx;
-#endif
-}
-
-BoostContext::BoostContext(std::function<void()> code,
- void_pfn_smxprocess_t cleanup_func, smx_actor_t process)
- : Context(std::move(code), cleanup_func, process)
+BoostContext::BoostContext(std::function<void()> code, void_pfn_smxprocess_t cleanup_func, smx_actor_t process,
+ SwappedContextFactory* factory)
+ : SwappedContext(std::move(code), cleanup_func, process, factory)