Advertisement
Guest User

Untitled

a guest
Apr 19th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.75 KB | None | 0 0
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <string>
  4. #include <thread>
  5. #include <vector>
  6.  
  7. const size_t THREADS = std::thread::hardware_concurrency();
  8.  
  9. void CaesarEncryptPart(std::string* s) {
  10.   for (char& c : *s) c = 'a' + (c + 3 - 'a') % 26;
  11. }
  12.  
  13. void CaesarEncrypt(std::string* s) {
  14.   std::vector<std::thread> threads;
  15.   if (s->length() % 2 != 0) s = s + ' ';
  16.   size_t len = s->length() / THREADS;
  17.   size_t n = std::min(s->length(), THREADS);
  18.   size_t l = 0;
  19.   size_t r = len;
  20.   for (size_t i = 0; i < n; i++) {
  21.     std::string tmp = s->substr(l, r);
  22.     threads.emplace_back(std::thread(CaesarEncryptPart, &tmp));
  23.     l = l + len;
  24.     r = r + len;
  25.   }
  26.   for (size_t i = 0; i < threads.size(); i++) {
  27.     threads[i].join();
  28.   }
  29. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement