Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void izracunajXOR(ci poc, ci kraj, vector<char>& keys, vector<char>& rezultat, int pomeraj) {
- char rez;
- int j = pomeraj;
- while (poc < kraj && j < keys.size()) {
- rez = *poc ^ keys[j];
- rezultat.push_back(rez);
- poc++;
- j++;
- // Provera da li su iterirani kljucevi do kraja.
- // Ako jesu, resetuj brojac za kljuceve, ali ne i brojac od prvog vektora
- // Na ovaj nacin se nece nastaviti loop ukoliko su iste duzine
- if (j == keys.size()) {
- j = 0;
- }
- }
- }
- vector<char> paralelizujXOR(vector<char> ulaz1, vector<char> keys, int brojNiti) {
- vector<char> rezultati[MaxBrojNiti];
- for (int i = 0; i < brojNiti; i++) rezultati[i] = vector<char>();
- int kolicinaPosla = ulaz1.size() / brojNiti;
- ci begin = ulaz1.begin();
- ci end = ulaz1.begin() + kolicinaPosla;
- int pocetak = 0;
- int pomeraj = 0;
- thread niti[MaxBrojNiti];
- for (int i = 0; i < brojNiti - 1; i++) {
- niti[i] = thread(izracunajXOR, begin, end, ref(keys), ref(rezultati[i]), pomeraj);
- begin = end;
- end = begin + kolicinaPosla;
- pocetak += kolicinaPosla;
- pomeraj = pocetak % keys.size();
- }
- niti[brojNiti-1] = thread(izracunajXOR, begin, ulaz1.end(), ref(keys), ref(rezultati[brojNiti-1]), pomeraj);
- for (int i = 0; i < brojNiti; ++i) {
- niti[i].join();
- }
- cout << "Spajanje paralelnih rezultata\n";
- // Spajanje vektora u jedan
- vector<char> rezultat;
- for (int i = 0; i < brojNiti; i++) {
- ci it = rezultati[i].begin();
- while (it != rezultati[i].end()) {
- char x = *it;
- rezultat.push_back(x);
- it++;
- }
- }
- return rezultat;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement