2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2014-2014 - Scilab Enterprises - Clement DAVID
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
20 #include "model/BaseObject.hxx"
22 namespace org_scilab_modules_scicos
29 std::vector<double> rpar;
30 std::vector<int> ipar;
31 std::vector<int> opar;
36 std::vector<double> state;
37 std::vector<double> dstate;
38 std::vector<int> odstate;
42 * Mask list for all possible block scheduling descriptor from the simulator point of view.
46 * * SUMMATION == DEP_U
48 * * SWITCH_f == DEP_U | DEP_T
52 DEP_U = 1 << 0, //!< y=f(u)
53 DEP_T = 1 << 1, //!< y=f(x)
58 BLOCKTYPE_C = 'c', //!< N/A ; dummy value used to represent a 'c' blocktype (eg. not 'd')
59 BLOCKTYPE_D = 'd', //!< N/A ; dummy value used to represent a 'd' blocktype (eg. not 'c')
60 BLOCKTYPE_H = 'h', //!< N/A ; used to represent blocks composed by blocks
61 BLOCKTYPE_L = 'l', //!< synchronization block ; ifthenelse and eselect
62 BLOCKTYPE_M = 'm', //!< memorization block ; see the Scicos original paper
63 BLOCKTYPE_X = 'x', //!< derivable block without state ; these blocks will be treated as if they contain a state.
64 BLOCKTYPE_Z = 'z', //!< zero-crossing block ; see the Scicos original paper.
69 std::string functionName;
72 char dep_ut; //!< dep_ut_t masked value
73 char blocktype; //!< one of blocktype_t value
84 Angle() : flip(true), theta(0) {};
85 Angle(const Angle& a) : flip(a.flip), theta(a.theta) {};
86 Angle(const std::vector<double>& a) : flip((a[0] == 0) ? false : true), theta(a[1]) {};
88 void fill(std::vector<double>& a) const
91 a[0] = (flip == false) ? 0 : 1;
94 bool operator==(const Angle& a) const
96 return flip == a.flip && theta == a.theta;
100 class Block: public BaseObject
103 Block() : BaseObject(BLOCK), m_parentDiagram(0), m_interfaceFunction(), m_geometry(), m_angle(),
104 m_exprs(std::vector<std::string> (1, "String")), m_label(), m_style(), m_nzcross(std::vector<int> (1, 0)), m_nmode(std::vector<int> (1, 0)), m_equations(), m_uid(), m_sim(), m_in(), m_out(), m_ein(), m_eout(),
105 m_parameter(), m_state(), m_parentBlock(0), m_children(), m_portReference(0)
107 m_sim.blocktype = BLOCKTYPE_C;
108 m_parameter.opar = std::vector<int> (1, 0);
109 m_state.odstate = std::vector<int> (1, 0);
111 Block(const Block& o) : BaseObject(BLOCK), m_parentDiagram(o.m_parentDiagram), m_interfaceFunction(o.m_interfaceFunction), m_geometry(o.m_geometry),
112 m_angle(o.m_angle), m_exprs(o.m_exprs), m_label(o.m_label), m_style(o.m_style), m_nzcross(o.m_nzcross), m_nmode(o.m_nmode), m_equations(o.m_equations), m_uid(o.m_uid),
113 m_sim(o.m_sim), m_in(o.m_in), m_out(o.m_out), m_ein(o.m_ein), m_eout(o.m_eout), m_parameter(o.m_parameter), m_state(o.m_state), m_parentBlock(o.m_parentBlock),
114 m_children(o.m_children), m_portReference(o.m_portReference) {};
118 friend class ::org_scilab_modules_scicos::Model;
120 void getChildren(std::vector<ScicosID>& v) const
122 v = this->m_children;
125 update_status_t setChildren(const std::vector<ScicosID>& children)
127 if (children == this->m_children)
132 this->m_children = children;
136 void getGeometry(std::vector<double>& v) const
141 update_status_t setGeometry(const std::vector<double>& v)
148 Geometry g = Geometry(v);
158 void getAngle(std::vector<double>& data) const
163 update_status_t setAngle(const std::vector<double>& data)
165 if (data.size() != 2)
170 Angle a = Angle(data);
180 void getExprs(std::vector<std::string>& data) const
185 update_status_t setExprs(const std::vector<std::string>& data)
196 void getLabel(std::string& data) const
201 update_status_t setLabel(const std::string& data)
212 void getIn(std::vector<ScicosID>& v) const
217 update_status_t setIn(const std::vector<ScicosID>& in)
219 if (in == this->m_in)
228 void getInterfaceFunction(std::string& fun) const
230 fun = m_interfaceFunction;
233 update_status_t setInterfaceFunction(const std::string& fun)
235 if (fun == m_interfaceFunction)
240 m_interfaceFunction = fun;
244 void getOut(std::vector<ScicosID>& v) const
249 update_status_t setOut(const std::vector<ScicosID>& out)
251 if (out == this->m_out)
260 void getEin(std::vector<ScicosID>& v) const
265 update_status_t setEin(const std::vector<ScicosID>& ein)
267 if (ein == this->m_ein)
276 void getEout(std::vector<ScicosID>& v) const
281 update_status_t setEout(const std::vector<ScicosID>& eout)
283 if (eout == this->m_eout)
292 const Parameter& getParameter() const
297 void setParameter(const Parameter& parameter)
299 this->m_parameter = parameter;
302 void getParentBlock(ScicosID& v) const
307 update_status_t setParentBlock(ScicosID parentBlock)
309 if (parentBlock == this->m_parentBlock)
314 this->m_parentBlock = parentBlock;
318 void getParentDiagram(ScicosID& v) const
323 update_status_t setParentDiagram(const ScicosID v)
325 if (v == m_parentDiagram)
334 void getPortReference(ScicosID& v) const
339 update_status_t setPortReference(const ScicosID v)
341 if (v == m_portReference)
350 const Descriptor& getSim() const
355 void setSim(const Descriptor& sim)
360 void getStyle(std::string& data) const
365 update_status_t setStyle(const std::string& data)
376 void getNZcross(std::vector<int>& data) const
381 update_status_t setNZcross(const std::vector<int>& data)
383 if (data == m_nzcross)
392 void getNMode(std::vector<int>& data) const
397 update_status_t setNMode(const std::vector<int>& data)
408 void getEquations(std::vector<std::string>& data) const
413 update_status_t setEquations(const std::vector<std::string>& data)
415 if (data == m_equations)
424 void getUID(std::string& data) const
429 update_status_t setUID(const std::string& data)
440 void getRpar(std::vector<double>& data) const
442 data = m_parameter.rpar;
445 update_status_t setRpar(const std::vector<double>& data)
447 if (data == m_parameter.rpar)
452 m_parameter.rpar = data;
456 void getIpar(std::vector<int>& data) const
458 data = m_parameter.ipar;
461 update_status_t setIpar(const std::vector<int>& data)
463 if (data == m_parameter.ipar)
468 m_parameter.ipar = data;
472 void getOpar(std::vector<int>& data) const
474 data = m_parameter.opar;
477 update_status_t setOpar(const std::vector<int>& data)
479 if (data == m_parameter.opar)
484 m_parameter.opar = data;
488 void getSimFunctionName(std::string& data) const
490 data = m_sim.functionName;
493 update_status_t setSimFunctionName(const std::string& data)
495 if (data == m_sim.functionName)
500 m_sim.functionName = data;
504 void getSimFunctionApi(int& data) const
506 data = m_sim.functionApi;
509 update_status_t setSimFunctionApi(const int data)
511 if (data == m_sim.functionApi)
516 m_sim.functionApi = data;
520 void getSimBlocktype(std::string& data) const
522 data = std::string(1, m_sim.blocktype);
525 update_status_t setSimBlocktype(const std::string data)
527 if (data.size() != 1)
532 char c = *(data.c_str());
534 if (c == m_sim.blocktype)
555 void getSimDepUT(std::vector<int>& data) const
558 switch (m_sim.dep_ut)
561 // data is already set to [0 0] here.
578 update_status_t setSimDepUT(const std::vector<int>& data)
580 if (data.size() != 2)
585 int dep = DEP_U & DEP_T;
602 if (dep == m_sim.dep_ut)
611 void getState(std::vector<double>& data) const
613 data = m_state.state;
616 update_status_t setState(const std::vector<double>& data)
618 if (data == m_state.state)
623 m_state.state = data;
627 void getDState(std::vector<double>& data) const
629 data = m_state.dstate;
632 update_status_t setDState(const std::vector<double>& data)
634 if (data == m_state.dstate)
639 m_state.dstate = data;
643 void getODState(std::vector<int>& data) const
645 data = m_state.odstate;
648 update_status_t setODState(const std::vector<int>& data)
650 if (data == m_state.odstate)
655 m_state.odstate = data;
660 ScicosID m_parentDiagram;
661 std::string m_interfaceFunction;
664 std::vector<std::string> m_exprs;
667 std::vector<int> m_nzcross;
668 std::vector<int> m_nmode;
669 std::vector<std::string> m_equations;
674 std::vector<ScicosID> m_in;
675 std::vector<ScicosID> m_out;
676 std::vector<ScicosID> m_ein;
677 std::vector<ScicosID> m_eout;
679 Parameter m_parameter;
683 * SuperBlock: the blocks, links and so on contained into this block
685 ScicosID m_parentBlock;
686 std::vector<ScicosID> m_children;
689 * I/O Blocks: the corresponding parent port
691 ScicosID m_portReference;
694 } /* namespace model */
695 } /* namespace org_scilab_modules_scicos */
697 #endif /* BLOCK_HXX_ */