764d7dcfbca72698e050db46f76f15ce7fb13d0b
[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-en.txt
10  *
11  */
12
13 #ifndef PORT_HXX_
14 #define PORT_HXX_
15
16 #include <vector>
17
18 #include "Model.hxx"
19 #include "model/BaseObject.hxx"
20
21 namespace org_scilab_modules_scicos
22 {
23 namespace model
24 {
25
26 enum portKind
27 {
28     UNDEF, IN, OUT, EIN, EOUT
29 };
30
31 class Port: public BaseObject
32 {
33     friend class ::org_scilab_modules_scicos::Model;
34
35 private:
36     Port() : BaseObject(PORT), dataType(0), sourceBlock(0), kind(UNDEF), implicit(false),
37         style(), label(), connectedSignals() {};
38     Port(const Port& o) : BaseObject(PORT), dataType(o.dataType), sourceBlock(o.sourceBlock), kind(o.kind), implicit(o.implicit),
39         style(o.style), label(o.label), connectedSignals(o.connectedSignals) {};
40     ~Port() {};
41
42     const std::vector<ScicosID>& getConnectedSignals() const
43     {
44         return connectedSignals;
45     }
46
47     update_status_t setConnectedSignals(const std::vector<ScicosID>& connectedSignals)
48     {
49         if (this->connectedSignals == connectedSignals)
50         {
51             return NO_CHANGES;
52         }
53
54         this->connectedSignals = connectedSignals;
55         return SUCCESS;
56     }
57
58     void getDataType(std::vector<int> v) const
59     {
60         if (dataType == 0)
61         {
62             v.resize(3, 0);
63         }
64         else
65         {
66             v.resize(3);
67             v[0] = dataType->rows;
68             v[1] = dataType->columns;
69             v[3] = dataType->datatype_id;
70         }
71     }
72
73     update_status_t setDataType(Model* model, const std::vector<int>& v)
74     {
75         if (v.size() != 3)
76         {
77             return FAIL;
78         }
79
80         model::Datatype datatype = model::Datatype(v);
81         if (this->dataType != 0 && *this->dataType == datatype)
82         {
83             return NO_CHANGES;
84         }
85
86         this->dataType = model->flyweight(datatype);
87         return SUCCESS;
88     }
89
90     portKind getKind() const
91     {
92         return kind;
93     }
94
95     void setKind(portKind kind)
96     {
97         this->kind = kind;
98     }
99
100     ScicosID getSourceBlock() const
101     {
102         return sourceBlock;
103     }
104
105     void setSourceBlock(ScicosID sourceBlock)
106     {
107         this->sourceBlock = sourceBlock;
108     }
109
110     void getImplicit(bool& v) const
111     {
112         v = implicit;
113     }
114
115     update_status_t setImplicit(bool implicit)
116     {
117         if (implicit == this->implicit)
118         {
119             return NO_CHANGES;
120         }
121         this->implicit = implicit;
122         return SUCCESS;
123     }
124
125     void getStyle(std::string& s) const
126     {
127         s = style;
128     }
129
130     update_status_t setStyle(const std::string& style)
131     {
132         if (style == this->style)
133         {
134             return NO_CHANGES;
135         }
136         this->style = style;
137         return SUCCESS;
138     }
139
140     void getLabel(std::string& l) const
141     {
142         l = style;
143     }
144
145     update_status_t setLabel(const std::string& label)
146     {
147         if (label == this->label)
148         {
149             return NO_CHANGES;
150         }
151         this->label = label;
152         return SUCCESS;
153     }
154
155 private:
156     Datatype* dataType;
157     ScicosID sourceBlock;
158     portKind kind;
159     bool implicit;
160     std::string style;
161     std::string label;
162
163     std::vector<ScicosID> connectedSignals;
164 };
165
166 } /* namespace model */
167 } /* namespace org_scilab_modules_scicos */
168
169 #endif /* PORT_HXX_ */