bea267a6fc2c7fb5ad9c00e7e1248657fb6302dd
[scilab.git] / scilab / modules / scicos / src / cpp / model / Port.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2014-2014 - Scilab Enterprises - Clement DAVID
4  *
5  *  This file must be used under the terms of the CeCILL.
6  *  This source file is licensed as described in the file COPYING, which
7  *  you should have received as part of this distribution.  The terms
8  *  are also available at
9  *  http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
10  *
11  */
12
13 #ifndef PORT_HXX_
14 #define PORT_HXX_
15
16 #include <string>
17 #include <vector>
18
19 #include "Model.hxx"
20 #include "model/BaseObject.hxx"
21
22 namespace org_scilab_modules_scicos
23 {
24 namespace model
25 {
26
27 enum portKind
28 {
29     UNDEF, IN, OUT, EIN, EOUT
30 };
31
32 class Port: public BaseObject
33 {
34     friend class ::org_scilab_modules_scicos::Model;
35
36 private:
37     Port() : BaseObject(PORT), dataType(0), sourceBlock(0), kind(UNDEF), implicit(false),
38         style(), label(), connectedSignals() {};
39     Port(const Port& o) : BaseObject(PORT), dataType(o.dataType), sourceBlock(o.sourceBlock), kind(o.kind), implicit(o.implicit),
40         style(o.style), label(o.label), connectedSignals(o.connectedSignals) {};
41     ~Port() {};
42
43     const std::vector<ScicosID>& getConnectedSignals() const
44     {
45         return connectedSignals;
46     }
47
48     update_status_t setConnectedSignals(const std::vector<ScicosID>& connectedSignals)
49     {
50         if (this->connectedSignals == connectedSignals)
51         {
52             return NO_CHANGES;
53         }
54
55         this->connectedSignals = connectedSignals;
56         return SUCCESS;
57     }
58
59     void getDataType(std::vector<int> v) const
60     {
61         if (dataType == 0)
62         {
63             v.resize(3, 0);
64         }
65         else
66         {
67             v.resize(3);
68             v[0] = dataType->rows;
69             v[1] = dataType->columns;
70             v[3] = dataType->datatype_id;
71         }
72     }
73
74     update_status_t setDataType(Model* model, const std::vector<int>& v)
75     {
76         if (v.size() != 3)
77         {
78             return FAIL;
79         }
80
81         model::Datatype datatype = model::Datatype(v);
82         if (this->dataType != 0 && *this->dataType == datatype)
83         {
84             return NO_CHANGES;
85         }
86
87         this->dataType = model->flyweight(datatype);
88         return SUCCESS;
89     }
90
91     portKind getKind() const
92     {
93         return kind;
94     }
95
96     void setKind(portKind kind)
97     {
98         this->kind = kind;
99     }
100
101     void getSourceBlock(ScicosID& sb) const
102     {
103         sb = sourceBlock;
104     }
105
106     update_status_t setSourceBlock(const ScicosID sb)
107     {
108         if (sb == this->sourceBlock)
109         {
110             return NO_CHANGES;
111         }
112         this->sourceBlock = sb;
113         return SUCCESS;
114     }
115
116     void getImplicit(bool& v) const
117     {
118         v = implicit;
119     }
120
121     update_status_t setImplicit(bool implicit)
122     {
123         if (implicit == this->implicit)
124         {
125             return NO_CHANGES;
126         }
127         this->implicit = implicit;
128         return SUCCESS;
129     }
130
131     void getStyle(std::string& s) const
132     {
133         s = style;
134     }
135
136     update_status_t setStyle(const std::string& style)
137     {
138         if (style == this->style)
139         {
140             return NO_CHANGES;
141         }
142         this->style = style;
143         return SUCCESS;
144     }
145
146     void getLabel(std::string& l) const
147     {
148         l = style;
149     }
150
151     update_status_t setLabel(const std::string& label)
152     {
153         if (label == this->label)
154         {
155             return NO_CHANGES;
156         }
157         this->label = label;
158         return SUCCESS;
159     }
160
161     void getFiring(double& f) const
162     {
163         f = firing;
164     }
165
166     update_status_t setFiring(double firing)
167     {
168         if (firing == this->firing)
169         {
170             return NO_CHANGES;
171         }
172         this->firing = firing;
173         return SUCCESS;
174     }
175
176 private:
177     Datatype* dataType;
178     ScicosID sourceBlock;
179     portKind kind;
180     bool implicit;
181     std::string style;
182     std::string label;
183     double firing;
184
185     std::vector<ScicosID> connectedSignals;
186 };
187
188 } /* namespace model */
189 } /* namespace org_scilab_modules_scicos */
190
191 #endif /* PORT_HXX_ */