mtc_1_generators.cpp
Go to the documentation of this file.
1/** @file mtc_1_generators.cpp
2
3Tutorial, MtcSystem methods.
4
5@ingroup Tutorials
6
7@include mtc_1_generators.cpp
8*/
9
10
11#include "libfaudes.h"
12
13
14// make faudes namespace available to our program
15using namespace faudes;
16
17
18/////////////////
19// main program
20/////////////////
21
22int main() {
23
24 /***************************************************************
25 * Constructor and file io
26 *
27 ***************************************************************/
28
29 // At first we create an empty MtcSystem object
30 MtcSystem g1;
31
32 // Insert states
33 Idx s1 = g1.InsState("up");
34 Idx s2 = g1.InsInitState("middle");
35
36 // Insert events
37 Idx e1, e2;
38 e1 = g1.InsEvent("go_up");
39 e2 = g1.InsEvent("go_down");
40
41 // Set transitions - by name or index
42 g1.SetTransition("middle", "go_up", "up");
43 g1.SetTransition(s1, e2, s2);
44
45 // Generate further MtcSystem objects by reading a generator from a file...
46 MtcSystem g2("data/mtc_generator_1.gen");
47
48 MtcSystem g3;
49 g3.Read("data/mtc_generator_1.gen");
50
51 // ...or by copying a generator
52 MtcSystem g4=g3;
53
54 // Output of MtcSystem to file
55 g4.Write("tmp_mtc_generator_1.gen");
56 g1.Write("tmp_mtc_generator_2.gen");
57
58 // Write MtcSystem to console (for debugging)
59 std::cout << "##########################################" << std::endl;
60 std::cout << "# mtcgenerators - constructors and file io" << std::endl;
61 std::cout << std::endl << "# MtcSystem without colors:" << std::endl << std::endl;
62 g1.DWrite();
63 std::cout << std::endl << "# MtcSystem with colors:" << std::endl << std::endl;
64 g2.DWrite();
65 std::cout << std::endl << "# same MtcSystem, but read from file using the Read() method:" << std::endl << std::endl;
66 g3.DWrite();
67 std::cout << "##########################################" << std::endl << std::endl;
68
69
70 /***************************************************************
71 * Output to .dot-file for Graphviz visualization
72 *
73 ***************************************************************/
74
75 // Generator .dot-file for Graphviz dot
76
77 // Output of the MtcSystem to the dot format, where states are colored
78 g1.DotWrite("tmp_mtc_generator_1.dot");
79
80 // Graphical output of the MtcSystem, invokes Graphviz dot
81 g2.GraphWrite("tmp_mtc_generator_2.png");
82
83
84 /***************************************************************
85 * Editing state attributes - colored states
86 *
87 ***************************************************************/
88
89 // Insert a new colored state
90 Idx s3 = g1.InsColoredState("down", "low");
91
92 // Set further transitions
93 g1.SetTransition(s2, e2, s3);
94 g1.SetTransition(s3, e1, s2);
95
96 // Set a color for an existing state
97 Idx c1 = g1.InsColor(s1, "high");
98 g1.InsColor(s2, c1);
99
100 // test output
101 g1.Write("tmp_mtc_generator_3.gen");
102 g1.GraphWrite("tmp_mtc_generator_3.png");
103
104 // The color label of the second state is wrong
105 // ==> delete it
106 g1.DelColor(s2, "high");
107
108 // Test output
109 g1.Write("tmp_mtc_generator_4.gen");
110 g1.GraphWrite("tmp_mtc_generator_4.png");
111
112 // Find out index of a color
113 Idx c3 = g1.ColorIndex("high");
114 std::cout << "Index of color \"high\": " << c3 << std::endl;
115
116 // Find out name of color
117 std::string color3 = g1.ColorName(c3);
118 std::cout << "Color name for index " << c3 << ": " << color3 << std::endl;
119
120 // Delete one color from all states
121 g1.DelColor(c3);
122
123 // Test output
124 g1.Write("tmp_mtc_generator_5.gen");
125 g1.GraphWrite("tmp_mtc_generator_5.png");
126
127 // Delete all colors from all states
129
130 // Test output
131 g1.Write("tmp_mtc_generator_6.gen");
132 g1.GraphWrite("tmp_mtc_generator_6.png");
133
134 // Reinsert color "high"
135 g1.InsColor(s1, c3);
136
137 // Test output
138 g1.Write("tmp_mtc_generator_7.gen");
139 g1.GraphWrite("tmp_mtc_generator_7.png");
140
141 // delete all colors from a particular state
142 g1.ClrStateAttribute(s1);
143
144 // test output
145 g1.Write("tmp_mtc_generator_8.gen");
146 g1.GraphWrite("tmp_mtc_generator_8.png");
147
148 // reinsert color
149 g1.InsColor(s1, c1);
150
151 // test output
152 g1.Write("tmp_mtc_generator_9.gen");
153 g1.GraphWrite("tmp_mtc_generator_9.png");
154
155 // Lookup name of reinserted color
156 std::string name = g1.ColorName(c1);
157
158 // Color names are not deleted from symbol table as long as the global
159 // color symbol table is used.
160 std::cout << "Color name for index " << c1 << ": " << name << std::endl;
161
162 // Check if color exists in generator
163 // (therefore iterate over all states -> expensive method)
164 if(!g1.ExistsColor(c1))
165 std::cout << "Color c1 does not exist in g1 anymore" << std::endl;
166 else
167 std::cout << "Color c1 exists in g1" << std::endl;
168
169 // Check if a color exists in a particular state
170 if(!g1.ExistsColor(s2, c1))
171 std::cout << "State s2 is not colored by color c1" << std::endl;
172 if(g1.ExistsColor(s1, c1))
173 std::cout << "State s1 is colored by color " << g1.CStr(c1) << std::endl;
174
175 // Collect all colors of the generator
176 // Directly inserts colors into the specified reference of a color set
177 ColorSet allColors1;
178 g1.Colors(allColors1);
179
180 // Creates temporary color set, inserts all colors,
181 // and copies the set to allcolors2 afterwards
182 ColorSet allColors2 = g1.Colors();
183
184 // Get all colors of a particular state
185 const ColorSet& allStateColors =g1.Colors(s1);
186
187 // Print color to console
188 allStateColors.DWrite();
189
190 // Clear MtcSystem g1
191 g1.Clear();
192
193
194 /////////////////////////////////////////////////////
195 // Local color symbol table
196 //
197 // In the current implementation, a symbol table is treated local
198 // whenever it is different to the global one. The implementation
199 // then tries to keep book and remove symbols that are not referenced.
200 // However, this feature in its current form is inefficient and not
201 // very useful. It will disapper in a future version.
202 //
203 /////////////////////////////////////////////////////
204
205 {
206 MtcSystem gen, copygen;
207
208 Idx st1 = gen.InsInitState("1");
209 Idx st2 = gen.InsState("2");
210
211 Idx eva = gen.InsEvent("a");
212 Idx evb = gen.InsEvent("b");
213 Idx evc = gen.InsEvent("c");
214
215 Idx c1 = gen.InsColor(st1, "first");
216 Idx c2 = gen.InsColor(st2, "second");
217
218 gen.SetTransition(st1, eva, st2);
219 gen.SetTransition(st2, evb, st2);
220 gen.SetTransition(st2, evc, st1);
221
222 std::cout << "gen: Color name of c1 = " << gen.ColorName(c1) << std::endl;
223 std::cout << "gen: Color index of first = " << gen.ColorIndex("first") << std::endl;
224
225 // Generate new color symbol table for gen,
226 // all color labels already contained in gen are copied
228
229 std::cout << "gen: Color name of c1 = " << gen.ColorName(c1) << std::endl;
230 std::cout << "gen: Color index of first = " << gen.ColorIndex("first") << std::endl;
231
232 copygen.Assign(gen);
233
234 gen.DelColor(c1);
235
236 std::cout << "copygen: Color name of c1 = " << copygen.ColorName(c1) << std::endl;
237 std::cout << "copygen: Color index of first = " << copygen.ColorIndex("first") << std::endl;
238
239 Idx c3 = copygen.InsColor(st1, "New_Color");
240
241 if (!gen.ExistsColor(c1)) std::cout << "gen: Index c1 does not exist!" << std::endl;
242 else std::cout << "gen: Index c1 exists!" << std::endl;
243 try {
244 std::cout << "gen: Color name of c1 = " << gen.ColorName(c1) << std::endl;
245 }
246 catch (faudes::Exception& exception){
247 std::cout << "gen: Color name of c1 does not exist any more" << std::endl;
248 }
249
250 if (!gen.ExistsColor(c3)) std::cout << "gen: Index c3 does not exist!" << std::endl;
251 else std::cout << "gen: Index c3 exists!" << std::endl;
252 try {
253 std::cout << "gen: Color name of c3 = " << gen.ColorName(c1) << std::endl;
254 }
255 catch (faudes::Exception& exception){
256 std::cout << "gen: Color name of c3 does not exist any more" << std::endl;
257 }
258
259 if (!copygen.ExistsColor(c1)) std::cout << "copygen: Index c1 does not exist!" << std::endl;
260 else std::cout << "copygen: Index c1 exists!" << std::endl;
261 try {
262 std::cout << "copygen: Color name of c1 = " << copygen.ColorName(c1) << std::endl;
263 }
264 catch (faudes::Exception& exception){
265 std::cout << "copygen: Color name of c1 does not exist any more" << std::endl;
266 }
267
268 if (!copygen.ExistsColor(c3)) std::cout << "copygen: Index c3 does not exist!" << std::endl;
269 else std::cout << "copygen: Index c3 exists!" << std::endl;
270 try {
271 std::cout << "copygen: Color name of c3 = " << copygen.ColorName(c1) << std::endl;
272 }
273 catch (faudes::Exception& exception){
274 std::cout << "copygen: Color name of c3 does not exist any more" << std::endl;
275 }
276
277 }
278
279 return 0;
280}
virtual void Clear(void)
bool InsEvent(Idx index)
bool SetTransition(Idx x1, Idx ev, Idx x2)
std::string ColorName(Idx colorIndex) const
bool ExistsColor(Idx colorIndex) const
virtual TmtcGenerator & Assign(const Type &rSrc)
void Colors(ColorSet &rColors) const
void DelColor(Idx stateIndex, const std::string &rColorName)
virtual void DotWrite(const std::string &rFileName) const
Idx ColorIndex(const std::string &rColorName) const
Idx InsColoredState(const std::string &rStateName, const std::string &rColorName)
Idx InsColor(Idx stateIndex, const std::string &rColorName)
std::string CStr(Idx index) const
void DWrite(const Type *pContext=0) const
void Read(const std::string &rFileName, const std::string &rLabel="", const Type *pContext=0)
void Write(const Type *pContext=0) const
void GraphWrite(const std::string &rFileName, const std::string &rOutFormat="", const std::string &rDotExec="dot") const
virtual void ClrStateAttribute(Idx index)
int main()
uint32_t Idx

libFAUDES 2.33k --- 2025.09.16 --- c++ api documentaion by doxygen