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; }
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); } }