internal bool ProcessEvent(Node parentNode, TSuccessor successor) { var state = parentNode.State as TState; var args = new StateExpansionEventArgs(state, successor, parentNode.Cost, parentNode.Depth); OnSuccessorExpanded(this, args); return(!args.CancelExpansion); }
/// <summary> /// Handles the <see cref="E:SuccessorExpanded" /> event. /// </summary> /// <param name="sender">The sender.</param> /// <param name="e">The <see cref="StateExpansionEventArgs"/> instance containing the event data.</param> protected virtual void OnSuccessorExpanded(object sender, StateExpansionEventArgs e) { EventHandler <StateExpansionEventArgs> handler = SuccessorExpanded; if (handler != null) { handler(sender, e); } }
/// <summary> /// Finds the specified initial state. /// </summary> /// <param name="initialState">The initial state.</param> /// <returns><c>true</c> if XXXX, <c>false</c> otherwise.</returns> public virtual bool Find(TState initialState) { if (Strategy == null) { return(false); } Strategy.Add(new Node(initialState)); while (Strategy.Count() > 0) { var n = Strategy.Remove(); if (n.Parent != null && n.Successor != null) { var eventArgs = new StateExpansionEventArgs( (TState)n.Parent.State, (TSuccessor)n.Successor, n.Cost, n.Depth); OnSuccessorExpanded(this, eventArgs); if (eventArgs.CancelExpansion) { return(false); } } if (n.State.IsTerminal) { CreateSolution(n); return(true); } foreach (var node in n.Expand(_closed)) { Strategy.Add(node); _closed?.Add(node.State); } } return(false); }
/// <summary> /// Handles the <see cref="E:SuccessorExpanded" /> event. /// </summary> /// <param name="sender">The sender.</param> /// <param name="e">The <see cref="StateExpansionEventArgs"/> instance containing the event data.</param> protected virtual void OnSuccessorExpanded(object sender, StateExpansionEventArgs e) { EventHandler<StateExpansionEventArgs> handler = SuccessorExpanded; if (handler != null) handler(sender, e); }
/// <summary> /// Handles the <see cref="E:SuccessorExpanded" /> event. /// </summary> /// <param name="sender">The sender.</param> /// <param name="e">The <see cref="StateExpansionEventArgs" /> instance containing the event data.</param> protected virtual void OnSuccessorExpanded(object sender, StateExpansionEventArgs e) { var handler = SuccessorExpanded; handler?.Invoke(sender, e); }