/// <summary> /// Copies the machine /// </summary> /// <returns>the copied machine</returns> public Machine DeepCopy() { Rotor[] rotors = new Rotor[this.Rotors.Length]; Reflector reflector = this.Reflector.DeepCopy(); Plugboard plugboard = this.Plugboard.DeepCopy(); for (int i = 0; i < this.Rotors.Length; i++) { rotors[i] = this.Rotors[i].DeepCopy(); } return(new Machine(rotors, reflector, plugboard)); }
/// <summary> /// Constructor /// </summary> /// <param name="rotors">the rotors of the machine</param> /// <param name="reflector">the reflectors of the machine</param>\ /// <param name = "plugboard" > the plugboard of the machien</param> /// <param name="rotorMissingChars">the characters missing in the rotors and the index</param> /// <param name="reflectorMissingChars">the characters missing in the reflector</param> /// <param name="plugboardMissingChars">the characters missing in the plugboard</param> public RotorComparisionException(Rotor[] rotors, Reflector reflector, Plugboard plugboard, Dictionary <int, List <char> > rotorMissingChars, List <char> reflectorMissingChars, List <char> plugboardMissingChars) { this.rotors = rotors; this.reflector = reflector; this.rotorMissingChars = rotorMissingChars; this.reflectorMissingChars = reflectorMissingChars; this.plugboard = plugboard; this.plugboardMissingChars = plugboardMissingChars; }
/// <summary> /// Checks the rotors and reflectors to ensure they share similar characters /// </summary> /// <param name="rotors">the rotor list</param> /// <param name="reflector">the reflector list</param> private void CheckMachineParameters(Rotor[] rotors, Reflector reflector, Plugboard plugboard) { // checks the rotors Dictionary <int, List <char> > rotorErrors = CompareRotors(rotors); // checks the reflectors List <char> reflectorError = CheckReflector(rotors[0], reflector); // checks the plugboard List <char> plugboardError = CheckPlugboard(rotors[0], plugboard); // if there are any errors, throw the exception if (reflectorError.Count > 0 || rotorErrors.Count > 0) { throw new RotorComparisionException(rotors, reflector, plugboard, rotorErrors, reflectorError, plugboardError); } }
/// <summary> /// Constructor - Initializes a new machine /// </summary> /// <param name="rotors">the list of rotors that will be used</param> /// <param name="reflector">the reflector that will be used</param> /// <param name="plugboard">The plugboard that will be used</param> public Machine(Rotor[] rotors, Reflector reflector, Plugboard plugboard) { // attempts to set the rotors and reflectors try { CheckMachineParameters(rotors, reflector, plugboard); SetRotors(rotors); SetReflector(reflector); SetPlugboard(plugboard); } // catches any exceptions and rethrows it catch (Exception ex) { throw ex; } }
/// <summary> /// Sets the plugboard /// </summary> /// <param name="plugboard">the new plugboard</param> private void SetPlugboard(Plugboard plugboard) { machinePlugboard = plugboard.DeepCopy(); }
/// <summary> /// Compares the plugboard to a rotor to ensure the characters match /// </summary> /// <param name="rotor">the rotor to check</param> /// <param name="plugboard">the plugboard to check</param> /// <returns>the list of invalid characters</returns> private List <char> CheckPlugboard(Rotor rotor, Plugboard plugboard) { return(BasicFunctions.CompareStringsCharacters(rotor.RotorString, plugboard.Combinations)); }