// Hazard Pointers Specific void scan() { /* Iteratation variables. */ mr_node_t *cur; int i,j; uint8_t my_index = ltd.thread_index; shtd[my_index].scan_count++; /* List of hazard pointers, and its size. */ void **plist = ltd.plist; size_t psize; /* * Make sure that the most recent node to be deleted has been unlinked * in all processors' views. */ // write_barrier(); MEM_BARRIER; /* Stage 1: Scan HP list and insert non-null values in plist. */ psize = 0; for (i = 0; i < H; i++) { if (HP[i].p != NULL) { plist[psize++] = HP[i].p; } } /* Stage 3: Free non-harzardous nodes. */ for (j = 0; j < N_EPOCHS; j++) { cur = ltd.limbo_list[j]->tail; while (true) { if (cur == NULL || !is_old_enough(cur)) { break; } if (!ssearch(plist, psize, cur->actual_node)) { remove_node(ltd.limbo_list[j], cur); ltd.rcount--; ssfree_alloc(0, cur->actual_node); ssfree_alloc(1, cur); } cur = cur->mr_prev; } } }
std::wstring Help::textAnalysis(std::wstring text) { //slownik vector<wstring> bezargumentowe = {L"zeruj", L"wita", L"cześć", L"siem", L"hej", L"doberek", L"płać", L"sprzedaj", L"tak", L"nie", L"stop", L"kup" }; vector<wstring> przeklenstwa = { L"kurw", L"jeb", L"pierd", L"chuj", L"dziwk"}; vector<wstring> operatory = { L"leć" }; vector<wstring> latanie = { L"OrionV", L"prawo", L"lewo", L"gór", L"dół", L"Merkury", L"Uran", L"Jowisz", L"Neptun", L"matk" }; vector<vector<wstring>*> wskazniki = { &latanie }; vector<wstring> tokens = tokenize(text); //analiza //ugrzeczniacz int j = 0; int k = 0; while (j < tokens.size()) { k = 0; while (k <przeklenstwa.size() && ssearch(tokens.at(j), przeklenstwa.at(k)) == 1000) { k++; } if (k == przeklenstwa.size()) //nie bylo operatora, nastepne slowo { j++; } else { return L"Nie! Grzeczniej prosze!"; } } //wyszukiwanie bezargumentowych j = 0; k = 0; while (j < tokens.size()) { k = 0; while (k < bezargumentowe.size() && ssearch(tokens.at(j), bezargumentowe.at(k)) == 1000) { k++; } if (k == bezargumentowe.size()) //nie bylo operatora, nastepne slowo { j++; } else if (ssearch(tokens.at(j), L"płać") != 1000) { if (Pirate::busy == true || BorderMan::busy == true) { komenda = L"płać"; flaga = true; statek->isStuck = false; return L"Płacimy, Kapitanie!"; } else { return L"Kapitanie, nie ma komu płacić!"; } } else if (ssearch(tokens.at(j), L"stop") != 1000) { komenda = L"stop"; statek->movementCounter = 0; flaga = false; statek->isStuck = false; return L"Stop Kapitanie!"; } else if (ssearch(tokens.at(j), L"tak") != 1000) { komenda = L"tak"; flaga = true; return L"Przekazujemy komendę do kontroli naziemnej"; } else if (ssearch(tokens.at(j), L"nie") != 1000) { komenda = L"nie"; flaga = true; return L"Przekazujemy komendę do rozmówcy"; } else if (ssearch(tokens.at(j), L"kup") != 1000) { if (statek->isOnPlanet) { komenda = L"kup"; if (tokens.size() <= (j + 1)) { return L"Musisz podać ilość jednostek towaru, którą chcesz kupić!"; } else { if (tokens.at(j + 1) == L"towar") { argument = L"100"; } else { argument = tokens.at(j + 1); } flaga = true; return L"Kupujemy " + argument + L" jednostek towaru!"; } } else return L"Nie ma komu sprzedać!"; } else if (ssearch(tokens.at(j), L"sprzedaj") != 1000) { if (statek->isOnPlanet) { komenda = L"sprzedaj"; if (tokens.size() <= (j + 1)) { return L"Musisz podać ilość jednostek towaru, którą chcesz sprzedać!"; } else { if (tokens.at(j + 1) == L"towar") { argument = L"100"; } else { argument = tokens.at(j + 1); } flaga = true; return L"Sprzedajemy " + argument + L" jednostek towaru!"; } } else return L"Nie ma komu sprzedać!"; } else { komenda = tokens.at(j); return tokens.at(j) + L" Kapitanie!"; } } j = 0; k = 0; //wyszukiwanie operatorow while (j < tokens.size()) { k = 0; while (k<operatory.size() && ssearch(tokens.at(j), operatory.at(k)) == 1000) { k++; } if (k == operatory.size()) //nie bylo operatora, nastepne slowo { j++; } else //byl operator, szukamy argumentu { for (auto i = j; i < tokens.size(); i++)//slowa po operatorze { for (auto l = 0; l < (*wskazniki.at(k)).size(); l++) { if (ssearch(tokens.at(i), (*wskazniki.at(k)).at(l)) != 1000) { //wywolanie funkcji operator z argumentem komenda = operatory.at(k);//tokens.at(j); argument = (*wskazniki.at(k)).at(l);//tokens.at(i); flaga = true; ////// statek->isStuckv2 = false; ////// return L"Wykonuję komendę \"" + tokens.at(j) + L" " + tokens.at(i) + L"\""; } } } return L"Komenda \"" + tokens.at(j) + L"\" wymaga argumentu!"; j++; } } return L"Komenda nieznana"; }