/***************************************************************************
*                                                                          *
*  Copyright (C) Golaem S.A.  All Rights Reserved.                         *
*                                                                          *
***************************************************************************/

#pragma once

#include "glmSDKAPI.h"

#include "glmRoadmapNode.h"
#include "glmRoadmapArc.h"

namespace glm
{
	/** 
	* \brief Base class for a generic oriented graph.
	*
	* \ingroup graphs
	*
	* \author Golaem <dev@golaem.com>
	*/
	// former templates :
	// int = int
	// int = int
	// INavigationMeshLocation = RoadmapNode class
	// RoadmapArc = RoadMapArc class
	class GLM_SDK_API IOrientedGraph
	{
	public:
		//typedef std::pair<int, INavigationMeshLocation> Node;
		//typedef std::pair<std::pair<int, int>, RoadmapArc> Arc;

		GLM_ABSTRACTCLASS_STAT_ID( glm::MemoryStatIds::GolaemShared)

		virtual ~IOrientedGraph() {}

		/**
		* \brief Retrieve the data attached to a node.
		* \param nodeId The identifier of the node.
		*
		* \pre The given identifier must be valid within the current graph.
		*/
		virtual const RoadmapNode & getNode(const int& nodeId) const = 0;
			
		/**
		* \brief Retrieve the data attached to an arc.
		* \param arcId The identifier of the arc.
		*
		* \pre The given identifier must be valid within the current graph.
		*/
		virtual const RoadmapArc & getArc(const int& arcId) const = 0;
	};
}

