/************************************************************************** * Dequeue * ------------------------------------------------------------------------ * Removes the first node from the list **************************************************************************/ Customer CustomerList::Dequeue() { Node<Customer>* temp; Customer tempCustomer; if(isEmpty()) { QMessageBox messageBox; messageBox.critical(0,"Error","**Cannot dequeue empty list**"); messageBox.setFixedSize(500,200); } else { //Assigns temp to head temp = _head; _head = _head->GetNext(); //Decrements the _nodeCount DecrementCount(); //Calls Orphan to set all pointers to NULL temp->Orphan(); tempCustomer = temp->GetData(); delete temp; temp = NULL; } return tempCustomer; }
CRefCntMem& CRefCntMem::operator=(const CRefCntMem& ref) { // Assignment DecrementCount(); // if m_ptr exists, no longer pointing to it m_ptr = ref.m_ptr; IncrementCount(); return *this; }
void CRefCntMem::ReAllocate(int nBytes, void *memory, bool deleteWhenDone, void (*deleteFunction)(void *ptr)) { // Allocate/deallocate memory DecrementCount(); if (memory) { m_ptr = new CRefCntMemPtr; m_ptr->m_nBytes = nBytes; m_ptr->m_memory = memory; m_ptr->m_deleteWhenDone = deleteWhenDone; m_ptr->m_refCnt = 1; m_ptr->m_delFn = deleteFunction; } else m_ptr = 0; // don't bother storing pointer to null memory }
void CustomerList::RemoveCustomer(Customer &someCustomer) { Node<Customer> * traversePtr; Node<Customer> * actionPtr; if(isEmpty()) { // cout << "Can't Dequeue an empty list" << endl; throw EmptyList(); } traversePtr = _head; int index = 0; while (index < _listLimit && traversePtr != NULL && !(traversePtr->GetData() == someCustomer)) { traversePtr = traversePtr->GetNext(); index++; } // overloaded operator if (traversePtr->GetData() == someCustomer) { // head deletion if (traversePtr == _head) { Dequeue(); } // end deletion else if (traversePtr == _tail) { _tail = _tail->GetPrevious(); _tail->SetNext(NULL); // _tail->_next = NULL; traversePtr->Orphan(); delete traversePtr; //Decrements the _nodeCount DecrementCount(); } // middle deletion else { actionPtr = traversePtr->GetPrevious(); actionPtr->SetNext(traversePtr->GetNext()); traversePtr->SetNext(traversePtr->GetNext()); traversePtr->SetPrevious(actionPtr); traversePtr->Orphan(); delete traversePtr; //Decrements the _nodeCount DecrementCount(); } } if (index == _listLimit && traversePtr == NULL) { // throw exception class if not found. traversePtr = NULL; throw NotFound(); } }
CRefCntMem::~CRefCntMem() { // Destructor DecrementCount(); m_ptr = 0; // not necessary, just for debugging }