root/library/tests/test_user_info.cpp @ 386

Revision 386, 5.2 kB (checked in by mido, 15 years ago)

possibly broken? 4th part

  • Property svn:eol-style set to native
RevLine 
[351]1
[344]2#include <string>
[386]3#include "base/user_info.h"
[244]4
[344]5using std::string;
[244]6using namespace std;
[254]7using namespace bdm;
[244]8
[351]9class Passenger : public bdmroot
10{
11public:
12
[357]13  Passenger() {
14  }
[351]15};
16
17class Human : public Passenger
18{
19public:
[357]20  string name;
[351]21
[357]22  Human() {
23    name = "none";
24  }
[351]25
[377]26  virtual void from_setting(const Setting &set) {
27    set.lookupValue("name", name);
[357]28  }
[351]29
[377]30  virtual void to_setting(Setting &set) const {
31    Setting &name_setting = set.add("name", Setting::TypeString);
[357]32    name_setting = name;
33  }
[351]34
[357]35  string to_string() {
36    return name;
37  }
[351]38};
39
40UIREGISTER(Human);
41
42class Robot : public Passenger
43{
44public:
[357]45  int number;
46  Array<string> software;
[351]47
[357]48  Robot() : software() {
49    number = -1;
50  }
[351]51
[377]52  virtual void from_setting(const Setting &set) {
53    set.lookupValue("number", number);
54        if( set.exists( "software" ) )
55                UI::get(software, set, "software");
[357]56  }
[351]57
[377]58  virtual void to_setting(Setting &set) const {
59    Setting &number_setting = set.add("number", Setting::TypeInt);
[357]60    number_setting = number;
[351]61
[377]62    UI::save(software, set, "software");
[357]63  }
[351]64
[357]65  string to_string() {
66    stringstream stream;
67    stream << number;
68    for (int i = 0; i < software.length(); i++)
69      stream << "_" + software(i);
70    return stream.str();
71  }
[351]72};
73
74UIREGISTER(Robot);
75
[344]76class Transport : public bdmroot
77{
78public:
[357]79  int year;
80  string manufacturer;
[344]81
[357]82  Transport() {
83    year = 1900;
84    manufacturer = "unknown";
85  }
[344]86
[357]87  Transport(int year, string manufacturer)
88      : year(year), manufacturer(manufacturer) {
89  }
[344]90
[377]91  virtual void from_setting(const Setting &set) {
92    set.lookupValue("year", year);
93    set.lookupValue("manufacturer", manufacturer);
[357]94  }
[344]95
[377]96  virtual void to_setting(Setting &set) const {
97    Setting &year_setting = set.add("year", Setting::TypeInt);
[357]98    year_setting = year;
[344]99
[377]100    Setting &manufacturer_setting = set.add("manufacturer", Setting::TypeString);
[357]101    manufacturer_setting = manufacturer;
102  }
[244]103};
104
[344]105class Car : public Transport
106{
107public:
[357]108  int kilometers;
109  Array<Passenger*> passengers;
[344]110
[357]111  Car() : Transport() {
112    kilometers = 0;
113  }
[344]114
115
[357]116  Car(int year, string manufacturer, int kilometers)
117      : Transport(year, manufacturer), kilometers(kilometers) {
118  }
[344]119
[377]120  virtual void from_setting(const Setting &set) {
121    Transport::from_setting(set);
[344]122
[377]123    set.lookupValue("kilometers", kilometers);
[351]124
[377]125        if( set.exists( "passengers" ) )
126            UI::get(passengers, set, "passengers");
[357]127  }
[344]128
[377]129  virtual void to_setting(Setting &set) const {
130    Transport::to_setting(set);
[344]131
[377]132    Setting &kilometers_setting = set.add("kilometers", Setting::TypeInt);
[357]133    kilometers_setting = kilometers;
[351]134
[377]135    UI::save(passengers, set, "passengers");
[357]136  }
[344]137
[357]138  string to_string() {
139    stringstream stream;
140    stream << "A car made in " << year << " by " << manufacturer << ", having " << kilometers << " kilometers on the clock.";
141    if (passengers.length()) {
142      stream << "The names of passengers are as follows: ";
143      for (int i = 0; i < passengers.length(); i++)
144        stream << passengers(i)->to_string() << " ";
145    }
146    return stream.str();
147  }
[244]148};
149
[344]150UIREGISTER(Car);
151
152class Bike : public Transport
153{
154public:
[357]155  bool electricLights;
156  mat matr;
[344]157
[357]158  Bike() : Transport(), matr("2,2;3,4") {
159    electricLights = false;
160  }
[344]161
[357]162  Bike(int year, string manufacturer, bool electricLights)
163      : Transport(year, manufacturer), electricLights(electricLights) {
164  }
[344]165
[357]166  ~Bike() {
167  }
[344]168
[377]169  void from_setting(const Setting &set) {
170    Transport::from_setting(set);
[344]171
[377]172    set.lookupValue("electricLights", electricLights);
[344]173
[377]174        UI::get(matr, set, "matr");
[357]175  }
[344]176
[377]177  void to_setting(Setting &set) const {
178    Transport::to_setting(set);
[344]179
[377]180    Setting &electricLights_setting = set.add("electricLights", Setting::TypeBoolean);
[357]181    electricLights_setting = electricLights;
[344]182
[377]183    UI::save(matr, set, "matr");
[357]184  }
[344]185
[357]186  string to_string() {
187    stringstream stream;
188    stream << "a bike made in " << year << " by " << manufacturer;
189    if (electricLights) stream << " with electric lights included";
190    return stream.str();
191  }
[244]192};
193
[344]194UIREGISTER(Bike);
[244]195
[344]196int main()
[357]197{
198  //////////////////////////////////// LOADING ////////////////////////////////
[386]199  UI_File in("test_user_info_input.cfg");
[357]200  Transport *pepikovo = UI::build<Transport>(in, "pepikovo");
201  cout << "pepikovo: " << pepikovo->to_string() << endl;
202  Transport *jardovo = UI::build<Transport>(in, "jardovo");
203  cout << "jardovo: " << jardovo->to_string() << endl;
204  Transport *ondrejovo = UI::build<Transport>(in, "ondrejovo");
205  cout << "ondrejovo: " << ondrejovo->to_string() << endl;
206  Transport *elisky = UI::build<Transport>(in, "elisky");
207  cout << "elisky: " << elisky->to_string() << endl;
208  Transport *kati = UI::build<Transport>(in, "kati");
209  cout << "kati: " << kati->to_string() << endl;
[386]210  cout << endl << "press any key to continue..." << endl;
[357]211  getchar();
[351]212
[357]213  /////////////////////////////////// SAVING //////////////////////////
[351]214
[357]215  Car audi(1968, "zyl", 200);
216  Car liaz(1989, "skoda", 1000);
217  Bike author(2001, "noname", false);
218  UI_File out;
[351]219
[357]220  UI::save(&audi, out, "marty");
221  UI::save(&liaz, out, "bohousovo");
222  UI::save(&author, out, "karlovo");
223  UI::save(pepikovo, out, "pepikovo");
224  out.save("testUI_out.cfg");
[351]225
[357]226  cout << "all the transport means were saved correctly" << endl;
[386]227  cout << endl << "press any key to end the program" << endl;
[357]228  getchar();
229  return 0;
[244]230}
Note: See TracBrowser for help on using the browser.