Exemplo n.º 1
0
// 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;
        }
    }
}
Exemplo n.º 2
0
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";
}