#define SIMGRID_S4U_ACTIVITY_HPP
#include "xbt/asserts.h"
-#include "xbt/log.h"
#include <atomic>
#include <set>
#include <simgrid/forward.h>
#include <string>
#include <vector>
+#include <xbt/log.hpp>
#include <xbt/signal.hpp>
+XBT_LOG_EXTERNAL_CATEGORY(s4u_activity);
+
namespace simgrid {
namespace s4u {
double remains_ = 0;
};
-// template <class AnyActivity> class DependencyGuard {
-// public:
-// static bool activity_start_vetoer(AnyActivity* a) { return not a->has_dependencies(); }
-// static void on_activity_done(AnyActivity* a);
-//// {
-//// while (a->has_successors()) {
-//// AnyActivity* b = a->get_successor();
-//// b->remove_dependency_on(a);
-//// if (not b->has_dependencies()) {
-//// XBT_INFO("Activity is done and a successor can start");
-//// b->vetoable_start();
-//// }
-//// a->remove_successor();
-//// }
-//// }
-//};
-
template <class AnyActivity> class Activity_T : public Activity {
private:
- std::string name_ = "";
+ std::string name_ = "unnamed";
std::string tracing_category_ = "";
void* user_data_ = nullptr;
std::atomic_int_fast32_t refcount_{0};
{
while (has_successors()) {
AnyActivity* b = get_successor();
+ XBT_CDEBUG(s4u_activity, "Remove a dependency from '%s' on '%s'", get_cname(), b->get_cname());
b->remove_dependency_on(static_cast<AnyActivity*>(this));
if (not b->has_dependencies()) {
- // XBT_INFO("Activity is done and a successor can start");
b->vetoable_start();
}
remove_successor();
set_state(State::STARTING);
if (has_dependencies())
return static_cast<AnyActivity*>(this);
- // XBT_INFO("No veto, Activity can start");
set_state(State::STARTED);
+ XBT_CDEBUG(s4u_activity, "All dependencies are solved, let's start '%s'", get_cname());
static_cast<AnyActivity*>(this)->start();
return static_cast<AnyActivity*>(this);
}