protected override void BeforeFreeze() { // extend state conditions with complementary indexes var s0 = this.ToString(); if (!StateIndexes.Any()) { Debug.Assert(PreWildcard); if (!PostStateIndexes.Any()) { throw new CompilerException(ErrorCode.BadCondition, "wildcard requires transition."); } // Debug.Assert(PostStateIndexes.Any()); StateIndexes = Variable.Type.GetExcluding(PostStateIndexes).ToList(); } else if (!PostStateIndexes.Any()) { if (PostWildcard) { Debug.Assert(StateIndexes.Any()); PostStateIndexes = Variable.Type.GetExcluding(StateIndexes).ToList(); } } }
public override string ToString() { var sb = new StringBuilder(); sb.Append(Variable.Name); sb.Append("("); sb.Append(Variable.Type.GetStateNames(StateIndexes).ToSeparatorList()); if (PostStateIndexes.Any()) { sb.Append(" => "); sb.Append(Variable.Type.GetStateNames(PostStateIndexes).ToSeparatorList()); } sb.Append(")"); return(sb.ToString()); }
public override IEnumerable <Transition> GetTransitions() { if (PostStateIndexes.Any()) { yield return(new Transition(this) { PreStateIndexes = StateIndexes.ToArray(), NewStateIndexes = PostStateIndexes.ToArray() }); } else if (null != Parent) { /*foreach (var e in Parent.GetTransitions()) * { * yield return e; * }*/ throw new NotImplementedException(); } }
public void SetPostStates(IEnumerable <int> indexes) { PostStateIndexes.AddRange(indexes); }
/// <summary> /// Sets the POST states of a state transition condition. /// </summary> /// <param name="names"></param> public void SetPostStates(IdList names) { PostStateIndexes.AddRange(Variable.Type.GetIndexesOfNames(names)); PostWildcard = names.Wildcard; }