PrecondViolatedExcepth ifndef PRECONDVIOLATEDEXCEPT define P

/PrecondViolatedExcept.h

#ifndef PRECOND_VIOLATED_EXCEPT_
#define PRECOND_VIOLATED_EXCEPT_

#include <stdexcept>

#include <string>


class PrecondViolatedExcept : public std::logic_error
{
public:

   PrecondViolatedExcept(const std::string& message = \"\");
}; // end PrecondViolatedExcept

#endif

//PrecondViolatedExcept.cpp

#include \"PrecondViolatedExcept.h\"


PrecondViolatedExcept::PrecondViolatedExcept(const std::string& message)
   : std::logic_error(\"Precondition Violated Exception: \" + message)
{
} // end constructor

//Node.h

#ifndef NODE_
#define NODE_

template<class ItemType>
class Node
{
private:
   ItemType item; // A data item
   Node* next; // Pointer to next node

public:

   Node();

  
   Node(const ItemType& anItem);


   Node(const ItemType& anItem, Node* nextNodePtr);


   void setItem(const ItemType& anItem);


   void setNext(Node* nextNodePtr);


   ItemType getItem() const;


   Node* getNext() const;
}; // end Node


#endif

//Node.cpp

#include \"Node.h\"


template<class ItemType>
Node::Node() : next(nullptr)
{
} // end default constructor


template<class ItemType>
Node::Node(const ItemType& anItem) : item(anItem), next(nullptr)
{
} // end constructor


template<class ItemType>
Node::Node(const ItemType& anItem, Node* nextNodePtr) :
item(anItem), next(nextNodePtr)
{
} // end constructor


template<class ItemType>
void Node::setItem(const ItemType& anItem)
{
   item = anItem;
} // end setItem


template<class ItemType>
void Node::setNext(Node* nextNodePtr)
{
   next = nextNodePtr;
} // end setNext


template<class ItemType>
ItemType Node::getItem() const
{
   return item;
} // end getItem


template<class ItemType>
Node* Node::getNext() const
{
   return next;
} // end getNext

//LinkedSortedList.h

#ifndef PRIORITY_QUEUE_

#define PRIORITY_QUEUE_

#include \"LinkedSortedList.cpp\"

#include \"PrecondViolatedExcept.h\"

#include <memory>

template <class ItemType>

class SL_PriorityQueue

{

private:

std::unique_ptr<LinkedSortedList<ItemType>> slistPtr; //Ptr to sorted list of items

public:

SL_PriorityQueue();

SL_PriorityQueue(const SL_PriorityQueue& pq);

~SL_PriorityQueue();

bool isEmpty() const;

bool enqueue(const ItemType& newEntry);

bool dequeue();

ItemType peekFront() const throw(PrecondViolatedExcept);

}; //end SL_PriorityQueue

#endif

//LinkedSortedList.cpp

#include \"SL_PriorityQueue.h\"

#include <memory>

template<class ItemType>

SL_PriorityQueue<ItemType>::SL_PriorityQueue(): slistPtr(std::make_unique<LinkedSortedList<ItemType>>())

{

}

template<class ItemType>

SL_PriorityQueue<ItemType>::SL_PriorityQueue(const SL_PriorityQueue& pq)

{

}

template<class ItemType>

SL_PriorityQueue<ItemType>::~SL_PriorityQueue()

{

}

template<class ItemType>

bool SL_PriorityQueue<ItemType>::isEmpty() const

{

return slistPtr->isEmpty();

}

template<class ItemType>

bool SL_PriorityQueue<ItemType>::enqueue(const ItemType& newEntry)

{

return slistPtr-> insertSorted(newEntry);

}//end enqueue

template<class ItemType>

bool SL_PriorityQueue<ItemType>::dequeue()

{

//The highest-priority item is at the end of the sorted list

return slistPtr->remove(slistPtr->getLength());

}//end dequeue

template<class ItemType>

ItemType SL_PriorityQueue<ItemType>::peekFront() const throw(PrecondViolatedExcept)

{

if(isEmpty())

throw PrecondViolatedExcept(\"peekFront() called with empty queue.\");

// Queue is not empty: return highest-priority item

return slistPtr->getEntry(slistPtr->getLength());

}

//SL_PriorityQueue.h

#ifndef PRIORITY_QUEUE_

#define PRIORITY_QUEUE_

#include \"LinkedSortedList.cpp\"

#include \"PrecondViolatedExcept.h\"

#include <memory>

template <class ItemType>

class SL_PriorityQueue

{

private:

std::unique_ptr<LinkedSortedList<ItemType>> slistPtr; //Ptr to sorted list of items

public:

SL_PriorityQueue();

SL_PriorityQueue(const SL_PriorityQueue& pq);

~SL_PriorityQueue();

bool isEmpty() const;

bool enqueue(const ItemType& newEntry);

bool dequeue();

ItemType peekFront() const throw(PrecondViolatedExcept);

}; //end SL_PriorityQueue

#endif

/SL_PriorityQueue.cpp

#include \"SL_PriorityQueue.h\"

#include <memory>

template<class ItemType>

SL_PriorityQueue<ItemType>::SL_PriorityQueue(): slistPtr(std::make_unique<LinkedSortedList<ItemType>>())

{

}

template<class ItemType>

SL_PriorityQueue<ItemType>::SL_PriorityQueue(const SL_PriorityQueue& pq)

{

}

template<class ItemType>

SL_PriorityQueue<ItemType>::~SL_PriorityQueue()

{

}

template<class ItemType>

bool SL_PriorityQueue<ItemType>::isEmpty() const

{

return slistPtr->isEmpty();

}

template<class ItemType>

bool SL_PriorityQueue<ItemType>::enqueue(const ItemType& newEntry)

{

return slistPtr-> insertSorted(newEntry);

}//end enqueue

template<class ItemType>

bool SL_PriorityQueue<ItemType>::dequeue()

{

//The highest-priority item is at the end of the sorted list

return slistPtr->remove(slistPtr->getLength());

}//end dequeue

template<class ItemType>

ItemType SL_PriorityQueue<ItemType>::peekFront() const throw(PrecondViolatedExcept)

{

if(isEmpty())

throw PrecondViolatedExcept(\"peekFront() called with empty queue.\");

// Queue is not empty: return highest-priority item

return slistPtr->getEntry(slistPtr->getLength());

}

//main.cpp

#include <iostream>

#include <fstream>

#include <string>

//#include \"ListQueue.cpp\"

//#include \"ArrayQueue.cpp\"

#include \"SL_PriorityQueue.cpp\"

using namespace std;

struct Event

{

char Type;

long Time;

int Length;

long Customer;

};

//void processArrival(Event arrivalEvent, )

void simulate()

{

/*

string fileName;

long arrivalTime;

int transactionLength;

int number_of_events=0;

Event event;

ifstream inputFile;

//ListQueue<long>* bankLine= new ListQueue<long>();

SL_PriorityQueue<Event>* eventPriorityQueue= new SL_PriorityQueue<Event>();

bool tellerAvailable=true;

cout<<\"Enter the file name:\"<<endl;

cin>>fileName;

inputFile.open(fileName);

if (inputFile)

{

while (inputFile >>arrivalTime)

{

event.Type=\'A\';

event.Time = arrivalTime;

inputFile >> transactionLength;

event.Length=transactionLength;

event.Customer=number_of_events+1;

number_of_events++;

eventPriorityQueue->enqueue(event);

}

}

else

cout << \"Error opening the file.\" << endl;

inputFile.close();

*/

}

int main()

{

//simulate();

/*

ListQueue<int>* bankLine= new ListQueue<int>();

bankLine->enqueue(1);

bankLine->enqueue(2);

cout<<bankLine->peekFront()<<endl;

bankLine->dequeue();

cout<<bankLine->peekFront()<<endl;

*/

SL_PriorityQueue<int>* bankLine= new SL_PriorityQueue<int>();

bankLine->enqueue(1);

bankLine->enqueue(2);

cout<<bankLine->peekFront()<<endl;

bankLine->dequeue();

cout<<bankLine->peekFront()<<endl;

return 0;

}

//makefile

CC = g++

DEBUG = -g

CFLAGS = -Wall -c $(DEBUG)

LFLAGS = -Wall $(DEBUG)

PA05 : PA05.o Node.o PrecondViolatedExcept.o LinkedSortedList.o SL_PriorityQueue.o

$(CC) $(LFLAGS) -std=c++14 PrecondViolatedExcept.o Node.o PA05.o LinkedSortedList.o SL_PriorityQueue.o -o PA05

PA05.o : SL_PriorityQueue.cpp PA05.cpp

$(CC) $(CFLAGS) -std=c++14 PA05.cpp

LinkedSortedList.o : LinkedSortedList.h LinkedSortedList.cpp PrecondViolatedExcept.cpp Node.cpp

$(CC) $(CFLAGS) -std=c++14 LinkedSortedList.cpp

SL_PriorityQueue.o : SL_PriorityQueue.h SL_PriorityQueue.cpp PrecondViolatedExcept.cpp LinkedSortedList.cpp

$(CC) $(CFLAGS) -std=c++14 SL_PriorityQueue.cpp

PrecondViolatedExcep.o : PrecondViolatedExcept.cpp PrecondViolatedExcept.h

$(CC) $(CFLAGS) -std=c++14 PrecondViolatedExcept.cpp

Node.o : Node.h Node.cpp

$(CC) $(CFLAGS) -std=c++14 Node.cpp

clean:

\ m *.o PA05

I got \"LinkedSortedList.cpp:12:9: error: no match for ‘operator=’ (operand types are ‘std::shared_ptr<Node<int> >’ and ‘Node<int>*’)\"... Does anyone know how to fix it?

\"

Solution

You can\'t directly assign a Node<ItemType> to a shared_ptr. yu will have to use get method and shared_ptr constructor instead..

use this code for LinkedQueue.cpp

//LinkedQueue.cpp

#include \"LinkedQueue.h\"
#include \"Node.cpp\"


template<class ItemType>
LinkedQueue<ItemType>::LinkedQueue()
{
   ;
}

template<class ItemType>
LinkedQueue<ItemType>::LinkedQueue(const LinkedQueue& aQueue)
{
   ;
}
template<class ItemType>
LinkedQueue<ItemType>::~LinkedQueue()
{
   ;
}

template<class ItemType>
bool LinkedQueue<ItemType>::isEmpty() const
{
   return false;
}


template<class ItemType>
bool LinkedQueue<ItemType>::enqueue(const ItemType& newEntry)
{
   auto newNodePtr = std::make_shared<Node<ItemType>>(newEntry);

   //Insert the new node
   if (isEmpty())
       frontPtr = newNodePtr; //The queue was empty
   else
       backPtr.get()->setNext(newNodePtr.get()); //The queue was not empty

   backPtr = newNodePtr; //New node is at back
   return true;
} //end enqueue

template<class ItemType>
bool LinkedQueue<ItemType>::dequeue()
{
   bool result = false;
   if (!isEmpty())
   {
       //Queue is not empty; remove front
       auto nodeToDeletePtr = frontPtr;

       if (frontPtr == backPtr)
       {
           //Special case: one node in queue
           //Set frontPtr and backPtr to nullptr
           frontPtr.reset();
           backPtr.reset();
       }
       else{
           std::shared_ptr<Node<ItemType>> newFront(frontPtr.get()->getNext());
           frontPtr = newFront;
       }

       //Maintain an accurate reference count for first node
       nodeToDeletePtr->setNext(nullptr);
       //Removed node will be deallocated when ethod ends
       result = true;
   } //end if
   return result;
} //end dequeue

template<class ItemType>
ItemType LinkedQueue<ItemType>::peekFront() const throw(PrecondViolatedExcept){
   return 0;
}

/PrecondViolatedExcept.h #ifndef PRECOND_VIOLATED_EXCEPT_ #define PRECOND_VIOLATED_EXCEPT_ #include <stdexcept> #include <string> class PrecondViola
/PrecondViolatedExcept.h #ifndef PRECOND_VIOLATED_EXCEPT_ #define PRECOND_VIOLATED_EXCEPT_ #include <stdexcept> #include <string> class PrecondViola
/PrecondViolatedExcept.h #ifndef PRECOND_VIOLATED_EXCEPT_ #define PRECOND_VIOLATED_EXCEPT_ #include <stdexcept> #include <string> class PrecondViola
/PrecondViolatedExcept.h #ifndef PRECOND_VIOLATED_EXCEPT_ #define PRECOND_VIOLATED_EXCEPT_ #include <stdexcept> #include <string> class PrecondViola
/PrecondViolatedExcept.h #ifndef PRECOND_VIOLATED_EXCEPT_ #define PRECOND_VIOLATED_EXCEPT_ #include <stdexcept> #include <string> class PrecondViola
/PrecondViolatedExcept.h #ifndef PRECOND_VIOLATED_EXCEPT_ #define PRECOND_VIOLATED_EXCEPT_ #include <stdexcept> #include <string> class PrecondViola
/PrecondViolatedExcept.h #ifndef PRECOND_VIOLATED_EXCEPT_ #define PRECOND_VIOLATED_EXCEPT_ #include <stdexcept> #include <string> class PrecondViola
/PrecondViolatedExcept.h #ifndef PRECOND_VIOLATED_EXCEPT_ #define PRECOND_VIOLATED_EXCEPT_ #include <stdexcept> #include <string> class PrecondViola
/PrecondViolatedExcept.h #ifndef PRECOND_VIOLATED_EXCEPT_ #define PRECOND_VIOLATED_EXCEPT_ #include <stdexcept> #include <string> class PrecondViola
/PrecondViolatedExcept.h #ifndef PRECOND_VIOLATED_EXCEPT_ #define PRECOND_VIOLATED_EXCEPT_ #include <stdexcept> #include <string> class PrecondViola

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site