Xcos: "Region to superblock" fixed
[scilab.git] / scilab / modules / scicos / includes / adapters_utilities.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2014-2014 - Scilab Enterprises - Clement DAVID
4  *  Copyright (C) 2017 - ESI Group - Clement DAVID
5  *
6  * Copyright (C) 2012 - 2016 - Scilab Enterprises
7  *
8  * This file is hereby licensed under the terms of the GNU GPL v2.0,
9  * pursuant to article 5.3.4 of the CeCILL v.2.1.
10  * This file was originally licensed under the terms of the CeCILL v2.1,
11  * and continues to be available under such terms.
12  * For more information, see the COPYING file which you should have received
13  * along with this program.
14  *
15  */
16
17 #ifndef ADAPTERS_UTILITIES_HXX_
18 #define ADAPTERS_UTILITIES_HXX_
19
20 #include <string>
21 #include <unordered_map>
22 #include <vector>
23
24 typedef std::vector<unsigned int> link_indices_t;
25 template<typename K, typename T>
26 using partials_map_t = std::unordered_map<K, T>;
27
28 /*
29  * Partial information used on LinkAdapter
30  */
31
32 enum startOrEnd
33 {
34     Start = 0,
35     End = 1
36 };
37
38 struct link_t
39 {
40     int block;
41     int port;
42     enum startOrEnd kind;
43 };
44
45 inline std::string to_string(const link_t& l)
46 {
47     return "[ " + std::to_string(l.block) + ", " + std::to_string(l.port) + ", " + std::to_string(l.kind) + " ]";
48 };
49
50 // partial-link information
51 struct partial_link_t
52 {
53     link_t from;
54     link_t to;
55 };
56
57 inline std::string to_string(const partial_link_t& l)
58 {
59     return "{ \"from\": " + to_string(l.from) + ", \"to\": " + to_string(l.to) + " }";
60 };
61
62 typedef partials_map_t<ScicosID, partial_link_t> partials_links_t;
63
64 inline std::string to_string(const partials_links_t& links)
65 {
66     if (links.size() == 0)
67     {
68         return "{}";
69     }
70
71     std::string inner;
72     for (const auto& e : links)
73     {
74         inner += "\"" + std::to_string(e.first) + "\": " + to_string(e.second) + ", ";
75     }
76     inner = inner.substr(0, inner.size() - 2);
77
78     return "{ " + inner + " }";
79 };
80
81 /*
82  * Partial information used on GraphicsAdapter
83  */
84
85 struct partial_port_t
86 {
87     typedef std::vector<int> value_type;
88
89     value_type pin;
90     value_type pout;
91     value_type pein;
92     value_type peout;
93 };
94
95 typedef partials_map_t<ScicosID, partial_port_t> partials_ports_t;
96
97 inline std::string to_string(const std::vector<int>& v)
98 {
99     if (v.size() == 0)
100     {
101         return "[]";
102     }
103
104     std::string inner;
105     for (int index : v)
106     {
107         inner += std::to_string(index) + ", ";
108     }
109     inner = inner.substr(0, inner.size() - 2);
110
111     return "[ " + inner + " ]";
112 };
113
114 inline std::string to_string(const partial_port_t& ports)
115 {
116     return "{ \"pin\": " + to_string(ports.pin) +
117            ", \"pout\": " + to_string(ports.pout) +
118            ", \"pein\": " + to_string(ports.pein) +
119            ", \"peout\": " + to_string(ports.peout) +
120            " }";
121 };
122
123 inline std::string to_string(const partials_ports_t& ports)
124 {
125     if (ports.size() == 0)
126     {
127         return "{}";
128     }
129
130     std::string inner;
131     for (const auto& e : ports)
132     {
133         inner += "\"" + std::to_string(e.first) + "\": " + to_string(e.second) + ", ";
134     }
135     inner = inner.substr(0, inner.size() - 2);
136
137     return "{ " + inner + " }";
138 }
139
140 #endif /* ADAPTERS_UTILITIES_HXX_ */