示例#1
0
 public virtual Graph.Node AddEdge(Graph.Node to, string info)
 {
     Graph.Edge e = new Graph.Edge(this, this, to, info);
     this.outs.AddItem(e);
     to.ins.AddItem(e);
     return(this);
 }
示例#2
0
 public Edge(Graph _enclosing, Graph.Node from, Graph.Node to, string info)
 {
     this._enclosing = _enclosing;
     this.from       = from;
     this.to         = to;
     this.label      = info;
 }
        /// <summary>Generate a graph represents the state graph of this StateMachine</summary>
        /// <param name="name">graph name</param>
        /// <returns>Graph object generated</returns>
        public Graph GenerateStateGraph(string name)
        {
            MaybeMakeStateMachineTable();
            Graph g = new Graph(name);

            foreach (STATE startState in stateMachineTable.Keys)
            {
                IDictionary <EVENTTYPE, StateMachineFactory.Transition <OPERAND, STATE, EVENTTYPE,
                                                                        EVENT> > transitions = stateMachineTable[startState];
                foreach (KeyValuePair <EVENTTYPE, StateMachineFactory.Transition <OPERAND, STATE, EVENTTYPE
                                                                                  , EVENT> > entry in transitions)
                {
                    StateMachineFactory.Transition <OPERAND, STATE, EVENTTYPE, EVENT> transition = entry
                                                                                                   .Value;
                    if (transition is StateMachineFactory.SingleInternalArc)
                    {
                        StateMachineFactory.SingleInternalArc sa = (StateMachineFactory.SingleInternalArc
                                                                    )transition;
                        Graph.Node fromNode = g.GetNode(startState.ToString());
                        Graph.Node toNode   = g.GetNode(sa.postState.ToString());
                        fromNode.AddEdge(toNode, entry.Key.ToString());
                    }
                    else
                    {
                        if (transition is StateMachineFactory.MultipleInternalArc)
                        {
                            StateMachineFactory.MultipleInternalArc ma = (StateMachineFactory.MultipleInternalArc
                                                                          )transition;
                            IEnumerator iter = ma.validPostStates.GetEnumerator();
                            while (iter.HasNext())
                            {
                                Graph.Node fromNode = g.GetNode(startState.ToString());
                                Graph.Node toNode   = g.GetNode(iter.Next().ToString());
                                fromNode.AddEdge(toNode, entry.Key.ToString());
                            }
                        }
                    }
                }
            }
            return(g);
        }
示例#4
0
 private Graph.Node NewNode(string id)
 {
     Graph.Node ret = new Graph.Node(this, id);
     nodes.AddItem(ret);
     return(ret);
 }