Xcos MVC: generate Controller JNI using SWIG
[scilab.git] / scilab / modules / scicos / includes / model / BaseObject.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 BASEOBJECT_HXX_
14 #define BASEOBJECT_HXX_
15
16 #include <vector>
17
18 #include "utilities.hxx"
19
20 namespace org_scilab_modules_scicos
21 {
22 namespace model
23 {
24
25 class BaseObject
26 {
27 public:
28     BaseObject(kind_t k) :
29         _id(0), _kind(k)
30     {
31     }
32     BaseObject(const BaseObject& b) :
33         _id(0), _kind(b._kind)
34     {
35     }
36
37     inline bool operator<(BaseObject o)
38     {
39         return _id < o._id;
40     }
41     inline bool operator==(BaseObject o)
42     {
43         return _id == o._id;
44     }
45
46     inline ScicosID id()
47     {
48         return _id;
49     }
50     inline void id(ScicosID id)
51     {
52         _id = id;
53     }
54
55     inline kind_t kind()
56     {
57         return _kind;
58     }
59
60 private:
61     /**
62      * An id is used as a reference to the current object
63      */
64     ScicosID _id;
65
66     /**
67      * Kind of the Object
68      */
69     const kind_t _kind;
70 };
71
72 /** @defgroup utilities Shared utility classes
73  * @{
74  */
75
76 /*
77  * Represent a graphical object
78  */
79 struct Geometry
80 {
81     double x;
82     double y;
83     double width;
84     double height;
85
86     Geometry() : x(0), y(0), width(20), height(20) {};
87     Geometry(const Geometry& g) : x(g.x), y(g.y), width(g.width), height(g.height) {};
88     Geometry(const std::vector<double>& v) : x(v[0]), y(v[1]), width(v[2]), height(v[3]) {};
89
90     void fill(std::vector<double>& v) const
91     {
92         v.resize(4);
93         v[0] = x;
94         v[1] = y;
95         v[2] = width;
96         v[3] = height;
97     }
98     bool operator==(const Geometry& g) const
99     {
100         return x == g.x && y == g.y && width == g.width && height == g.height;
101     }
102 };
103
104 /**
105  * Per port type descriptor
106  *
107  * FIXME: should reuse Scilab datatypes descriptors
108  */
109 struct Datatype
110 {
111 public:
112     Datatype(const std::vector<int>& v) :
113         refCount(0), datatype_id(v[2]), rows(v[0]), columns(v[1])
114     {
115     }
116
117     // reference counter for the flyweight pattern
118     size_t refCount;
119
120     const int datatype_id;
121     const int rows;
122     const int columns;
123
124     bool operator==(const Datatype& d) const
125     {
126         return datatype_id == d.datatype_id && rows == d.rows && columns == d.columns;
127     }
128
129     bool operator<(const Datatype& d) const
130     {
131         return datatype_id < d.datatype_id && rows < d.rows && columns < d.columns;
132     }
133 };
134
135 /** @}*/
136
137 } /* namespace model */
138 } /* namespace org_scilab_modules_scicos */
139
140 #endif /* BASEOBJECT_HXX_ */