//============================================================================
// Name        : Link.h
// Author      : Alessandro Pinto <apinto@eecs.berkeley.edu>
//               University of California, Berkeley
//               545 Cory Hall, Berkeley, CA 94720
// Version     : $Id: Link.h,v 1.2 2008/03/08 20:31:06 apinto Exp $
// Copyright   : See COPYING file that comes with this distribution
// Description : Definition of a library link.
//============================================================================


#ifndef LINK_H_
#define LINK_H_

#include <string>

using namespace std ;

namespace cosi {

/** This class defines a library link.
 *
 *
 *@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: Link.h,v 1.2 2008/03/08 20:31:06 apinto Exp $
 */

class Link {
public:
	Link();
	virtual ~Link();
	void SetName(string pS);
	string GetName();
	void SetType(string pS);
	string GetType();
	void SetSource(string pS);
	string GetSource();
	void SetDestination(string pS);
	string GetDestination();
	void SetSourceInterface(string pS);
	string GetSourceInterface();
	void SetDestinationInterface(string pS);
	string GetDestinationInterface();

private:

	string mName;
	string mType;
	string mSource;
	string mDest;
	string mSourceInterface;
	string mDestInterface;

};

class BiLink : public pair<Link,Link> {
public:
	BiLink( ) ;
	~BiLink( );
	void L1( Link pL) ;
	void L2( Link pL) ;
	Link L1( ) ;
	Link L2( ) ;
	void SetName( string pName) ;
	string GetName( ) ;
	void SetType( string pType) ;
	string GetType( ) ;
private:
	string mName ;
	string mType ;

};

}

#endif /*LINK_H_*/
