#include <malloc.h>
#include <iostream>

#include "record_routes.h"

using namespace std;

struct shortestroutes {
	int prevPath;
};
typedef struct shortestroutes shortestRoutes;
typedef shortestRoutes *shortestRoutesPtr;

shortestRoutesPtr shortestPaths;

record_routes::record_routes(int nodecount)
{
	nodeCount = nodecount;
	initialize(nodecount); 
}

record_routes::~record_routes()
{
	free(shortestPaths);
}

void record_routes::initialize(int nodecount)
{
	shortestPaths = (shortestRoutesPtr)calloc( nodecount, sizeof(shortestRoutes) );

	if(shortestPaths != NULL) {
		for(i=0; i<nodecount; i++) {
			shortestPaths[i].prevPath = -1;
		}
	}
	else
		cout << "Can't initialize record for route " << i << "\n";
}

void record_routes::record(int source, int destination)
{
	shortestPaths[destination].prevPath = source;
}

void record_routes::printRoutes(int currNode)
{
	if(shortestPaths[currNode].prevPath == -1)
		cout << "Shortest path from node \'0\' to node \'" << currNode << "\' is not yet being found\n";
	else {
		cout << "Shortest path from node \'0\' to node \'" << currNode << "\':\n"
			<< currNode << " --> ";
		int preRoute = shortestPaths[currNode].prevPath;
		while(preRoute != -1) {
			cout << preRoute << " --> ";
			preRoute = shortestPaths[preRoute].prevPath;
		}
		cout << "End\n";
	}
}