using System;
using System.Collections.Generic;
using System.Xml.Linq;
namespace csharp_sccd_compiler
{
public class StateChartTransition : Visitable
{
public TriggerEvent trigger { get; private set; }
public StateChartNode parent { get; private set; }
public Expression guard { get; private set; }
public StateReference target { get; private set; }
public Action action { get; private set; }
///
/// Ordered list of nodes to be entered upon taking the transition.
/// The boolean value indicates whether the StateChartNode in the list is the last in a branch.
/// (And was thus specified specifically in the state reference.)
///
/// Set by the Path Calculator visitor.
public List> enter_nodes { get; set; }
///
/// Ordered list of nodes to be exited upon taking the transition.
///
/// Set by the Path Calculator visitor.
public List exit_nodes { get; set; }
public StateChartTransition(XElement xml, StateChartNode parent)
{
this.parent = parent;
this.trigger = new TriggerEvent(xml);
XAttribute guard_attribute = xml.Attribute("cond");
if (guard_attribute != null && guard_attribute.Value.Trim() != "")
this.guard = new Expression(guard_attribute.Value.Trim());
else
this.guard = null;
XAttribute target_attribute = xml.Attribute("target");
if (target_attribute == null)
throw new CompilerException(string.Format("Transition from <{0}> is missing a target attribute.", this.parent.full_name));
this.target = new StateReference(target_attribute.Value.Trim());
this.action = new Action(xml);
}
public override void accept(Visitor visitor)
{
visitor.visit (this);
}
}
}