Esempio n. 1
0
bool MainWindow::validLetter(int diceNumber,int letter,bool used0,bool used1,bool used2,bool used3,bool used4,bool used5,bool used6,bool used7,bool used8,bool used9,bool used10,bool used11,bool used12,bool used13,bool used14,bool used15) {
    bool used[16];
    used[0] = used0;
    used[1] = used1;
    used[2] = used2;
    used[3] = used3;
    used[4] = used4;
    used[5] = used5;
    used[6] = used6;
    used[7] = used7;
    used[8] = used8;
    used[9] = used9;
    used[10] = used10;
    used[11] = used11;
    used[12] = used12;
    used[13] = used13;
    used[14] = used14;
    used[15] = used15;
    QTextStream out(stdout);
    bool wordExists = false;
//    out << "Comparing " << button[diceNumber]->text().toLower() << " to " << ui->newWord->text().at(letter).toLower() << "\n";
//    out << "Dice = " << diceNumber << ", Letter = " << letter << ", Word Letter = " << ui->newWord->text().at(letter) << ", Button Letter = " << button[diceNumber]->text() << "\n";
//    out.flush();
    if(button[diceNumber]->text().at(0).toLower() == ui->newWord->text().at(letter).toLower()) {
//        out << "links for dice " << diceNumber << " = " << links[diceNumber][0] << ", " << links[diceNumber][1] << ", " << links[diceNumber][2] << ", " << links[diceNumber][3] << "\n";
//        out.flush();
        if(letter + 1 < ui->newWord->text().length()) {
//            out << "dice = " << diceNumber << ", letter = " << letter + 1 << "\n";
//            out.flush();
            used[diceNumber] = true;
            for(int i=0;i<buttonLink[diceNumber].count();i++) {
//                out << "asking dice " << links[diceNumber][i] << " to check\n";
//                out.flush();
                if(!(used[buttonLink[diceNumber].at(i)])) {
                    if(validLetter(buttonLink[diceNumber].at(i),letter+button[diceNumber]->text().length(),used[0],used[1],used[2],used[3],used[4],used[5],used[6],used[7],used[8],used[9],used[10],used[11],used[12],used[13],used[14],used[15])) {
//                        out << "dice " << buttonLinks[diceNumber][i] << " returned true\n";
//                        out.flush();
                        wordExists = true;
                    }
                }
            }
        }
        else {
            wordExists = true;
//            out << "end of word at letter " << letter << "\n";
        }
    }
//    out << "Dice = " << diceNumber << ", Letter = " << letter << ", Word Letter = " << ui->newWord->text().at(letter) << ", Button Letter = " << button[diceNumber]->text() << ", Returning = ";
//    out << "returning ";
    if(wordExists) {
        out << "true\n";
    }
    else {
        out << "false\n";
    }
    out.flush();

    return wordExists;
}
Esempio n. 2
0
bool MainWindow::validWord() {
    QTextStream out(stdout);
    bool validWord;
    for(int i=0;i<16 and !validWord;i++) {
        validWord = validLetter(i,0,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false);
//        validWord = validLetter(i,0,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true);
        out << "Dice " << i << " = ";
        if(validWord) {
//            out << "true\n";
        }
        else {
//            out << "false\n";
        }
        out.flush();
    }
    return validWord;
}
void* reader(void *nothing){
	
	int i, fd;
	int aux = NUMBER_OF_LINES*POSITION_OF_NEWLINE;
	int lineCounter=0;
	char currentChar;
	char* buf = (char*)malloc(sizeof(char)*(aux+1));
	
	if((fd = open(file, O_RDONLY)) < 0){
		perror("Cannot open file");
		exit(-1);
	}
	
	if(flock(fd, LOCK_SH) < 0){
		perror("Failed to lock file");
		exit(-1);
	}
	
	lseek(fd, (threadid++)*(NUMBER_OF_LINES/k)*POSITION_OF_NEWLINE, SEEK_SET);
	
	if((read(fd, buf, aux)) < 0){
		perror("Failed to read file");
		exit(-1);
	}
		
	if(validLetter(letter)){
		int numberOfLines;
		
		if (lastThread==1)
			numberOfLines = NUMBER_OF_LINES/k + NUMBER_OF_LINES%k;
		else
			numberOfLines = NUMBER_OF_LINES/k;
		
		for(i=0; lineCounter < numberOfLines; i++){
			if(i%POSITION_OF_NEWLINE != NUMBER_OF_LETTERS){
				if(buf[i]!=letter) {
					result = -1;
					pthread_exit(0);
				}
			}else{
				if(buf[i] != '\n') {
					result = -1;
					pthread_exit(0);
				}
			lineCounter++;
			}
		}
		
		if(!read(fd, buf, aux)){
			if(flock(fd, LOCK_UN) < 0){
				perror("Failed to unlock file");
				exit(-1);
			}
			if((close(fd))< 0){
				perror("Failed to close file");
				exit(-1);
			}
			result = 0;
			pthread_exit(0);
		}else if (lastThread == 1){
			result = -1;
			pthread_exit(0);
		}
	}else{
		result = -1;
		pthread_exit(0);
	}
}