# HG changeset patch # User Brian Neal # Date 1341165190 18000 # Node ID 424111a36ed77f37cd8a6be696b354beb2501b23 # Parent da231533c5c7691a48200e76d238665da5bc258f Created enigma_machine::process_data() for some speed improvements. diff -r da231533c5c7 -r 424111a36ed7 enigma/enigma_utils.cpp --- 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; +} diff -r da231533c5c7 -r 424111a36ed7 enigma/enigma_utils.h --- 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 diff -r da231533c5c7 -r 424111a36ed7 enigma/machine.h --- 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; }