public int FlagActionAs(MAction action, ExecutionState state) { bool found = false; for (int i = _lastIndex[state]; i < actionsQueue.Count; i++) { if (actionsQueue[i].Id == action.Id) { actionsQueue[i].State = state; found = true; _lastIndex[state] = i; if (state == ExecutionState.Executed) { FlagNextActionAsExecuting(i); } return(i); } } // If something went wrong with indexing, give it another round just in case if (!found) { Logger.Debug($"Second round on FlagActionAs {state} for {action}"); for (int i = 0; i < actionsQueue.Count; i++) { if (actionsQueue[i].Id == action.Id) { actionsQueue[i].State = state; found = true; _lastIndex[state] = i; if (state == ExecutionState.Executed) { FlagNextActionAsExecuting(i); ClearExecutedExcess(); } return(i); } } } // Very quick and dirty return(-1); }
/// <summary> /// Searches the action queue for an Action by id, and changes its display state. /// </summary> /// <param name="action"></param> /// <param name="state"></param> /// <returns></returns> public int FlagActionAs(MAction action, ExecutionState state) { // Since ids are usually correlative, start by last state index to quickly find the searched action, // and loop back into start if necessary. int it = _lastIndex[state]; if (it >= _actionsQueue.Count) { it = 0; } for (int i = 0; i < _actionsQueue.Count; i++) { if (_actionsQueue[it].Id == action.Id) { _actionsStateCount[_actionsQueue[it].State]--; _actionsStateCount[state]++; _actionsQueue[it].State = state; _lastIndex[state] = i; if (state == ExecutionState.Executed) { FlagNextActionAsExecuting(it); } return(it); } it++; if (it >= _actionsQueue.Count) { it = 0; } } return(-1); }
private int _textMode = 1; // 0 for .ToString, 1 for ToInstruction public ActionWrapper(MAction action) { this._action = action; }