[351] | 1 | |
---|
[344] | 2 | #include <string> |
---|
[384] | 3 | #include "base/user_info.h" |
---|
[244] | 4 | |
---|
[344] | 5 | using std::string; |
---|
[244] | 6 | using namespace std; |
---|
[254] | 7 | using namespace bdm; |
---|
[244] | 8 | |
---|
[351] | 9 | class Passenger : public bdmroot |
---|
| 10 | { |
---|
| 11 | public: |
---|
| 12 | |
---|
[357] | 13 | Passenger() { |
---|
| 14 | } |
---|
[351] | 15 | }; |
---|
| 16 | |
---|
| 17 | class Human : public Passenger |
---|
| 18 | { |
---|
| 19 | public: |
---|
[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 | |
---|
| 40 | UIREGISTER(Human); |
---|
| 41 | |
---|
| 42 | class Robot : public Passenger |
---|
| 43 | { |
---|
| 44 | public: |
---|
[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 | |
---|
| 74 | UIREGISTER(Robot); |
---|
| 75 | |
---|
[344] | 76 | class Transport : public bdmroot |
---|
| 77 | { |
---|
| 78 | public: |
---|
[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] | 105 | class Car : public Transport |
---|
| 106 | { |
---|
| 107 | public: |
---|
[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] | 150 | UIREGISTER(Car); |
---|
| 151 | |
---|
| 152 | class Bike : public Transport |
---|
| 153 | { |
---|
| 154 | public: |
---|
[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] | 194 | UIREGISTER(Bike); |
---|
[244] | 195 | |
---|
[344] | 196 | int main() |
---|
[357] | 197 | { |
---|
| 198 | //////////////////////////////////// LOADING //////////////////////////////// |
---|
[384] | 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; |
---|
[384] | 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; |
---|
[384] | 227 | cout << endl << "press any key to end the program" << endl; |
---|
[357] | 228 | getchar(); |
---|
| 229 | return 0; |
---|
[244] | 230 | } |
---|