public static IEnumerable <StateRegister> EnumerateStates(this CodeConfig config) { for (var i = 0; i < 1 << config.NoOfStateRegisters; i++) { yield return(StateRegister.Create(i.GetBools(config.NoOfRegisters).Reverse())); } }
private static Transition CalculateTransition(StateRegister state, bool input, CodeConfig config) { var newState = state.Shift(input); var output = newState.GetOutput(config).ToList(); return(new Transition(state.State.Values, input, output, newState.State.Values)); }
public IReadOnlyList <bool> Encode(IEnumerable <bool> input) { var inputList = input as IReadOnlyList <bool> ?? input.ToList(); var result = new List <bool>(GetResultLength(inputList)); var stateReg = StateRegister.CreateInitial(config.NoOfRegisters); foreach (var i in inputList) { stateReg = stateReg.Shift(i); result.AddRange(stateReg.GetOutput(config)); } if (terminateCode) { while (stateReg.State.Values.Any(s => s)) { stateReg = stateReg.Shift(false); result.AddRange(stateReg.GetOutput(config)); } } return(result); }