Xcos MVC: use shared_ptr on the Model
[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  *  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 MODEL_HXX_
14 #define MODEL_HXX_
15
16 #include <vector>
17 #include <map>
18 #include <string>
19 #include <memory>
20
21 #include "utilities.hxx"
22 #include "model/BaseObject.hxx"
23
24 #include "dynlib_scicos.h"
25
26 namespace org_scilab_modules_scicos
27 {
28
29 class SCICOS_IMPEXP Model
30 {
31 public:
32     Model();
33     ~Model();
34
35     /*
36      * Controller wrapped methods
37      */
38
39     ScicosID createObject(kind_t k);
40     void deleteObject(ScicosID uid);
41
42     bool getObjectProperty(ScicosID uid, kind_t k, object_properties_t p, double& v) const;
43     bool getObjectProperty(ScicosID uid, kind_t k, object_properties_t p, int& v) const;
44     bool getObjectProperty(ScicosID uid, kind_t k, object_properties_t p, bool& v) const;
45     bool getObjectProperty(ScicosID uid, kind_t k, object_properties_t p, std::string& v) const;
46     bool getObjectProperty(ScicosID uid, kind_t k, object_properties_t p, ScicosID& v) const;
47     bool getObjectProperty(ScicosID uid, kind_t k, object_properties_t p, std::vector<double>& v) const;
48     bool getObjectProperty(ScicosID uid, kind_t k, object_properties_t p, std::vector<int>& v) const;
49     bool getObjectProperty(ScicosID uid, kind_t k, object_properties_t p, std::vector< std::string >& v) const;
50     bool getObjectProperty(ScicosID uid, kind_t k, object_properties_t p, std::vector<ScicosID>& v) const;
51
52     update_status_t setObjectProperty(ScicosID uid, kind_t k, object_properties_t p, double v);
53     update_status_t setObjectProperty(ScicosID uid, kind_t k, object_properties_t p, int v);
54     update_status_t setObjectProperty(ScicosID uid, kind_t k, object_properties_t p, bool v);
55     update_status_t setObjectProperty(ScicosID uid, kind_t k, object_properties_t p, ScicosID v);
56     update_status_t setObjectProperty(ScicosID uid, kind_t k, object_properties_t p, std::string v);
57     update_status_t setObjectProperty(ScicosID uid, kind_t k, object_properties_t p, const std::vector<double>& v);
58     update_status_t setObjectProperty(ScicosID uid, kind_t k, object_properties_t p, const std::vector<int>& v);
59     update_status_t setObjectProperty(ScicosID uid, kind_t k, object_properties_t p, const std::vector< std::string >& v);
60     update_status_t setObjectProperty(ScicosID uid, kind_t k, object_properties_t p, const std::vector<ScicosID>& v);
61
62     /*
63      * Model internal methods
64      */
65
66     std::shared_ptr<model::BaseObject> getObject(ScicosID uid) const;
67
68     model::Datatype* flyweight(const model::Datatype& d);
69     void erase(model::Datatype* d);
70
71 private:
72     ScicosID lastId;
73     typedef std::map<ScicosID, std::shared_ptr<model::BaseObject> > objects_map_t;
74     objects_map_t allObjects;
75
76     typedef std::vector<model::Datatype*> datatypes_set_t;
77     datatypes_set_t datatypes;
78 };
79
80 } /* namespace org_scilab_modules_scicos */
81
82 #endif /* MODEL_HXX_ */