inverseEncode

This commit is contained in:
Eryn Wells 2015-07-19 01:28:18 -07:00
parent 586eacb2b5
commit e586c7e03d

View file

@ -17,6 +17,7 @@ enum EncoderError: ErrorType {
protocol Encoder {
func encode(c: Character) throws -> Character
func inverseEncode(c: Character) throws -> Character
}
@ -54,6 +55,14 @@ class FixedRotor: Cryptor, Encoder {
throw EncoderError.InvalidCharacter(ch: c)
}
}
func inverseEncode(c: Character) throws -> Character {
if let offset = series.indexOf(c) {
return FixedRotor.alphabet[offset]
} else {
throw EncoderError.InvalidCharacter(ch: c)
}
}
}
@ -109,6 +118,14 @@ class Rotor: FixedRotor {
throw EncoderError.InvalidCharacter(ch: c)
}
}
override func inverseEncode(c: Character) throws -> Character {
if let offset = series.indexOf(c) {
return Rotor.alphabet[(offset + ringPosition + position) % Rotor.alphabet.count]
} else {
throw EncoderError.InvalidCharacter(ch: c)
}
}
}
@ -162,4 +179,8 @@ class Plugboard: Cryptor, Encoder {
throw EncoderError.InvalidCharacter(ch: c)
}
}
func inverseEncode(c: Character) throws -> Character {
return try encode(c)
}
}