/// <summary> /// Register created program points with given handler /// </summary> /// <param name="programPoints">Created program points</param> /// <param name="onPointCreated">Registering handler</param> private static void registerCreatedPoints(ProgramPointBase[] programPoints, OnPointCreated onPointCreated) { var pointSet = new HashSet <ProgramPointBase>(programPoints); foreach (var point in pointSet) { onPointCreated(point); } }
/// <summary> /// Expand given statement into program point chain /// </summary> /// <param name="statement">Expanded statement</param> /// <param name="onPointCreated">Handler called for every created program point</param> /// <returns>Created program poitn chain</returns> public static ProgramPointBase[] ExpandStatement(LangElement statement, OnPointCreated onPointCreated) { var expander = new ElementExpander(); expander.Expand(statement); var expandedChain = expander.createPointsChain().ToArray(); registerCreatedPoints(expandedChain, onPointCreated); return(expandedChain); }