Mercurial > public > cpp-enigma
changeset 12:424111a36ed7
Created enigma_machine::process_data() for some speed improvements.
author | Brian Neal <bgneal@gmail.com> |
---|---|
date | Sun, 01 Jul 2012 12:53:10 -0500 |
parents | da231533c5c7 |
children | b9d124a15926 |
files | enigma/enigma_utils.cpp enigma/enigma_utils.h enigma/machine.h |
diffstat | 3 files changed, 30 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/enigma/enigma_utils.cpp Fri Jun 29 23:20:33 2012 -0500 +++ b/enigma/enigma_utils.cpp Sun Jul 01 12:53:10 2012 -0500 @@ -20,3 +20,20 @@ } return result; } + +//////////////////////////////////////////////////////////////////////////////// + +std::string enigma::preprocess_ciphertext(const std::string& s) +{ + std::string result; + result.reserve(s.size()); + + for (const auto& c : s) + { + if (c != ' ') + { + result += c - 'A'; + } + } + return result; +}
--- a/enigma/enigma_utils.h Fri Jun 29 23:20:33 2012 -0500 +++ b/enigma/enigma_utils.h Sun Jul 01 12:53:10 2012 -0500 @@ -22,6 +22,9 @@ // Removes spaces from a string and returns the resulting string: std::string remove_spaces(const std::string& s); + + // Removes spaces & converts to signal numbers: + std::string preprocess_ciphertext(const std::string& s); } #endif
--- a/enigma/machine.h Fri Jun 29 23:20:33 2012 -0500 +++ b/enigma/machine.h Sun Jul 01 12:53:10 2012 -0500 @@ -123,6 +123,16 @@ return result; } + // Process a buffer of pre-processed text of length n, placing the result in an output buffer. + void process_data(const char* input, char* output, std::size_t n) + { + for (std::size_t i = 0; i < n; ++i) + { + step_rotors(); + *output++ = electric_signal(*input++) + 'A'; + } + } + // for access to the plugboard for hill-climbing, etc plugboard& get_plugboard() { return pb; }