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; }