#include <iostream>
#include <string>
#include <list>
#include "Shape.h"
#include "Square.h"
#include "Circle.h"
#include "Node.h"
#include "List.h"

template <class T> void print(T&);

int main()
{
	/* This is a list from the STL.
	   Soln to Fridays Questions */
	std::list<Shape*> sl;
	Circle *c = new Circle(5);
	Square *s = new Square(4);
	Square *s1 = new Square(7);
	Square *s2 = new Square(6);
	Square *s3 = new Square(5);
	sl.push_front(s);
	sl.push_front(c);
	sl.push_front(s1);
	sl.push_front(s2);
	sl.push_front(s3);
	for (std::list<Shape*>::iterator i = sl.begin(); i != sl.end(); i++)
	{
		if (Circle *c = dynamic_cast<Circle*>(*i))
			print<Circle*>(c);
        	else if (Square *sq = dynamic_cast<Square*>(*i))
			print<Square*>(sq);
	}

	/* This is the code to test the Thursday Question! */
	//List *l = new List();
	/*l->addNode(new Node(s));
 	l->addNode(new Node(c));
	l->addNode(new Node(s1));
	l->addNode(new Node(s2));
	l->addNode(new Node(s3));
	l->printList();
	std::cout<<std::endl;
	l->printListInReverse(l->getHead());
	std::cout<<std::endl;
	l->printAreas();
	l->removeNode("Circle");
	l->printList();
	l->removeNode("Triangle");*/
}

template <class T> void print(T& shape)
{
	std::cout<<*shape;
}

