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

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