Advertisement
Guest User

Untitled

a guest
Apr 8th, 2020
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.76 KB | None | 0 0
  1. void izracunajXOR(ci poc, ci kraj, vector<char>& keys, vector<char>& rezultat, int pomeraj) {
  2.     char rez;
  3.     int j = pomeraj;
  4.     while (poc < kraj && j < keys.size()) {
  5.         rez = *poc ^ keys[j];
  6.         rezultat.push_back(rez);
  7.         poc++;
  8.         j++;
  9.  
  10.         // Provera da li su iterirani kljucevi do kraja.
  11.         // Ako jesu, resetuj brojac za kljuceve, ali ne i brojac od prvog vektora
  12.         // Na ovaj nacin se nece nastaviti loop ukoliko su iste duzine
  13.         if (j == keys.size()) {
  14.             j = 0;
  15.         }
  16.     }
  17. }
  18.  
  19. vector<char> paralelizujXOR(vector<char> ulaz1, vector<char> keys, int brojNiti) {
  20.     vector<char> rezultati[MaxBrojNiti];
  21.     for (int i = 0; i < brojNiti; i++) rezultati[i] = vector<char>();
  22.     int kolicinaPosla = ulaz1.size() / brojNiti;
  23.     ci begin = ulaz1.begin();
  24.     ci end = ulaz1.begin() + kolicinaPosla;
  25.     int pocetak = 0;
  26.     int pomeraj = 0;
  27.  
  28.     thread niti[MaxBrojNiti];
  29.     for (int i = 0; i < brojNiti - 1; i++) {
  30.         niti[i] = thread(izracunajXOR, begin, end, ref(keys), ref(rezultati[i]), pomeraj);
  31.         begin = end;
  32.         end = begin + kolicinaPosla;
  33.         pocetak += kolicinaPosla;
  34.         pomeraj = pocetak % keys.size();
  35.     }
  36.     niti[brojNiti-1] = thread(izracunajXOR, begin, ulaz1.end(), ref(keys), ref(rezultati[brojNiti-1]), pomeraj);
  37.  
  38.     for (int i = 0; i < brojNiti; ++i) {
  39.         niti[i].join();
  40.     }
  41.  
  42.  
  43.     cout << "Spajanje paralelnih rezultata\n";
  44.     // Spajanje vektora u jedan
  45.     vector<char> rezultat;
  46.     for (int i = 0; i < brojNiti; i++) {
  47.         ci it = rezultati[i].begin();
  48.         while (it != rezultati[i].end()) {
  49.             char x = *it;
  50.             rezultat.push_back(x);
  51.             it++;
  52.         }
  53.     }
  54.  
  55.     return rezultat;
  56.  
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement