示例#1
0
        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();
                }
            }
        }
示例#2
0
        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());
        }
示例#3
0
 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();
     }
 }
示例#4
0
 public void SetPostStates(IEnumerable <int> indexes)
 {
     PostStateIndexes.AddRange(indexes);
 }
示例#5
0
 /// <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;
 }