/// <summary> /// If the proposed value contains this in its MergedStateMachines, it is accepted as the new UnifiedStateMachine /// </summary> /// <param name="newValue"></param> public void ResetUnifiedStateMachine(UnifiedStateMachine newValue) { if (newValue.MergedStateMachines.Contains(this)) { UnifiedStateMachine = newValue; } }
/// <summary> /// Checks that the unified state machine includes the state machine and, in that case, /// indicates that the types match /// </summary> /// <param name="stateMachineType"></param> /// <param name="unifiedstateMachineType"></param> /// <returns></returns> private bool MatchStateMachines(StateMachine stateMachineType, UnifiedStateMachine unifiedstateMachineType) { bool retVal = false; if (stateMachineType != null && unifiedstateMachineType != null) { retVal = unifiedstateMachineType.MergedStateMachines.Contains(stateMachineType); } return(retVal); }
/// <summary> /// Computes the unified state machine according to the update information /// </summary> public void ComputeUnifiedStateMachine() { if (Updates != null || UpdatedBy.Count > 0) { State state = null; StateMachine source; if (EnclosingStateMachine == null) { source = (StateMachine)SourceOfUpdateChain; } else { EnclosingStateMachine.ComputeUnifiedStateMachine(); StateMachine enclosingUnifiedStateMachine = EnclosingStateMachine.UnifiedStateMachine; state = enclosingUnifiedStateMachine.FindState(EnclosingState.Name); source = state.StateMachine; } UnifiedStateMachine stateMachine = source.UnifiedStateMachine as UnifiedStateMachine; if (stateMachine == null) { // First time the state machine is unified, create the unified state machine source.UnifiedStateMachine = new UnifiedStateMachine(this); if (state != null) { source.UnifiedStateMachine.setFather(state); } } else { if (this == SourceOfUpdateChain) { stateMachine.Rebuild(source); } } UnifiedStateMachine = source.UnifiedStateMachine; } else { UnifiedStateMachine = this; } }