/**************************************************************************
* 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;
}
예제 #2
0
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;
}
예제 #3
0
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();
	}
}
예제 #5
0
CRefCntMem::~CRefCntMem()
{
    // Destructor
    DecrementCount();
    m_ptr = 0;      // not necessary, just for debugging
}