//============================================================================
// Name        : Factory.h
// Author      : Alessandro Pinto <apinto@eecs.berkeley.edu>
//               University of California, Berkeley
//               545 Cory Hall, Berkeley, CA 94720
// Version     : $Id: Factory.h,v 1.2 2007/12/21 06:21:46 apinto Exp $
// Copyright   : See COPYING file that comes with this distribution
// Description : This class generates networks on demand.
//
//============================================================================


/**This class generates networks on demand.
 *
 *
 *
 *@author Alessandro Pinto,
 *@author The Donald O. Pederson Center for Electronic System Design
 *@author Electrical Engineering Department
 *@author University of California, Berkeley
 *@author 545P Cory Hall, Berkeley, CA 94720
 *@author +1 (510) 642 9670
 *@author http://www.eecs.berkeley.edu/~apinto
 *
 *@version $Id: Factory.h,v 1.2 2007/12/21 06:21:46 apinto Exp $
 */

#ifndef FACTORY_H_
#define FACTORY_H_

#include <string>
#include <vector>
#include <list>
#include "IdGraph.h"
#include "Network.hpp"

using namespace std ;

namespace cosi {

class Factory {
public:
	Factory();
	virtual ~Factory();

	//Define the object to generate
	void AllocateNetwork( string pType );
	void SetNetworkName(string pName);
	//Fill in the graph
	void AddVertex(Vertex pV);
	void AddVertex(Vertex pV,string pName);
	void AddEdge( Edge pE ) ;
	void AddEdge( Edge pE , string pName) ;
	//Fill in the labels
	void SetLabelMapEntry(string pMapName , Vertex pV , list<string> pString , list<int> pInt , list<double> pDouble );
	void SetLabelMapEntry(string pMapName , Edge pE , list<string> pString , list<int> pInt , list<double> pDouble );


	//Return the object
	IdGraph* GetNetwork( );

private:

	IdGraph* mNetwork;

};

}

#endif /*FACTORY_H_*/
