{
refcount_--;
if (not refcount_) {
- if (action_hook.is_linked())
+ if (stateSetHook_.is_linked())
simgrid::xbt::intrusive_erase(*getStateSet(), *this);
/* remove from action_set */
if (action_ti_hook.is_linked())
}
// if I am wearing a latency hat
- if (action->getHat() == Action::Type::LATENCY) {
+ if (action->getType() == Action::Type::LATENCY) {
XBT_DEBUG("Latency paid for action %p. Activating", action);
maxminSystem_->update_variable_weight(action->getVariable(), action->weight_);
action->heapRemove(getActionHeap());
action->refreshLastUpdate();
// if I am wearing a max_duration or normal hat
- } else if (action->getHat() == Action::Type::MAX_DURATION || action->getHat() == Action::Type::NORMAL) {
+ } else if (action->getType() == Action::Type::MAX_DURATION || action->getType() == Action::Type::NORMAL) {
// no need to communicate anymore
// assume that flows that reached max_duration have remaining of 0
XBT_DEBUG("Action %p finished", action);
{
refcount_--;
if (not refcount_) {
- if (action_hook.is_linked())
+ if (stateSetHook_.is_linked())
simgrid::xbt::intrusive_erase(*stateSet_, *this);
XBT_DEBUG ("Removing action %p", this);
delete this;
{
refcount_--;
if (not refcount_) {
- if (action_hook.is_linked())
+ if (stateSetHook_.is_linked())
simgrid::xbt::intrusive_erase(*stateSet_, *this);
if (getVariable())
getModel()->getMaxminSystem()->variable_free(getVariable());
{
refcount_--;
if (not refcount_) {
- if (action_hook.is_linked())
+ if (stateSetHook_.is_linked())
simgrid::xbt::intrusive_erase(*stateSet_, *this);
if (getVariable())
getModel()->getMaxminSystem()->variable_free(getVariable());
continue;
/* bogus priority, skip it */
- if (action->getPriority() <= 0 || action->getHat() == Action::Type::LATENCY)
+ if (action->getPriority() <= 0 || action->getType() == Action::Type::LATENCY)
continue;
action->updateRemainingLazy(now);
void Action::cancel(){
setState(Action::State::failed);
if (getModel()->getUpdateMechanism() == UM_LAZY) {
- if (action_lmm_hook.is_linked())
+ if (modifiedSetHook_.is_linked())
simgrid::xbt::intrusive_erase(*getModel()->getModifiedSet(), *this);
heapRemove(getModel()->getActionHeap());
}
int Action::unref(){
refcount_--;
if (not refcount_) {
- if (action_hook.is_linked())
+ if (stateSetHook_.is_linked())
simgrid::xbt::intrusive_erase(*stateSet_, *this);
if (getVariable())
getModel()->getMaxminSystem()->variable_free(getVariable());
if (getModel()->getUpdateMechanism() == UM_LAZY) {
/* remove from heap */
heapRemove(getModel()->getActionHeap());
- if (action_lmm_hook.is_linked())
+ if (modifiedSetHook_.is_linked())
simgrid::xbt::intrusive_erase(*getModel()->getModifiedSet(), *this);
}
delete this;
*/
void Action::heapInsert(heap_type& heap, double key, Action::Type hat)
{
- hat_ = hat;
+ type_ = hat;
heapHandle_ = heap.emplace(std::make_pair(key, this));
}
void Action::heapRemove(heap_type& heap)
{
- hat_ = Action::Type::NOTSET;
+ type_ = Action::Type::NOTSET;
if (heapHandle_) {
heap.erase(*heapHandle_);
clearHeapHandle();
void Action::heapUpdate(heap_type& heap, double key, Action::Type hat)
{
- hat_ = hat;
+ type_ = hat;
if (heapHandle_) {
heap.update(*heapHandle_, std::make_pair(key, this));
} else {
*/
XBT_PUBLIC_CLASS Action {
public:
- boost::intrusive::list_member_hook<> action_hook;
- boost::intrusive::list_member_hook<> action_lmm_hook;
- typedef boost::intrusive::member_hook<
- Action, boost::intrusive::list_member_hook<>, &Action::action_hook> ActionOptions;
+ boost::intrusive::list_member_hook<> modifiedSetHook_; /* Used by the lazy update to list the actions to track */
+
+ boost::intrusive::list_member_hook<> stateSetHook_;
+ typedef boost::intrusive::member_hook<Action, boost::intrusive::list_member_hook<>, &Action::stateSetHook_>
+ ActionOptions;
typedef boost::intrusive::list<Action, ActionOptions> ActionList;
enum class State {
*/
Action(simgrid::surf::Model * model, double cost, bool failed, kernel::lmm::Variable* var);
- /** @brief Destructor */
virtual ~Action();
/**
double lastUpdate_ = 0;
double lastValue_ = 0;
kernel::lmm::Variable* variable_ = nullptr;
- Action::Type hat_ = Action::Type::NOTSET;
+ Action::Type type_ = Action::Type::NOTSET;
boost::optional<heap_type::handle_type> heapHandle_ = boost::none;
public:
void refreshLastUpdate() {lastUpdate_ = surf_get_clock();}
double getLastValue() const { return lastValue_; }
void setLastValue(double val) { lastValue_ = val; }
- Action::Type getHat() const { return hat_; }
- bool is_linked() const { return action_lmm_hook.is_linked(); }
+ Action::Type getType() const { return type_; }
+ bool is_linked() const { return modifiedSetHook_.is_linked(); }
+
protected:
Action::SuspendStates suspended_ = Action::SuspendStates::not_suspended;
};
typedef Action::ActionList ActionList;
-typedef boost::intrusive::member_hook<
- Action, boost::intrusive::list_member_hook<>, &Action::action_lmm_hook> ActionLmmOptions;
+typedef boost::intrusive::member_hook<Action, boost::intrusive::list_member_hook<>, &Action::modifiedSetHook_>
+ ActionLmmOptions;
typedef boost::intrusive::list<Action, ActionLmmOptions> ActionLmmList;
typedef ActionLmmList* ActionLmmListPtr;