-/* Copyright (c) 2007-2020. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2007-2021. The SimGrid Team. All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
#include <string>
#include <list>
-#include <xbt/base.h>
#include "simgrid/forward.h"
+#include <xbt/utility.hpp>
#include <atomic>
#include <simgrid/kernel/resource/Action.hpp>
namespace simgrid {
namespace kernel {
namespace activity {
-enum class State {
- WAITING = 0,
- READY,
- RUNNING,
- DONE,
- CANCELED,
- FAILED,
- SRC_HOST_FAILURE,
- DST_HOST_FAILURE,
- TIMEOUT,
- SRC_TIMEOUT,
- DST_TIMEOUT,
- LINK_FAILURE
-};
+
+XBT_DECLARE_ENUM_CLASS(State, WAITING, READY, RUNNING, DONE, CANCELED, FAILED, SRC_HOST_FAILURE, DST_HOST_FAILURE,
+ TIMEOUT, SRC_TIMEOUT, DST_TIMEOUT, LINK_FAILURE);
class XBT_PUBLIC ActivityImpl {
std::atomic_int_fast32_t refcount_{0};
}
public:
- const std::string& get_name() { return name_; }
- const char* get_cname() { return name_.c_str(); }
+ const std::string& get_name() const { return name_; }
+ const char* get_cname() const { return name_.c_str(); }
- bool test();
- void wait_for(actor::ActorImpl* issuer, double timeout);
+ virtual bool test();
+ virtual void wait_for(actor::ActorImpl* issuer, double timeout);
virtual ActivityImpl& set_timeout(double) { THROW_UNIMPLEMENTED; }
virtual void suspend();
virtual void finish() = 0; // Unlock all simcalls blocked on that activity, either because it was marked as done by
// the model or because it terminated without waiting for the model
- virtual void register_simcall(smx_simcall_t simcall);
+ void register_simcall(smx_simcall_t simcall);
+ void unregister_simcall(smx_simcall_t simcall);
void clean_action();
virtual double get_remaining() const;
+ const char* get_state_str() const;
// Support for the boost::intrusive_ptr<ActivityImpl> datatype
friend XBT_PUBLIC void intrusive_ptr_add_ref(ActivityImpl* activity);
friend XBT_PUBLIC void intrusive_ptr_release(ActivityImpl* activity);
tracing_category_ = category;
return static_cast<AnyActivityImpl&>(*this);
}
- const std::string& get_tracing_category() { return tracing_category_; }
+ const std::string& get_tracing_category() const { return tracing_category_; }
};
} // namespace activity