friend Comm;
friend Exec;
friend Io;
+#ifndef DOXYGEN
+ friend std::vector<ActivityPtr> create_DAG_from_dot(const std::string& filename);
+#endif
public:
// enum class State { ... }
virtual bool is_assigned() const = 0;
virtual bool dependencies_solved() const { return dependencies_.empty(); }
+ virtual unsigned long is_waited_by() const { return successors_.size(); }
+ const std::set<ActivityPtr>& get_dependencies() const { return dependencies_; }
+ const std::vector<ActivityPtr>& get_successors() const { return successors_; }
protected:
Activity() = default;
virtual ~Activity() = default;
- virtual void complete(Activity::State state)
- {
- state_ = state;
- if (state == State::FINISHED)
- release_dependencies();
- }
-
void release_dependencies()
{
while (not successors_.empty()) {
/*! Signal fired each time that the activity fails to start because of a veto (e.g., unsolved dependency or no
* resource assigned) */
static xbt::signal<void(Activity&)> on_veto;
+ /*! Signal fired when theactivity completes (either normally, cancelled or failed) */
+ static xbt::signal<void(Activity&)> on_completion;
void vetoable_start()
{
}
}
+ void complete(Activity::State state)
+ {
+ state_ = state;
+ if (state == State::FINISHED)
+ release_dependencies();
+ on_completion(*this);
+ }
+
static std::set<Activity*>* get_vetoed_activities() { return vetoed_activities_; }
static void set_vetoed_activities(std::set<Activity*>* whereto) { vetoed_activities_ = whereto; }
* It is forbidden to change the amount of work once the Activity is started */
Activity* set_remaining(double remains);
+ double get_start_time() const;
+ double get_finish_time() const;
+ void mark() { marked_ = true; }
+ bool is_marked() const { return marked_; }
+
/** Returns the internal implementation of this Activity */
kernel::activity::ActivityImpl* get_impl() const { return pimpl_.get(); }
Activity::State state_ = Activity::State::INITED;
double remains_ = 0;
bool suspended_ = false;
+ bool marked_ = false;
std::vector<ActivityPtr> successors_;
std::set<ActivityPtr> dependencies_;
std::atomic_int_fast32_t refcount_{0};