]> AND Private Git Repository - blast.git/blob - ConnectedInterface.h
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
3a1fb4f698b25bbf8141b0e4869c0c4de2f7090c
[blast.git] / ConnectedInterface.h
1 #ifndef __CONNECTEDINTERFACE_H__
2 #define __CONNECTEDINTERFACE_H__
3
4 #include <iostream>
5
6 #include <QtCore>
7 #include <QtGui>
8
9 #include "AbstractInterface.h"
10 class ReferenceInterface;
11
12 #include "Exception.h"
13
14 using namespace std;
15 using namespace Qt;
16
17 /*!
18  * \brief The ConnectedInterface class represents an interface of block (functional or group) that may be connected from/to other interfaces
19  * A ConnectedInterface is used to establish connection between blocks.
20  */
21 class ConnectedInterface : public AbstractInterface {
22
23 public :
24
25   ConnectedInterface(AbstractBlock* _owner);
26   ConnectedInterface(AbstractBlock* _owner, const QString& _name, const QString& _type, const QString& _width, int _direction, int _purpose);
27   // getters
28   inline QList<ConnectedInterface*> getConnectedTo() { return connectedTo;}
29   inline ConnectedInterface* getConnectedFrom() { return connectedFrom;}
30
31   // setters
32
33   // testers
34   inline bool isConnectedTo(){return connectedTo.length() != 0;}
35   inline bool isConnectedFrom(){return connectedFrom != NULL;}
36   virtual bool canConnectTo(AbstractInterface* iface) = 0;
37   virtual bool canConnectFrom(AbstractInterface* iface) = 0;
38
39   // others  
40   bool connectTo(ConnectedInterface* iface);
41   bool connectFrom(ConnectedInterface* iface);
42   ConnectedInterface* getConnectionToParentGroup();
43   ConnectedInterface* getConnectionFromParentGroup();
44
45   virtual AbstractInterface *clone() = 0;  
46   void removeConnectedTo(ConnectedInterface *inter);
47
48   virtual void clearConnectedTo();
49   inline void clearConnectedFrom() { connectedFrom = NULL; }
50   virtual void clearConnections();
51   //virtual void connectionsValidation(QStack<AbstractInterface*> *interfacetoValidate, QList<AbstractInterface*> *validatedInterfaces) throw(Exception) = 0;  
52
53 protected:
54   /*!
55    * \brief connectedTo lists of connections to interfaces owned by other blocks (functional or group)
56    * Since the graph is oriented, and taking into account it modles a FPGA desing,
57    * this interface may be connected to several interfaces owned by other blocks (functional or group).
58    * connectedTo references such interfaces if they exist.
59    */
60   QList<ConnectedInterface*> connectedTo;
61   /*!
62    * \brief connectedFrom connection from an interface owned by another blocks (functional or group)
63    * Since the graph is oriented, and taking into account it modles a FPGA desing,
64    * there may be a single interface owned by another block (functional or group) that is connected to
65    * this interface. connecteFrom references such an interface if it exists.
66    */
67   ConnectedInterface* connectedFrom;
68   /*!
69    * \brief associatedIface the control (resp. data) interface that is bounded to this data (resp. control) interface
70    * If a reference block is designed to be fully integrated in Blast, nearly every data interface is bounded
71    * to a control interface that signals if the value presented on the interface is valid or not. associatedIface
72    * references this control interface if this is a data interface, and a data interface is this is a control interface.
73    * Note that the association is done by the call of setAssociatedIface() that must be done only for a control interface.
74    * (NB: a test is done in the method to prevent the other case).
75    */
76   ConnectedInterface* associatedIface;
77 };
78
79
80 #endif // __CONNECTEDINTERFACE_H__