Testing enum and callback combination
[iot2.git] / iotjava / iotrmi / C++ / basics / TestClass.hpp
1 #ifndef _TESTCLASS_HPP__
2 #define _TESTCLASS_HPP__
3
4 #include <iostream>
5 #include <thread>
6 #include <chrono>
7 #include "TestClassInterface.hpp"
8 #include "CallBackInterfaceWithCallBack.hpp"
9
10 using namespace std;
11
12 class TestClass : public TestClassInterface {
13         public:
14                 TestClass();
15                 TestClass(int _int, float _float, string _string);
16
17                 char                            getByte(char in);
18                 short                           getShort(short in);
19                 int64_t                         getLong(int64_t in);
20                 float                           getFloat(float in);
21                 double                          getDouble(double in);
22                 bool                            getBoolean(bool in);
23                 char                            getChar(char in);
24
25                 vector<char>            getByteArray(vector<char> in);
26                 vector<short>           getShortArray(vector<short> in);
27                 vector<int64_t>         getLongArray(vector<int64_t> in);
28                 vector<float>           getFloatArray(vector<float> in);
29                 vector<double>          getDoubleArray(vector<double> in);
30                 vector<bool>            getBooleanArray(vector<bool> in);
31                 vector<char>            getCharArray(vector<char> in);
32
33                 vector<char>            getByteList(vector<char> in);
34                 vector<short>           getShortList(vector<short> in);
35                 vector<int64_t>         getLongList(vector<int64_t> in);
36                 vector<float>           getFloatList(vector<float> in);
37                 vector<double>          getDoubleList(vector<double> in);
38                 vector<bool>            getBooleanList(vector<bool> in);
39                 vector<char>            getCharList(vector<char> in);
40
41                 // Callbacks
42                 void                            registerCallback(CallBackInterfaceWithCallBack* _cb);
43                 void                            registerCallbackArray(vector<CallBackInterfaceWithCallBack*> _cb);
44                 void                            registerCallbackList(vector<CallBackInterfaceWithCallBack*> _cb);
45                 void                            registerCallbackComplex(int in, vector<CallBackInterfaceWithCallBack*> _cb, double db);
46                 int                                     callBack();
47                 vector<Enum>            handleCallbackEnum(vector<Enum> en, char c, vector<CallBackInterfaceWithCallBack*> _cb);
48
49                 // Enum
50                 Enum                            handleEnum(Enum en);
51                 vector<Enum>            handleEnumArray(vector<Enum> vecEn);
52                 vector<Enum>            handleEnumList(vector<Enum> vecEn);
53                 Enum                            handleEnumComplex(Enum en, int i, char c);
54                 vector<Enum>            handleEnumComplex2(vector<Enum> en, int i, char c);
55
56                 // Struct
57                 Struct                          handleStruct(Struct str);
58                 vector<Struct>          handleStructArray(vector<Struct> vecStr);
59                 vector<Struct>          handleStructList(vector<Struct> vecStr);
60                 Struct                          handleStructComplex(int in, char c, Struct str);
61                 vector<Struct>          handleStructComplex2(int in, char c, vector<Struct> vecStr);
62
63                 vector<Enum>            handleEnumStruct(vector<Enum> en, vector<Struct> str, char c);
64                 vector<Enum>            handleAll(vector<Enum> en, vector<Struct> str, char c, vector<CallBackInterfaceWithCallBack*> _cb);
65
66                 int                                     getA();
67                 void                            setA(int _int);
68                 void                            setB(float _float);
69                 void                            setC(string _string);
70                 string                          sumArray(vector<string> newA);
71                 int                                     setAndGetA(int newA);
72                 int                                     setACAndGetA(string newC, int newA);
73
74         private:                
75                 int                                                                             intA;
76                 float                                                                   floatB;
77                 string                                                                  stringC;
78                 vector<CallBackInterfaceWithCallBack*>  cbvec;
79 };
80
81
82 TestClass::TestClass() {
83
84         intA = 1;
85         floatB = 2;
86         stringC = "345";
87         // cbvec doesn't need to be initialized again
88 }
89
90
91 TestClass::TestClass(int _int, float _float, string _string) {
92
93         intA = _int;
94         floatB = _float;
95         stringC = _string;
96         // cbvec doesn't need to be initialized again
97 }
98
99
100 void TestClass::registerCallback(CallBackInterfaceWithCallBack* _cb) {
101
102         cbvec.push_back(_cb);
103         cout << "Registering callback object!" << endl;
104 }
105
106
107 void TestClass::registerCallbackArray(vector<CallBackInterfaceWithCallBack*> _cb) {
108
109         for (CallBackInterfaceWithCallBack* cb : _cb) {
110                 cbvec.push_back(cb);
111                 cout << "Registering callback object in array!" << endl;
112         }
113 }
114
115
116 void TestClass::registerCallbackList(vector<CallBackInterfaceWithCallBack*> _cb) {
117
118         for (CallBackInterfaceWithCallBack* cb : _cb) {
119                 cbvec.push_back(cb);
120                 cout << "Registering callback object in list!" << endl;
121         }
122 }
123
124
125 void TestClass::registerCallbackComplex(int in, vector<CallBackInterfaceWithCallBack*> _cb, double db) {
126
127         for (CallBackInterfaceWithCallBack* cb : _cb) {
128                 cbvec.push_back(cb);
129                 cout << "Registering callback object in list!" << endl;
130         }
131
132         cout << "Integer: " << in << endl;
133         cout << "Double: " << db << endl;
134 }
135
136
137 int TestClass::callBack() {
138
139         int sum = 0;
140         for (CallBackInterfaceWithCallBack* cb : cbvec) {
141                 sum = sum + cb->printInt();
142         }
143
144         return sum;
145 }
146
147
148 // Single variables
149 char TestClass::getByte(char in) {
150
151         return in;
152 }
153
154
155 short TestClass::getShort(short in) {
156
157         return in;
158 }
159
160
161 int64_t TestClass::getLong(int64_t in) {
162
163         return in;
164 }
165
166
167 float TestClass::getFloat(float in) {
168
169         return in;
170 }
171
172
173 double TestClass::getDouble(double in) {
174
175         return in;
176 }
177
178
179 bool TestClass::getBoolean(bool in) {
180
181         return in;
182 }
183
184
185 char TestClass::getChar(char in) {
186
187         return in;
188 }
189
190
191 // Arrays
192 vector<char> TestClass::getByteArray(vector<char> in) {
193
194         return in;
195 }
196
197
198 vector<short> TestClass::getShortArray(vector<short> in) {
199
200         return in;
201 }
202
203
204 vector<int64_t> TestClass::getLongArray(vector<int64_t> in) {
205
206         return in;
207 }
208
209
210 vector<float> TestClass::getFloatArray(vector<float> in) {
211
212         return in;
213 }
214
215
216 vector<double> TestClass::getDoubleArray(vector<double> in) {
217
218         return in;
219 }
220
221
222 vector<bool> TestClass::getBooleanArray(vector<bool> in) {
223
224         return in;
225 }
226
227
228 vector<char> TestClass::getCharArray(vector<char> in) {
229
230         return in;
231 }
232
233 // List
234 vector<char> TestClass::getByteList(vector<char> in) {
235
236         return in;
237 }
238
239
240 vector<short> TestClass::getShortList(vector<short> in) {
241
242         return in;
243 }
244
245
246 vector<int64_t> TestClass::getLongList(vector<int64_t> in) {
247
248         return in;
249 }
250
251
252 vector<float> TestClass::getFloatList(vector<float> in) {
253
254         return in;
255 }
256
257
258 vector<double> TestClass::getDoubleList(vector<double> in) {
259
260         return in;
261 }
262
263
264 vector<bool> TestClass::getBooleanList(vector<bool> in) {
265
266         return in;
267 }
268
269
270 vector<char> TestClass::getCharList(vector<char> in) {
271
272         return in;
273 }
274
275
276 int TestClass::getA() {
277
278         return intA;
279 }
280
281
282 void TestClass::setA(int _int) {
283
284         intA = _int;
285 }
286
287
288 void TestClass::setB(float _float) {
289
290         floatB = _float;
291 }
292
293
294 void TestClass::setC(string _string) {
295
296         stringC = _string;
297 }
298
299
300 // Enum
301 Enum TestClass::handleEnum(Enum en) {
302
303         cout << "Enum: " << en << endl;
304         
305         return en;
306 }
307
308
309 vector<Enum> TestClass::handleEnumArray(vector<Enum> vecEn) {
310
311         for (Enum en : vecEn) {
312                 cout << "Enum: " << en << endl;
313         }
314         
315         return vecEn;
316 }
317
318
319 vector<Enum> TestClass::handleEnumList(vector<Enum> vecEn) {
320
321         for (Enum en : vecEn) {
322                 cout << "Enum: " << en << endl;
323         }
324         
325         return vecEn;
326 }
327
328
329 Enum TestClass::handleEnumComplex(Enum en, int i, char c) {
330
331         cout << "Enum: " << en << endl;
332         cout << "Integer: " << i << endl;
333         cout << "Char: " << c << endl;
334         
335         return en;
336 }
337
338
339 vector<Enum> TestClass::handleEnumComplex2(vector<Enum> vecEn, int in, char c) {
340
341         for (Enum en : vecEn) {
342                 cout << "Enum: " << en << endl;
343         }
344         cout << "Integer: " << in << endl;
345         cout << "Char: " << c << endl;
346         
347         return vecEn;
348 }
349
350
351
352 // Struct
353 Struct TestClass::handleStruct(Struct str) {
354
355         cout << "Name: " << str.name << endl;
356         cout << "Value: " << str.value << endl;
357         cout << "Year: " << str.year << endl;
358
359         Struct test;
360         test.name = "Anonymous";
361         test.value = 1.33;
362         test.year = 2016;
363         str = test;
364
365         return str;
366 }
367
368
369 vector<Struct> TestClass::handleStructArray(vector<Struct> vecStr) {
370
371         for (Struct str : vecStr) {
372
373                 cout << "Name: " << str.name << endl;
374                 cout << "Value: " << str.value << endl;
375                 cout << "Year: " << str.year << endl;
376         }
377         Struct test;
378         test.name = "Anonymous";
379         test.value = 1.33;
380         test.year = 2016;
381         vecStr.push_back(test);
382
383         return vecStr;
384 }
385
386
387 vector<Struct> TestClass::handleStructList(vector<Struct> vecStr) {
388
389         for (Struct str : vecStr) {
390
391                 cout << "Name: " << str.name << endl;
392                 cout << "Value: " << str.value << endl;
393                 cout << "Year: " << str.year << endl;
394         }
395         Struct test;
396         test.name = "Trimananda";
397         test.value = 1.33;
398         test.year = 2016;
399         vecStr.push_back(test);
400
401         return vecStr;
402 }
403
404
405 Struct TestClass::handleStructComplex(int in, char c, Struct str) {
406
407         cout << "Name: " << str.name << endl;
408         cout << "Value: " << str.value << endl;
409         cout << "Year: " << str.year << endl;
410
411         cout << "Integer: " << in << endl;
412         cout << "Char: " << c << endl;
413
414         Struct test;
415         test.name = "Anonymous";
416         test.value = 1.33;
417         test.year = 2016;
418         str = test;
419
420         return str;
421 }
422
423
424 vector<Struct> TestClass::handleStructComplex2(int in, char c, vector<Struct> vecStr) {
425
426         for (Struct str : vecStr) {
427                 cout << "Name: " << str.name << endl;
428                 cout << "Value: " << str.value << endl;
429                 cout << "Year: " << str.year << endl;
430         }
431
432         cout << "Integer: " << in << endl;
433         cout << "Char: " << c << endl;
434
435         return vecStr;
436 }
437
438
439 vector<Enum> TestClass::handleEnumStruct(vector<Enum> en, vector<Struct> str, char c) {
440
441         for (Struct st : str) {
442                 cout << "Name: " << st.name << endl;
443                 cout << "Value: " << st.value << endl;
444                 cout << "Year: " << st.year << endl;
445         }
446
447         cout << "Char: " << c << endl;
448
449         return en;
450 }
451
452
453 vector<Enum> TestClass::handleAll(vector<Enum> en, vector<Struct> str, char c, vector<CallBackInterfaceWithCallBack*> _cb) {
454
455         for (CallBackInterfaceWithCallBack* cb : _cb) {
456                 cbvec.push_back(cb);
457                 cout << "Registering callback object in array!" << endl;
458         }
459
460         for (Struct st : str) {
461                 cout << "Name: " << st.name << endl;
462                 cout << "Value: " << st.value << endl;
463                 cout << "Year: " << st.year << endl;
464         }
465
466         cout << "Char: " << c << endl;
467
468         return en;
469 }
470
471
472 vector<Enum> TestClass::handleCallbackEnum(vector<Enum> en, char c, vector<CallBackInterfaceWithCallBack*> _cb) {
473
474         for (CallBackInterfaceWithCallBack* cb : _cb) {
475                 cbvec.push_back(cb);
476                 cout << "Registering callback object in array!" << endl;
477         }
478
479         cout << "Char: " << c << endl;
480
481         return en;
482 }
483
484
485 string TestClass::sumArray(vector<string> newA) {
486
487         string sum = "";
488         int len = newA.size();
489         for(int c = 0; c < len; c++) {
490                 sum = sum + newA[c];
491         }
492         return sum;
493 }
494
495
496 int TestClass::setAndGetA(int newA) {
497
498         intA = newA;
499         return intA;
500 }
501
502
503 int TestClass::setACAndGetA(string newC, int newA) {
504
505         stringC = newC;
506         intA = newA;
507         return intA;
508 }
509
510 #endif
511