#include <xbt/string.hpp>
#include <simgrid/simix.hpp>
+#include <simgrid/s4u/actor.hpp>
+
#include "simgrid/simix.h"
#include "popping_private.h"
class Process {
public:
+ Process() : actor_(this) {}
// TODO, replace with boost intrusive container hooks
s_xbt_swag_hookup_t process_hookup = { nullptr, nullptr }; /* simix_global->process_list */
// TODO, pack them
std::exception_ptr exception;
+ bool finished = false;
bool blocked = false;
bool suspended = false;
bool auto_restart = false;
friend void intrusive_ptr_add_ref(Process* process)
{
+ // Atomic operation! Do not split in two instructions!
auto previous = (process->refcount_)++;
xbt_assert(previous != 0);
(void) previous;
}
friend void intrusive_ptr_release(Process* process)
{
+ // Atomic operation! Do not split in two instructions!
auto count = --(process->refcount_);
if (count == 0)
delete process;
~Process();
+ simgrid::s4u::Actor& actor() { return actor_; }
+
private:
std::atomic_int_fast32_t refcount_ { 1 };
+ simgrid::s4u::Actor actor_;
};
}