/** * if the new read left-most position @param pos is in the second vector (this->vector2), * that means the first vector (this->vector1) is no longer in use. * so we can swap them */ void DepthCounter::beginNewRead(const uint64_t& pos){ #ifdef _DEBUG_DEPTHCOUNTER_ fprintf(stderr, "beginNewRead at %lu\n", pos); #endif if (pos >= this->vector2->getStart() + this->vector2->getLen()){ calculateFrequency(this->vector1); calculateFrequency(this->vector2); this->vector1->setStart(pos); this->vector2->setStart(pos + this->vector1->getLen()); this->vector1->clear(); this->vector2->clear(); } else if (pos >= this->vector2->getStart()){ swapVector(); } else { //assert(pos >= this->vector1->getStart()); if (pos >= this->vector1->getStart()) { } else { fprintf(stderr, "WARNING: Rewind distVec - this means your input files may not be sorted.\n"); calculateFrequency(this->vector1); calculateFrequency(this->vector2); this->vector1->setStart(pos); this->vector2->setStart(pos + this->vector1->getLen()); this->vector1->clear(); this->vector2->clear(); } }; };
void dswapVector3(sparseVector *sparse1, sparseVector *sparse2, int indexStart, int indexEnd) { REAL *dense1, *dense2; if(indexStart<=0) indexStart = 1; if(indexEnd<=0) indexEnd = MAX(lastIndex(sparse1), lastIndex(sparse2)); if(indexStart <= firstIndex(sparse1) && indexStart <= firstIndex(sparse2) && indexEnd >= lastIndex(sparse1) && indexEnd >= lastIndex(sparse2)) { swapVector(sparse1, sparse2); } else { CALLOC(dense1, (indexEnd+1)); CALLOC(dense2, (indexEnd+1)); getVector(sparse1, dense1, indexStart, indexEnd, TRUE); getVector(sparse2, dense2, indexStart, indexEnd, TRUE); clearVector(sparse1, indexStart, indexEnd); clearVector(sparse2, indexStart, indexEnd); putVector(sparse1, dense2, indexStart, indexEnd); putVector(sparse2, dense1, indexStart, indexEnd); MEMFREE(dense1); MEMFREE(dense2); } }
int main(int argc, char *argv[]) { //initialize global variable index1=0; // index of movie list index2=0; // index of smi list index_inside_movie=TRUE; // initialize varables int ch; WIN win; WIN win2; WINDOW *popup_win; // init ncurses window initscr(); cbreak(); //raw(); keypad(stdscr, TRUE); noecho(); curs_set(0); if(has_colors() == FALSE) { endwin(); printf("Your terminal does not support color\n"); exit(1); } start_color(); init_pair(1, COLOR_BLACK, COLOR_WHITE); init_pair(2, COLOR_BLACK, COLOR_YELLOW); // print headline int start_line_number = print_headline(); // load local files. loadFiles("."); // sorting std::sort(vMovieFiles.begin(), vMovieFiles.end(), sortOp); std::sort(vSmiFiles.begin(), vSmiFiles.end(), sortOp); // listFiles return 0 when no error if(listFiles() == 0) { init_win_params(&win, start_line_number+2, 0, 0, vMovieFiles.size() + 1); init_win_params(&win2, start_line_number+3+vMovieFiles.size()+3, 0, 0, vSmiFiles.size() + 1); create_box(&win, TRUE,1); create_box2(&win2, TRUE,1); while( (ch = getch()) != 'q') { switch(ch) { case 'j': case KEY_DOWN: { create_box(&win, FALSE,1); create_box(&win2, FALSE,1); if(index_inside_movie == TRUE) { if(index1 == vMovieFiles.size()-1) { index1 = 0; } else { index1++; } } else { if(index2 == vSmiFiles.size()-1) { index2 =0; } else { index2++; } } create_box(&win, TRUE,1); create_box2(&win2, TRUE,1); break; } case 'k': case KEY_UP: { create_box(&win, FALSE,1); create_box(&win2, FALSE,1); if(index_inside_movie == TRUE) { if(index1 == 0) { index1 = vMovieFiles.size()-1; } else { index1--; } } else { if(index2 == 0) { index2 = vSmiFiles.size()-1; } else { index2--; } } create_box(&win, TRUE,1); create_box2(&win2, TRUE,1); break; } case '\t': case KEY_BTAB: { index_inside_movie = !index_inside_movie; create_box(&win, TRUE,1); create_box2(&win2, TRUE,1); break; } case 'd': { std::string popup_msg = "delete?(d/esc)"; popup_win = create_win(3, popup_msg.length()+3, start_line_number+5,(int)COLS/2-popup_msg.length(),popup_msg); wrefresh(popup_win); int ch2; while( (ch2=getch()) != 'e') { switch(ch2) { case 'd': { if(index_inside_movie) { std::vector<std::string>::iterator iter1=vMovieFiles.begin(); if(vMovieFiles.size()!=1){ if(index1 == vMovieFiles.size()-1){ vMovieFiles.erase(iter1 + index1); index1--; } else vMovieFiles.erase(iter1 + index1); } start_line_number = print_headline(); init_win_params(&win, start_line_number+2, 0, 0, vMovieFiles.size() + 1); init_win_params(&win2, start_line_number+3+vMovieFiles.size()+3, 0, 0, vSmiFiles.size() + 1); } else { std::vector<std::string>::iterator iter2=vSmiFiles.begin(); if(vSmiFiles.size()!=1){ if(index2 == vSmiFiles.size()-1){ vSmiFiles.erase(iter2 + index2); index2--; } else vSmiFiles.erase(iter2 + index2); } start_line_number = print_headline(); init_win_params(&win, start_line_number+2, 0, 0, vMovieFiles.size() + 1); init_win_params(&win2, start_line_number+3+vMovieFiles.size()+3, 0, 0, vSmiFiles.size() + 1); } break; } case 'e': { delwin(popup_win); break; } } // switch if(ch2 == 'd') break; } //while clear(); int start_line_number = print_headline(); create_box(&win, TRUE,1); create_box2(&win2, TRUE,1); break; } // case d case ' ': //case space for selection to move { create_box(&win, TRUE,2); create_box2(&win2, TRUE,2); wrefresh(stdscr); std::string popup_msg = "down/up/esc?(j/k/e)"; popup_win = create_win(3, popup_msg.length()+3, start_line_number+5,(int)COLS/2-popup_msg.length()/2,popup_msg); wrefresh(popup_win); int ch3; while( (ch3=getch()) != 'e') { switch(ch3) { case 'j': case KEY_DOWN: { swapVector(true); break; } case 'k': case KEY_UP: { swapVector(false); break; } case 'e': { delwin(popup_win); break; } } // end of switch if(ch3 == 'j' || ch3 == 'k' || ch3 == KEY_DOWN || ch3 == KEY_UP) break; } // while clear(); int start_line_number = print_headline(); create_box(&win, TRUE,1); create_box2(&win2, TRUE,1); break; //end of case space } // case space case 'y': { // if counts are mismatched if(vMovieFiles.size() != vSmiFiles.size()) { std::string popup_msg = "Mismatch Error! (e)"; popup_win = create_win(3, popup_msg.length()+3, start_line_number+5,(int)COLS/2-popup_msg.length()/2,popup_msg); wrefresh(popup_win); int ch5; while ( (ch5=getch()) != 'e') { switch(ch5) { case 'e': { delwin(popup_win); break; } } if(ch5 == 'e') break; } clear(); int start_line_number = print_headline(); create_box(&win, TRUE,1); create_box2(&win2, TRUE,1); break; } // end of if statement = counts are mismatched std::string popup_msg = "confirm?(m)ovies (s)ubtitle(m/s/e)"; popup_win = create_win(3, popup_msg.length()+3, start_line_number+5,(int)COLS/2-popup_msg.length()/2,popup_msg); wrefresh(popup_win); int ch4; while( (ch4=getch()) != 'e') { switch(ch4) { case 'm': { int err = renameSmiFiles(); std::cout << "err: " << err << std::endl; break; } case 's': { int err = renameAviFiles(); std::cout << "err: " << err << std::endl; break; } case 'e': { delwin(popup_win); break; } } // end of switch if(ch4 == 'm' || ch4 == 's') break; } // while // rename it then files reloading // load local files. loadFiles("."); // sorting std::sort(vMovieFiles.begin(), vMovieFiles.end(), sortOp); std::sort(vSmiFiles.begin(), vSmiFiles.end(), sortOp); clear(); init_win_params(&win, start_line_number+2, 0, 0, vMovieFiles.size() + 1); init_win_params(&win2, start_line_number+3+vMovieFiles.size()+3, 0, 0, vSmiFiles.size() + 1); int start_line_number = print_headline(); create_box(&win, TRUE,1); create_box2(&win2, TRUE,1); break; // end of case y } // case y } // switch } // while } else { endwin(); std::cout << "You don't have No relative files... Bye..." << std::endl; return 1; } // delete ncurses window endwin(); return 0; } //end of main
void daxpyVector3(sparseVector *sparse1, REAL scalar, sparseVector *sparse2, int indexStart, int indexEnd) { int i1, i2, k, p1, p2, c1, c2; sparseVector *hold; if(sparse1->count == 0) return; /* Spool to start positions */ i1 = 1; c1 = sparse1->count; while(i1 <= c1 && sparse1->index[i1] < indexStart) i1++; if(i1 <= c1) p1 = sparse1->index[i1]; else p1 = indexEnd+1; i2 = 1; c2 = sparse2->count; while(i2 <= c2 && sparse2->index[i2] < indexStart) i2++; if(i2 <= c2) p2 = sparse2->index[i2]; else p2 = indexEnd+1; /* Create a temporary vector */ k = c1+c2; if(k > 0) { hold = createVector(MAX(sparse1->limit, sparse2->limit), k); putDiagonalIndex(hold, getDiagonalIndex(sparse2)); } else hold = sparse2; /* Loop over all items in both vectors */ while((i1 <= c1 && p1 <= indexEnd) || (i2 <= c2 && p2 <= indexEnd)) { k = 0; /* Add/spool exclusive right-vector items */ while(i2 <= c2 && p2 < p1) { if(hold != sparse2) { putItem(hold, p2, sparse2->value[i2]); } i2++; if(i2 <= c2) p2 = sparse2->index[i2]; else p2 = indexEnd+1; k++; } /* Add equal-indexed items */ while(i1 <= c1 && i2 <= c2 && p1 == p2) { /* if(hold != sparse2) */ putItem(hold, p1, scalar*sparse1->value[i1]+sparse2->value[i2]); /* else addtoItem(sparse2, -i2, scalar*sparse1->value[i1]); */ i1++; if(i1 <= c1) p1 = sparse1->index[i1]; else p1 = indexEnd+1; i2++; if(i2 <= c2) p2 = sparse2->index[i2]; else p2 = indexEnd+1; k++; } /* Add exclusive left-vector items */ while(i1 <= c1 && p1 < p2) { putItem(hold, p1, scalar*sparse1->value[i1]); /* if(hold == sparse2) c2++; */ i1++; if(i1 <= c1) p1 = sparse1->index[i1]; else p1 = indexEnd+1; k++; } if(k == 0) break; } /* if(hold != sparse2) */ { swapVector(hold, sparse2); freeVector(hold); } #ifdef DEBUG_SPARSELIB verifyVector(sparse2); #endif }