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

Private GIT Repository
pattern comput done
[blast.git] / ReferenceInterface.cpp
1 #include "ReferenceInterface.h"
2 #include "AbstractBlock.h"
3
4 ReferenceInterface::ReferenceInterface(AbstractBlock* _owner)  throw(Exception) : AbstractInterface(_owner) {
5   if (_owner->isReferenceBlock()) throw(Exception(BLOCK_INVALID_TYPE));
6   multiplicity = 1;
7 }
8
9 ReferenceInterface::ReferenceInterface(AbstractBlock* _owner,
10                                        const QString& _name, const QString&_type,
11                                        const QString& _width,
12                                        int _direction,
13                                        int _purpose,
14                                        int _multiplicity)
15 throw (Exception) : AbstractInterface(_owner, _name, _type, _width, _direction, _purpose) {
16
17   if (_owner->isReferenceBlock()) throw(Exception(BLOCK_INVALID_TYPE));
18
19   multiplicity = _multiplicity;
20   
21   if (purpose == Control) {
22     // override some attributes with forced values
23     type = Boolean;
24     width = "1";
25     multiplicity = 1;
26   }  
27   if (direction == InOut) {
28     multiplicity = 1;
29   }
30 }
31
32 bool ReferenceInterface::isReferenceInterface() {
33   return true;
34 }
35
36 void ReferenceInterface::setMultiplicity(int _multiplicity) {
37   if (direction == InOut) {
38     multiplicity = 1;
39   }
40   else {
41     multiplicity = _multiplicity;
42   }
43 }
44
45 int ReferenceInterface::translatePurpose(const QString& txt) {
46   if (txt == "clock") {
47     return Clock;
48   }
49   else if (txt == "reset") {
50     return Reset;
51   }
52   else if (txt == "wb") {
53     return Wishbone;
54   }  
55   return Data;
56 }
57
58 int ReferenceInterface::translateMultiplicity(const QString& txt) {
59   bool ok;
60   int mult;
61   if (txt == "*") {
62     mult = -1;
63   }
64   else {
65     mult = txt.toInt(&ok);
66     if (!ok) {
67       mult = 1;
68     }
69   }
70   return mult;
71 }