#include #include using std::string; using namespace std; using namespace bdm; class Passenger : public bdmroot { public: Passenger() { } }; class Human : public Passenger { public: string name; Human() { name = "none"; } virtual void from_setting( const Setting &root ) { root.lookupValue( "name", name ); } virtual void to_setting( Setting &root ) const { Setting &name_setting = root.add("name", Setting::TypeString ); name_setting = name; } string ToString() { return name; } }; UIREGISTER(Human); class Robot : public Passenger { public: int number; Array software; Robot() : software() { number = -1; } virtual void from_setting( const Setting &root ) { root.lookupValue( "number", number ); UI::get( software, root, "software" ); } virtual void to_setting( Setting &root ) const { Setting &number_setting = root.add("number", Setting::TypeInt ); number_setting = number; UI::save( software, root, "software" ); } string ToString() { stringstream stream; stream << number; for( int i = 0; i passengers; Car() : Transport() { kilometers = 0; } Car( int year, string manufacturer, int kilometers ) : Transport( year, manufacturer ), kilometers( kilometers ) { } virtual void from_setting( const Setting &root ) { Transport::from_setting( root ); root.lookupValue( "kilometers", kilometers ); UI::get( passengers, root, "passengers" ); } virtual void to_setting( Setting &root ) const { Transport::to_setting( root ); Setting &kilometers_setting = root.add("kilometers", Setting::TypeInt ); kilometers_setting = kilometers; UI::save( passengers, root, "passengers" ); } string ToString() { stringstream stream; stream << "A car made in " << year << " by " << manufacturer << ", having " << kilometers << " kilometers on the clock."; if( passengers.length() ) { stream << "The names of passengers are as follows: "; for( int i=0; iToString() << " "; } return stream.str(); } }; UIREGISTER(Car); class Bike : public Transport { public: bool electricLights; mat matr; Bike() : Transport(), matr("2,2;3,4") { electricLights = false; } Bike( int year, string manufacturer, bool electricLights ) : Transport( year, manufacturer ), electricLights( electricLights ) { } ~Bike() { } void from_setting( const Setting &root ) { Transport::from_setting( root ); root.lookupValue( "electricLights", electricLights ); UI::get( matr, root, "matr" ); } void to_setting( Setting &root ) const { Transport::to_setting( root ); Setting &electricLights_setting = root.add("electricLights", Setting::TypeBoolean ); electricLights_setting = electricLights; UI::save( matr, root, "matr" ); } string ToString() { stringstream stream; stream << "a bike made in " << year << " by " << manufacturer; if( electricLights ) stream << " with electric lights included"; return stream.str(); } }; UIREGISTER(Bike); int main() { //////////////////////////////////// LOADING //////////////////////////////// UI_File in("testUI_in.cfg"); in.load(); Transport *pepikovo = UI::build( in, "pepikovo"); cout << "pepikovo: " << pepikovo->ToString() << endl; Transport *jardovo = UI::build( in, "jardovo"); cout << "jardovo: " << jardovo->ToString() << endl; Transport *ondrejovo = UI::build( in, "ondrejovo"); cout << "ondrejovo: " << ondrejovo->ToString() << endl; Transport *elisky = UI::build( in, "elisky"); cout << "elisky: " << elisky->ToString() << endl; Transport *kati = UI::build( in, "kati"); cout << "kati: " << kati->ToString() << endl; getchar(); /////////////////////////////////// SAVING ////////////////////////// Car audi( 1968, "zyl", 200); Car liaz( 1989, "skoda", 1000); Bike author( 2001, "noname", false ); UI_File out("testUI_out.cfg"); UI::save( &audi, out, "marty"); UI::save( &liaz, out, "bohousovo"); UI::save( &author, out, "karlovo"); UI::save( pepikovo, out, "pepikovo"); out.save(); cout << "all the transport means were saved correctly" << endl; getchar(); return 0; }