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

Private GIT Repository
finished testbench generation
[blast.git] / GroupInterface.h
1 #ifndef __GROUPINTERFACE_H__
2 #define __GROUPINTERFACE_H__
3
4 #include <iostream>
5
6 #include <QtCore>
7 #include <QtGui>
8
9 #include "ConnectedInterface.h"
10 #include "Exception.h"
11 class Exception;
12
13
14 using namespace std;
15 using namespace Qt;
16
17 /* NOTES :
18
19   - A GroupInterface instance can be obtained by linking it to an interface of an inner block, via a
20      contextual menu that appears when right clicking on the inner interface item.
21     Thus, it is impossible to create a "bypass": an input group interface, directly linked to an output
22     group interface.
23   - the direction (in/out/bi) of this interface is the same as that of the inner interface.
24   - except for the top group, a correct design will always have group interfaces that have
25     both connectedTo and connectedFrom containings something. Indeed, a group interface must be seen
26     as a tunnel to communicate data from outside the group to blocks within the group.
27     Thus, an input group interface has connectedFrom refering to an output interface of a block outside the group
28     and connectedTo listing input interfaces of blocks within the group.
29     An output group interface has connectedFrom refering to an output interface of a bock within the group,
30     and connectedTo listing input interface of blocks outside the group.
31
32  */
33
34
35 class GroupInterface : public ConnectedInterface {
36
37 public :
38   GroupInterface(AbstractBlock* _owner, const QString& _name, int _direction, int _purpose) throw (Exception);
39
40   // getters
41   int getWidth();
42   int getClockDomain() throw(Exception); // determine at which freq. is synchronized iface
43   // setters
44
45   // testers
46   bool isGroupInterface();
47   bool canConnectTo(AbstractInterface* iface, bool testClock);
48   bool canConnectFrom(AbstractInterface* iface, bool testClock);
49
50   // others
51   AbstractInterface *clone();
52   QList<ConnectedInterface *> getForwardFunctionalInterfaces(GroupInterface* groupIface);
53
54   void connectionsValidation(QStack<AbstractInterface *> *interfacetoValidate, QList<AbstractInterface *> *validatedInterfaces) throw(Exception);
55
56 };
57
58 #endif // __GROUPINTERFACE_H__