Xcos: "Region to superblock" fixed
[scilab.git] / scilab / modules / scicos / includes / Model.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  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13  *
14  */
15
16 #ifndef MODEL_HXX_
17 #define MODEL_HXX_
18
19 #include <vector>
20 #include <unordered_map>
21 #include <string>
22
23 #include "utilities.hxx"
24 #include "model/BaseObject.hxx"
25
26 #include "dynlib_scicos.h"
27
28 namespace org_scilab_modules_scicos
29 {
30
31 class SCICOS_IMPEXP Model
32 {
33 public:
34     Model();
35     ~Model();
36
37     /*
38      * Controller wrapped methods
39      */
40
41     model::BaseObject* createObject(kind_t k);
42     unsigned referenceObject(model::BaseObject* object);
43     unsigned& referenceCount(model::BaseObject* object);
44     void deleteObject(model::BaseObject* object);
45
46     template<typename T>
47     inline bool getObjectProperty(ScicosID uid, kind_t /*k*/, object_properties_t p, T& v) const
48     {
49         return getObjectProperty(getObject(uid), p, v);
50     }
51
52     template<typename T>
53     inline update_status_t setObjectProperty(ScicosID uid, kind_t /*k*/, object_properties_t p, T v)
54     {
55         return setObjectProperty(getObject(uid), p, v);
56     }
57
58     bool getObjectProperty(model::BaseObject* object, object_properties_t p, double& v) const;
59     bool getObjectProperty(model::BaseObject* object, object_properties_t p, int& v) const;
60     bool getObjectProperty(model::BaseObject* object, object_properties_t p, bool& v) const;
61     bool getObjectProperty(model::BaseObject* object, object_properties_t p, std::string& v) const;
62     bool getObjectProperty(model::BaseObject* object, object_properties_t p, ScicosID& v) const;
63     bool getObjectProperty(model::BaseObject* object, object_properties_t p, std::vector<double>& v) const;
64     bool getObjectProperty(model::BaseObject* object, object_properties_t p, std::vector<int>& v) const;
65     bool getObjectProperty(model::BaseObject* object, object_properties_t p, std::vector<bool>& v) const;
66     bool getObjectProperty(model::BaseObject* object, object_properties_t p, std::vector< std::string >& v) const;
67     bool getObjectProperty(model::BaseObject* object, object_properties_t p, std::vector<ScicosID>& v) const;
68
69     update_status_t setObjectProperty(model::BaseObject* object, object_properties_t p, double v);
70     update_status_t setObjectProperty(model::BaseObject* object, object_properties_t p, int v);
71     update_status_t setObjectProperty(model::BaseObject* object, object_properties_t p, bool v);
72     update_status_t setObjectProperty(model::BaseObject* object, object_properties_t p, ScicosID v);
73     update_status_t setObjectProperty(model::BaseObject* object, object_properties_t p, std::string v);
74     update_status_t setObjectProperty(model::BaseObject* object, object_properties_t p, const std::vector<double>& v);
75     update_status_t setObjectProperty(model::BaseObject* object, object_properties_t p, const std::vector<int>& v);
76     update_status_t setObjectProperty(model::BaseObject* object, object_properties_t p, const std::vector<bool>& v);
77     update_status_t setObjectProperty(model::BaseObject* object, object_properties_t p, const std::vector< std::string >& v);
78     update_status_t setObjectProperty(model::BaseObject* object, object_properties_t p, const std::vector<ScicosID>& v);
79     /*
80      * Model custom methods
81      */
82
83     kind_t getKind(ScicosID uid) const;
84     std::vector<model::BaseObject*> getAll(kind_t k) const;
85     model::BaseObject* getObject(ScicosID uid) const;
86     template<typename T>
87     T* getObject(ScicosID uid) const
88     {
89         return static_cast<T*>(getObject(uid));
90     };
91     size_t size()
92     {
93         return allObjects.size();
94     }
95     void reserve(size_t count)
96     {
97         allObjects.reserve(count);
98     }
99
100     model::Datatype* flyweight(const model::Datatype& d);
101     void erase(model::Datatype* d);
102
103 private:
104     ScicosID lastId;
105     bool has_looped;
106
107     typedef std::unordered_map<ScicosID, model::BaseObject*> allobjects_t;
108     allobjects_t allObjects;
109
110     typedef std::vector<model::Datatype*> datatypes_set_t;
111     datatypes_set_t datatypes;
112 };
113
114 } /* namespace org_scilab_modules_scicos */
115
116 #endif /* MODEL_HXX_ */