11namespace FiniteStateMachine ;
22
3+ /// <summary>
4+ /// Builder class for creating a finite state machine.
5+ /// </summary>
6+ /// <typeparam name="TState">Type representing the states of the machine.</typeparam>
7+ /// <typeparam name="TTrigger">Enum type representing triggers to cause transitions.</typeparam>
38public sealed class FiniteStateMachineBuilder < TState , TTrigger >
49 where TTrigger : Enum
510 where TState : notnull
611{
712 private readonly TState _initialState ;
813 private readonly Dictionary < TState , Dictionary < TTrigger , TState > > _transitions = new ( ) ;
9-
14+
15+ /// <summary>
16+ /// Initializes a new instance of the <see cref="FiniteStateMachineBuilder{TState, TTrigger}"/> class.
17+ /// </summary>
18+ /// <param name="initialState">The initial state of the state machine.</param>
1019 internal FiniteStateMachineBuilder ( TState initialState )
1120 {
1221 _initialState = initialState ;
1322 }
14-
23+
24+ /// <summary>
25+ /// Defines a state and its possible transitions.
26+ /// </summary>
27+ /// <param name="state">The state to configure.</param>
28+ /// <param name="configure">An action to configure the state transitions.</param>
29+ /// <returns>A reference to the current builder instance.</returns>
1530 public FiniteStateMachineBuilder < TState , TTrigger > State (
1631 TState state ,
1732 Action < StateConfiguration < TState , TTrigger > > configure )
@@ -21,7 +36,11 @@ public FiniteStateMachineBuilder<TState, TTrigger> State(
2136 _transitions . Add ( state , cfg . Transitions ) ;
2237 return this ;
2338 }
24-
39+
40+ /// <summary>
41+ /// Builds and returns the configured state machine.
42+ /// </summary>
43+ /// <returns>A new state machine configured with specified states and transitions.</returns>
2544 public StateMachine < TState , TTrigger > Build ( )
2645 {
2746 var rules = GetTransitionRules ( ) ;
@@ -30,41 +49,25 @@ public StateMachine<TState, TTrigger> Build()
3049
3150 private Dictionary < RuleKey < TState , TTrigger > , Rule < TState , TTrigger > > GetTransitionRules ( )
3251 {
33- Dictionary < RuleKey < TState , TTrigger > , Rule < TState , TTrigger > > rules = [ ] ;
52+ var rules = new Dictionary < RuleKey < TState , TTrigger > , Rule < TState , TTrigger > > ( ) ;
3453 foreach ( var ( fromState , transitions ) in _transitions )
3554 {
3655 foreach ( var ( trigger , targetState ) in transitions )
3756 {
3857 var ruleKey = new RuleKey < TState , TTrigger >
3958 {
4059 From = fromState ,
41- Trigger = trigger ,
60+ Trigger = trigger
4261 } ;
4362 var rule = new Rule < TState , TTrigger >
4463 {
4564 From = fromState ,
4665 To = targetState ,
47- Trigger = trigger ,
66+ Trigger = trigger
4867 } ;
4968 rules . Add ( ruleKey , rule ) ;
5069 }
5170 }
5271 return rules ;
5372 }
54- }
55-
56- public sealed class StateConfiguration < TState , TTrigger > where TTrigger : Enum
57- {
58- private readonly TState _state ;
59- internal Dictionary < TTrigger , TState > Transitions { get ; } = new ( ) ;
60-
61- internal StateConfiguration ( TState state )
62- {
63- _state = state ;
64- }
65-
66- public TransitionConfiguration < TState , TTrigger > On ( TTrigger trigger )
67- {
68- return new TransitionConfiguration < TState , TTrigger > ( this , trigger ) ;
69- }
7073}
0 commit comments