/************************************************* * ADS Praktikum 1.1 * Ring.cpp * Erweiterung um Hilfsfunktionen gestattet. *************************************************/ // Ring .cpp #include "Ring.h" #include Ring::Ring() { m_anker = nullptr; m_countNodes = 0; }; void Ring::addNewNode(std::string Beschreibung, std::string Data) { RingNode* newNode = new RingNode(0, Beschreibung, Data); // Fall 1 Ring ist leer if (m_countNodes == 0) { m_anker = newNode; newNode->setNext(m_anker); m_anker->setNext(newNode); m_countNodes++; } // Fall 2 Ring ist nut teilweise voll else if (m_countNodes != 6) { RingNode* ptr = m_anker->getNext(); newNode->setNext(m_anker->getNext()); m_anker->setNext(newNode); m_anker = newNode; m_countNodes++; if (m_countNodes == 1) m_anker->setOldAge(m_anker->getOldAge() + 1); else { while (ptr != m_anker) { ptr->setOldAge(ptr->getOldAge() + 1); ptr = ptr->getNext(); } } } // Fall 3 Ring ist voll else if (m_countNodes == 6) { RingNode* nodeAge5 = m_anker->getNext(); newNode->setNext(nodeAge5->getNext()); m_anker->setNext(newNode); delete nodeAge5; m_anker = newNode; RingNode* ptr = m_anker->getNext(); while (ptr != m_anker) { ptr->setOldAge(ptr->getOldAge() + 1); ptr = ptr->getNext(); } } }; bool Ring::search(std::string Data) { if (m_anker != nullptr) { // Fängt beim letzten/ältesten Knoten in der Liste an RingNode* ptr = m_anker->getNext(); while (ptr->getNext() != m_anker->getNext() && ptr->getSymbolicData() != Data) ptr = ptr->getNext(); if (ptr->getSymbolicData() == Data) return true; else return false; } else return false; } void Ring::printNode(std::string Data) { if (search(Data)) { // Fangen beim ältesten Knoten an RingNode* ptr = m_anker->getNext(); // kein doppeltes Durchlaufen und Data stimmt nicht überein while (ptr->getNext() != m_anker->getNext() && ptr->getSymbolicData() != Data) ptr = ptr->getNext(); // die while Schleife wird abgebrochen werden, da Data übereinstimmt. Data muss vorhanden sein da if(search(data) == true) std::cout << "+ Gefunden in Backup: "; std::cout << "Alter " << ptr->getOldAge() << ", Beschreibung: " << ptr->getDescription() << ", Daten: " << ptr->getSymbolicData() << std::endl; } else std::cout << "+ Datensatz konnte nicht gefunden werden." << std::endl; } void Ring::print() { std::cout << std::endl; // Zählt den Knoten der ausgegeben werden soll for (int i = 0; i < m_countNodes; i++) { RingNode* tempNode = m_anker; // geht bis zu diesem for (int j = 0; j < m_countNodes - i; j++) { tempNode = tempNode->getNext(); } std::cout << "Alter " << tempNode->getOldAge() << ", Beschreibung: " << tempNode->getDescription() << ", Daten: " << tempNode->getSymbolicData() << std::endl << "-------------------------------" << std::endl; } std::cout << std::endl; };