From e65af04488f26ccb6fc7b3b2d62fb48ddbc33a60 Mon Sep 17 00:00:00 2001 From: localhorst Date: Mon, 21 Sep 2020 21:47:29 +0200 Subject: [PATCH] changed vector to list; again --- include/reHDD.h | 12 +++--- include/tui.h | 2 +- src/reHDD.cpp | 107 ++++++++++++++++++++++++------------------------ src/tui.cpp | 18 ++++---- 4 files changed, 71 insertions(+), 68 deletions(-) diff --git a/include/reHDD.h b/include/reHDD.h index 7432005..35024e8 100644 --- a/include/reHDD.h +++ b/include/reHDD.h @@ -41,7 +41,7 @@ #include #include #include -#include +#include #include #include #include @@ -81,11 +81,11 @@ public: private: - static void searchDrives(vector * pvecDrives); - static void printDrives(vector * pvecDrives); - static void filterIgnoredDrives(vector * pvecDrives); - static void filterNewDrives(vector * pvecOldDrives, vector * pvecNewDrives); - static void addSMARTData(vector * pvecDrives); + static void searchDrives(list * plistDrives); + static void printDrives(list * plistDrives); + static void filterIgnoredDrives(list * plistDrives); + static void filterNewDrives(list * plistOldDrives, list * plistNewDrives); + static void addSMARTData(list * plistDrives); static void ThreadScannDevices(); static void ThreadUserInput(); static void ThreadShred(); diff --git a/include/tui.h b/include/tui.h index d65e6a4..8eb9038 100644 --- a/include/tui.h +++ b/include/tui.h @@ -36,7 +36,7 @@ public: static void initTUI(); - void updateTUI(vector * pvecDrives, uint8_t u8SelectedEntry); + void updateTUI(list * plistDrives, uint8_t u8SelectedEntry); static enum UserInput readUserInput(); diff --git a/src/reHDD.cpp b/src/reHDD.cpp index 8e1bd06..2489dd2 100644 --- a/src/reHDD.cpp +++ b/src/reHDD.cpp @@ -13,9 +13,9 @@ static int fdShredInformPipe[2];//File descriptor for pipe that informs if a wip static std::mutex mxScannDrives; -vector vecNewDrives; //store found drives that are updated every 5sec +list listNewDrives; //store found drives that are updated every 5sec -static vector vecDrives; //stores all drive data from scann thread +static list listDrives; //stores all drive data from scann thread TUI *ui; @@ -31,8 +31,6 @@ static fd_set selectSet; reHDD::reHDD(void) { u8SelectedEntry = 0U; - - vecDrives.reserve(128); } /** @@ -65,8 +63,8 @@ void reHDD::app_logic(void) mxScannDrives.lock(); char dummy; read (fdNewDrivesInformPipe[0],&dummy,1); - filterNewDrives(&vecDrives, &vecNewDrives); //filter and copy to app logic vector - printDrives(&vecDrives); + filterNewDrives(&listDrives, &listNewDrives); //filter and copy to app logic vector + printDrives(&listDrives); mxScannDrives.unlock(); } if(FD_ISSET(fdShredInformPipe[0], &selectSet)) @@ -78,7 +76,7 @@ void reHDD::app_logic(void) #endif } //mxScannDrives.lock(); - ui->updateTUI(&vecDrives, u8SelectedEntry); + ui->updateTUI(&listDrives, u8SelectedEntry); //mxScannDrives.unlock(); } //endless loop thDevices.join(); @@ -88,9 +86,11 @@ void reHDD::app_logic(void) Drive* reHDD::getSelectedDrive() { - if(u8SelectedEntry < vecDrives.size() ) + if(u8SelectedEntry < listDrives.size() ) { - return &(vecDrives.at(u8SelectedEntry)); + list::iterator it = listDrives.begin(); + advance(it, u8SelectedEntry); + return &(*it); } else { @@ -104,10 +104,10 @@ void reHDD::ThreadScannDevices() while(true) { mxScannDrives.lock(); - vecNewDrives.clear(); - searchDrives(&vecNewDrives); //search for new drives and store them in list - filterIgnoredDrives(&vecNewDrives); //filter out ignored drives - addSMARTData(&vecNewDrives); //add S.M.A.R.T. Data to the drives + listNewDrives.clear(); + searchDrives(&listNewDrives); //search for new drives and store them in list + filterIgnoredDrives(&listNewDrives); //filter out ignored drives + addSMARTData(&listNewDrives); //add S.M.A.R.T. Data to the drives mxScannDrives.unlock(); write(fdNewDrivesInformPipe[1], "A",1); sleep(5); //sleep 5 sec @@ -119,7 +119,7 @@ void reHDD::ThreadCheckFrozenDrives() while(true) { mxScannDrives.lock(); - for(auto it = begin(vecDrives); it != end(vecDrives); ++it) + for(auto it = begin(listDrives); it != end(listDrives); ++it) { if(it->state == Drive::SHRED_ACTIVE) { @@ -141,12 +141,12 @@ void reHDD::ThreadUserInput() case TUI::UserInput::DownKey: //cout << "Down" << endl; handleArrowKey(TUI::UserInput::DownKey); - ui->updateTUI(&vecDrives, u8SelectedEntry); + ui->updateTUI(&listDrives, u8SelectedEntry); break; case TUI::UserInput::UpKey: //cout << "Up" << endl; handleArrowKey(TUI::UserInput::UpKey); - ui->updateTUI(&vecDrives, u8SelectedEntry); + ui->updateTUI(&listDrives, u8SelectedEntry); break; case TUI::UserInput::Undefined: //cout << "Undefined" << endl; @@ -154,7 +154,7 @@ void reHDD::ThreadUserInput() case TUI::UserInput::Abort: //cout << "Abort" << endl; handleAbort(); - ui->updateTUI(&vecDrives, u8SelectedEntry); + ui->updateTUI(&listDrives, u8SelectedEntry); break; case TUI::UserInput::Delete: //cout << "Delete" << endl; @@ -166,7 +166,7 @@ void reHDD::ThreadUserInput() getSelectedDrive()->state = Drive::DELETE_SELECTED; } } - ui->updateTUI(&vecDrives, u8SelectedEntry); + ui->updateTUI(&listDrives, u8SelectedEntry); break; case TUI::UserInput::Shred: //cout << "Shred" << endl; @@ -178,17 +178,17 @@ void reHDD::ThreadUserInput() getSelectedDrive()->state = Drive::SHRED_SELECTED; } } - ui->updateTUI(&vecDrives, u8SelectedEntry); + ui->updateTUI(&listDrives, u8SelectedEntry); break; case TUI::UserInput::Enter: //cout << "Enter" << endl; handleEnter(); - ui->updateTUI(&vecDrives, u8SelectedEntry); + ui->updateTUI(&listDrives, u8SelectedEntry); break; case TUI::UserInput::ESC: //cout << "ESC" << endl; handleESC(); - ui->updateTUI(&vecDrives, u8SelectedEntry); + ui->updateTUI(&listDrives, u8SelectedEntry); break; default: break; @@ -203,7 +203,7 @@ void reHDD::ThreadShred() Shred* pShredTask = new Shred(); //create new shred task pShredTask->shredDrive(getSelectedDrive(), &fdShredInformPipe[1]); //start new shred task delete pShredTask; //delete shred task - ui->updateTUI(&vecDrives, u8SelectedEntry); + ui->updateTUI(&listDrives, u8SelectedEntry);; } } @@ -215,24 +215,24 @@ void reHDD::ThreadDelete() getSelectedDrive()->state = Drive::TaskState::NONE; //delete finished getSelectedDrive()->bWasDeleteted = true; Logger::logThis()->info("Finished delete for: " + getSelectedDrive()->getModelName() + "-" + getSelectedDrive()->getSerial()); - ui->updateTUI(&vecDrives, u8SelectedEntry); + ui->updateTUI(&listDrives, u8SelectedEntry); } } -void reHDD::filterNewDrives(vector * pvecOldDrives, vector * pvecNewDrives) +void reHDD::filterNewDrives(list * plistOldDrives, list * plistNewDrives) { - vector ::iterator itOld; //Iterator for current (old) drive list - vector ::iterator itNew; //Iterator for new drive list that was created from to scann thread + list ::iterator itOld; //Iterator for current (old) drive list + list ::iterator itNew; //Iterator for new drive list that was created from to scann thread //remove offline old drives from previously run - for (itOld = pvecOldDrives->begin(); itOld != pvecOldDrives->end();) + for (itOld = plistOldDrives->begin(); itOld != plistOldDrives->end();) { if(itOld->bIsOffline == true) { Logger::logThis()->warning("Offline drive found: " + itOld->getPath()); - itOld = pvecOldDrives->erase(itOld); + itOld = plistOldDrives->erase(itOld); /* - if(pvecOldDrives->size() > 0){ //This can be a risk if the user starts a task for the selected drive and the selected drive changes + if(plistOldDrives->size() > 0){ //This can be a risk if the user starts a task for the selected drive and the selected drive changes u8SelectedEntry = 0U; } */ @@ -244,10 +244,10 @@ void reHDD::filterNewDrives(vector * pvecOldDrives, vector * pvecN } //search offline drives and mark them - for (itOld = pvecOldDrives->begin(); itOld != pvecOldDrives->end(); ++itOld) + for (itOld = plistOldDrives->begin(); itOld != plistOldDrives->end(); ++itOld) { itOld->bIsOffline = true; //set offline befor seachring in the new list - for (itNew = pvecNewDrives->begin(); itNew != pvecNewDrives->end();) + for (itNew = plistNewDrives->begin(); itNew != plistNewDrives->end();) { if((itOld->getSerial() == itNew->getSerial()) || (itOld->getPath() == itNew->getPath())) { @@ -255,7 +255,7 @@ void reHDD::filterNewDrives(vector * pvecOldDrives, vector * pvecN #ifdef LOG_LEVEL_HIGH Logger::logThis()->info("Delete new drive, because allready attached: " + itNew->getModelName()); #endif - itNew = pvecNewDrives->erase(itNew); //This drive is allready attached, remove from new list + itNew = plistNewDrives->erase(itNew); //This drive is allready attached, remove from new list } else { @@ -265,7 +265,7 @@ void reHDD::filterNewDrives(vector * pvecOldDrives, vector * pvecN } //mark offline old drives - for (itOld = pvecOldDrives->begin(); itOld != pvecOldDrives->end(); ++itOld) + for (itOld = plistOldDrives->begin(); itOld != plistOldDrives->end(); ++itOld) { if(itOld->bIsOffline == true) { @@ -276,12 +276,12 @@ void reHDD::filterNewDrives(vector * pvecOldDrives, vector * pvecN } //add new drives to drive list - for (itNew = pvecNewDrives->begin(); itNew != pvecNewDrives->end(); ++itNew) + for (itNew = plistNewDrives->begin(); itNew != plistNewDrives->end(); ++itNew) { - pvecOldDrives->push_back(pvecNewDrives->at(itNew - pvecNewDrives->begin())); + plistOldDrives->push_back(*itNew); Logger::logThis()->info("Add new drive: " + itNew->getModelName()); } - pvecNewDrives->clear(); + plistNewDrives->clear(); } /** @@ -289,7 +289,7 @@ void reHDD::filterNewDrives(vector * pvecOldDrives, vector * pvecN * \param pointer of vector * pvecDrives * \return void */ -void reHDD::searchDrives(vector * pvecDrives) +void reHDD::searchDrives(list * plistDrives) { // cout << "search drives ..." << endl; Logger::logThis()->info("--> search drives <--"); @@ -311,7 +311,7 @@ void reHDD::searchDrives(vector * pvecDrives) Drive* tmpDrive = new Drive(string(cLine).substr(0, 8)); tmpDrive->state = Drive::NONE; tmpDrive->bIsOffline = false; - pvecDrives->push_back(*tmpDrive); + plistDrives->push_back(*tmpDrive); } } fclose(outputfileHwinfo); @@ -322,13 +322,13 @@ void reHDD::searchDrives(vector * pvecDrives) * \param pointer of vector * pvecDrives * \return void */ -void reHDD::filterIgnoredDrives(vector * pvecDrives) +void reHDD::filterIgnoredDrives(list * plistDrives) { string sDelimiter = ":"; string sIgnoredDrivePath; string sIgnoredDriveUUID; - vector> vtlIgnoredDevices; //store drives from ingnore file + list> vtlIgnoredDevices; //store drives from ingnore file ifstream input( "ignoreDrives.conf" ); //read ingnore file @@ -351,8 +351,8 @@ void reHDD::filterIgnoredDrives(vector * pvecDrives) //loop through found entries in ingnore file for(auto row : vtlIgnoredDevices) { - vector ::iterator it; - for (it = pvecDrives->begin(); it != pvecDrives->end(); ++it) + list ::iterator it; + for (it = plistDrives->begin(); it != plistDrives->end(); ++it) { string sUUID; if (!get<0>(row).compare(it->getPath())) //find same drive based on path @@ -394,7 +394,7 @@ void reHDD::filterIgnoredDrives(vector * pvecDrives) #ifdef LOG_LEVEL_HIGH Logger::logThis()->info("same uuid found than in ignore file --> ignore this drive: " + it->getPath()); #endif - it = pvecDrives->erase(it); + it = plistDrives->erase(it); it--; } } @@ -407,13 +407,14 @@ void reHDD::filterIgnoredDrives(vector * pvecDrives) * \param pointer of vector * pvecDrives * \return void */ -void reHDD::printDrives(vector * pvecDrives) +void reHDD::printDrives(list * plistDrives) { #ifdef LOG_LEVEL_HIGH Logger::logThis()->info("------------DRIVES START------------"); //cout << "------------DRIVES---------------" << endl; - vector ::iterator it; - for (it = pvecDrives->begin(); it != pvecDrives->end(); ++it) + list ::iterator it; + uint8_t u8Index = 0; + for (it = plistDrives->begin(); it != plistDrives->end(); ++it) { /* cout << " Drive: " << distance(pvecDrives->begin(), it) << endl; @@ -428,8 +429,8 @@ void reHDD::printDrives(vector * pvecDrives) cout << endl;*/ ostringstream address; - address << (void const *)&pvecDrives->at(it - pvecDrives->begin()); - Logger::logThis()->info(to_string(it - pvecDrives->begin()) + ": " + it->getPath() + " - " + it->getModelFamily() + " - " + it->getSerial() + " @" + address.str()); + address << (void const *)&(*it); + Logger::logThis()->info(to_string(u8Index++) + ": " + it->getPath() + " - " + it->getModelFamily() + " - " + it->getSerial() + " @" + address.str()); } Logger::logThis()->info("------------DRIVES END--------------"); //cout << "---------------------------------" << endl; @@ -441,19 +442,19 @@ void reHDD::printDrives(vector * pvecDrives) * \param pointer of vector * pvecDrives * \return void */ -void reHDD::addSMARTData(vector * pvecDrives) +void reHDD::addSMARTData(list * plistDrives) { - vector ::iterator it; - for (it = pvecDrives->begin(); it != pvecDrives->end(); ++it) + list ::iterator it; + for (it = plistDrives->begin(); it != plistDrives->end(); ++it) { - Drive* pTmpDrive = iterator_to_pointer::iterator > (it); + Drive* pTmpDrive = iterator_to_pointer::iterator > (it); SMART::readSMARTData(pTmpDrive); } } void reHDD::handleArrowKey(TUI::UserInput userInput) { - int8_t u8EntrySize = (int8_t) vecDrives.size(); + int8_t u8EntrySize = (int8_t) listDrives.size(); switch (userInput) { case TUI::UserInput::DownKey: diff --git a/src/tui.cpp b/src/tui.cpp index 8244961..d171801 100644 --- a/src/tui.cpp +++ b/src/tui.cpp @@ -50,7 +50,7 @@ void TUI::initTUI() Logger::logThis()->info("UI successfully initialized"); } -void TUI::updateTUI(vector * pvecDrives, uint8_t u8SelectedEntry) +void TUI::updateTUI(list * plistDrives, uint8_t u8SelectedEntry) { mxUIrefresh.lock(); uint16_t u16StdscrX, u16StdscrY; @@ -69,8 +69,9 @@ void TUI::updateTUI(vector * pvecDrives, uint8_t u8SelectedEntry) delwin(detailview); - vector ::iterator it; - for (it = pvecDrives->begin(); it != pvecDrives->end(); ++it) + list ::iterator it; + uint8_t u8Index = 0U; + for (it = plistDrives->begin(); it != plistDrives->end(); ++it) { string sModelFamily = it->getModelFamily(); string sModelName = it->getModelName(); @@ -79,10 +80,10 @@ void TUI::updateTUI(vector * pvecDrives, uint8_t u8SelectedEntry) bool bSelectedEntry = false; - if(u8SelectedEntry == (it - pvecDrives->begin())) + if(u8SelectedEntry == u8Index) { bSelectedEntry = true; //mark this drive in entries list - displaySelectedDrive(pvecDrives->at(u8SelectedEntry), u16StdscrX, u16StdscrY); + displaySelectedDrive(*it, u16StdscrX, u16StdscrY); if((it->getPowerOnHours() >= WORSE_HOURS) || (it->getPowerCycles() >= WORSE_POWERUP) || (it->getErrorCount() > 0)) { @@ -133,11 +134,12 @@ void TUI::updateTUI(vector * pvecDrives, uint8_t u8SelectedEntry) break; } - WINDOW * tmp = createEntryWindow( ((int)(u16StdscrX/3) - 2), 5, 3, (5* (it - pvecDrives->begin()) )+3, sModelFamily, sModelName, sCapacity, sState, bSelectedEntry); + WINDOW * tmp = createEntryWindow( ((int)(u16StdscrX/3) - 2), 5, 3, (5* (u8Index) )+3, sModelFamily, sModelName, sCapacity, sState, bSelectedEntry); wrefresh(tmp); + u8Index++; }//end loop though drives - if(pvecDrives->size() == 0) + if(plistDrives->size() == 0) { //no selected drive present Logger::logThis()->warning("no selected drive present"); @@ -148,7 +150,7 @@ void TUI::updateTUI(vector * pvecDrives, uint8_t u8SelectedEntry) menustate.bDelete = false; menustate.bShred = false; - menuview=createMenuView(((u16StdscrX)-(int)(u16StdscrX/3)-7), 10, (int)(u16StdscrX/3)+5,(u16StdscrY-11), menustate); + menuview=createMenuView(((int)(u16StdscrX/3)-10 ), 10, (int)(u16StdscrX/3)+5,(u16StdscrY-11), menustate); wrefresh(menuview); detailview=overwriteDetailViewWindow(((u16StdscrX)-(int)(u16StdscrX/3)-7), (u16StdscrY-15), (int)(u16StdscrX/3)+5);