/// <summary> /// Retrieves a state from the state graph starting at this node /// </summary> /// <param name="input"></param> /// <param name="output"></param> /// <returns></returns> public TransducerState <TInput, TOutput> SetStateOutput(TInput input, TOutput output) { if (InternalTransitionTable.ContainsKey(input)) { var state = InternalTransitionTable[input]; // Create a new state with all transitions of the previous state var newState = new TransducerState <TInput, TOutput>(output); foreach (var kv in state.InternalTransitionTable) { newState.InternalTransitionTable[kv.Key] = kv.Value; } return(InternalTransitionTable[input] = newState); } else { return(InternalTransitionTable[input] = new TransducerState <TInput, TOutput>(output)); } }
/// <summary> /// Retrieves a state from the state graph with this node as a starting point /// </summary> /// <param name="input"></param> /// <returns></returns> public TransducerState <TInput, TOutput> GetState(TInput input) => InternalTransitionTable.ContainsKey(input) ? InternalTransitionTable[input] : InternalTransitionTable[input] = new TransducerState <TInput, TOutput>();