fix windows compilation after https://codereview.scilab.org/#/c/17289
[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 "utilities.hxx"
20 #include "Model.hxx"
21 #include "model/BaseObject.hxx"
22
23 namespace org_scilab_modules_scicos
24 {
25 namespace model
26 {
27
28 class Port: public BaseObject
29 {
30 public:
31     Port() : BaseObject(PORT), m_dataType(0), m_sourceBlock(ScicosID()), m_kind(PORT_UNDEF), m_implicit(false),
32         m_style(), m_label(), m_firing(0)
33     {
34         m_connectedSignals = {ScicosID()};
35     }
36     Port(const Port& o) : BaseObject(PORT), m_dataType(o.m_dataType), m_sourceBlock(o.m_sourceBlock), m_kind(o.m_kind), m_implicit(o.m_implicit),
37         m_style(o.m_style), m_label(o.m_label), m_firing(0), m_connectedSignals(o.m_connectedSignals) {};
38     ~Port() = default;
39
40 private:
41     friend class ::org_scilab_modules_scicos::Model;
42
43     const std::vector<ScicosID>& getConnectedSignals() const
44     {
45         return m_connectedSignals;
46     }
47
48     update_status_t setConnectedSignals(const std::vector<ScicosID>& connectedSignals)
49     {
50         if (this->m_connectedSignals == connectedSignals)
51         {
52             return NO_CHANGES;
53         }
54
55         this->m_connectedSignals = connectedSignals;
56         if (m_connectedSignals.empty())
57         {
58             m_connectedSignals = std::vector<ScicosID> (1, 0);
59         }
60         return SUCCESS;
61     }
62
63     void getDataType(std::vector<int>& v) const
64     {
65         if (m_dataType == 0)
66         {
67             // By default, size is set to [-1,1] and type to real (1)
68             v.resize(3, 1);
69             v[0] = -1;
70         }
71         else
72         {
73             v.resize(3);
74             v[0] = m_dataType->m_rows;
75             v[1] = m_dataType->m_columns;
76             v[2] = m_dataType->m_datatype_id;
77         }
78     }
79
80     update_status_t setDataType(Model* model, const std::vector<int>& v)
81     {
82         if (v.size() != 3)
83         {
84             return FAIL;
85         }
86
87         model::Datatype datatype = model::Datatype(v);
88         if (this->m_dataType != 0 && *this->m_dataType == datatype)
89         {
90             return NO_CHANGES;
91         }
92
93         this->m_dataType = model->flyweight(datatype);
94         return SUCCESS;
95     }
96
97     void getKind(int& k) const
98     {
99         k = m_kind;
100     }
101
102     update_status_t setKind(int k)
103     {
104         if (k < PORT_UNDEF || k > PORT_EOUT)
105         {
106             return FAIL;
107         }
108
109         if (k == m_kind)
110         {
111             return NO_CHANGES;
112         }
113
114         m_kind = static_cast<portKind>(k);
115         return SUCCESS;
116     }
117
118     void getSourceBlock(ScicosID& sb) const
119     {
120         sb = m_sourceBlock;
121     }
122
123     update_status_t setSourceBlock(const ScicosID sb)
124     {
125         if (sb == this->m_sourceBlock)
126         {
127             return NO_CHANGES;
128         }
129         this->m_sourceBlock = sb;
130         return SUCCESS;
131     }
132
133     void getImplicit(bool& v) const
134     {
135         v = m_implicit;
136     }
137
138     update_status_t setImplicit(bool implicit)
139     {
140         if (implicit == this->m_implicit)
141         {
142             return NO_CHANGES;
143         }
144         this->m_implicit = implicit;
145         return SUCCESS;
146     }
147
148     void getStyle(std::string& s) const
149     {
150         s = m_style;
151     }
152
153     update_status_t setStyle(const std::string& style)
154     {
155         if (style == this->m_style)
156         {
157             return NO_CHANGES;
158         }
159         this->m_style = style;
160         return SUCCESS;
161     }
162
163     void getLabel(std::string& l) const
164     {
165         l = m_style;
166     }
167
168     update_status_t setLabel(const std::string& label)
169     {
170         if (label == this->m_label)
171         {
172             return NO_CHANGES;
173         }
174         this->m_label = label;
175         return SUCCESS;
176     }
177
178     void getFiring(double& f) const
179     {
180         f = m_firing;
181     }
182
183     update_status_t setFiring(double firing)
184     {
185         if (firing == this->m_firing)
186         {
187             return NO_CHANGES;
188         }
189         this->m_firing = firing;
190         return SUCCESS;
191     }
192
193 private:
194     Datatype* m_dataType;
195     ScicosID m_sourceBlock;
196     portKind m_kind;
197     bool m_implicit;
198     std::string m_style;
199     std::string m_label;
200     double m_firing;
201
202     std::vector<ScicosID> m_connectedSignals;
203 };
204
205 } /* namespace model */
206 } /* namespace org_scilab_modules_scicos */
207
208 #endif /* PORT_HXX_ */