Beispiel #1
0
 public StateVector simulateTransitionFire(Transition fireTransition, bool changeStatistics)
 {
     TransitionHistoryItem historyItem = null;
     if (changeStatistics)
     {
         fireTransition.Statistics.add(1);
         historyItem = new TransitionHistoryItem(fireTransition);
     }
     List<AbstractToken> tokens = new List<AbstractToken>();
     List<AbstractEdge> inputs = this.getAllInputEdge(fireTransition);
     List<AbstractEdge> outputs = this.getAllOutputEdge(fireTransition);
     foreach (AbstractEdge edge in inputs)
     {
         if (edge.Start is Position)
         {
             Position position = (Position)edge.Start;
             if (EdgeType.NORMAL.Equals(edge.EdgeType))
             {
                 tokens.AddRange(position.takeAwayTokens(edge.Weight, changeStatistics));
             }
             else if (EdgeType.RESET.Equals(edge.EdgeType))
             {
                 tokens.AddRange(position.takeAwayTokens(changeStatistics));
             }
             else if (EdgeType.INHIBITOR.Equals(edge.EdgeType))
             {
                 // nothing to do
             }
         }
     }
     this.mixTokens(tokens);
     if (changeStatistics && historyItem != null)
     {
         historyItem.addToken(tokens);
     }
     int ti = 0;
     foreach (AbstractEdge edge in outputs)
     {
         if (edge.End is Position)
         {
             Position position = (Position)edge.End;
             for (int ei = 0; ei < edge.Weight; ei++)
             {
                 AbstractToken token = null;
                 if (ti < tokens.Count)
                 {
                     token = tokens[ti++];
                 }
                 else
                 {
                     token = new Token(this.identityProvider.tokenIdentity(null), this.unidGenNumber++, true);
                 }
                 position.addToken(token);
             }
             if (changeStatistics)
             {
                 position.addStatistics();
             }
         }
     }
     if (changeStatistics && historyItem != null)
     {
         this.addItemToTransitionHistory(historyItem);
     }
     return this.getNewStateVector(null);
 }
Beispiel #2
0
 protected void addItemToTransitionHistory(TransitionHistoryItem item)
 {
     this.transitionHistory.Add(item);
 }