123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
- //
- // demo_xml.cpp
- //
- // (C) Copyright 2002-4 Robert Ramey - http://www.rrsd.com .
- // Use, modification and distribution is subject to the Boost Software
- // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
- // http://www.boost.org/LICENSE_1_0.txt)
- #include <iomanip>
- #include <iostream>
- #include <fstream>
- #include <string>
- #include <cstdio> // remove
- #include <boost/config.hpp>
- #if defined(BOOST_NO_STDC_NAMESPACE)
- namespace std{
- using ::remove;
- }
- #endif
- #include <boost/archive/tmpdir.hpp>
- #include <boost/archive/xml_iarchive.hpp>
- #include <boost/archive/xml_oarchive.hpp>
- #include "demo_gps.hpp"
- void save_schedule(const bus_schedule &s, const char * filename){
- // make an archive
- std::ofstream ofs(filename);
- assert(ofs.good());
- boost::archive::xml_oarchive oa(ofs);
- oa << BOOST_SERIALIZATION_NVP(s);
- }
- void
- restore_schedule(bus_schedule &s, const char * filename)
- {
- // open the archive
- std::ifstream ifs(filename);
- assert(ifs.good());
- boost::archive::xml_iarchive ia(ifs);
- // restore the schedule from the archive
- ia >> BOOST_SERIALIZATION_NVP(s);
- }
- int main(int argc, char *argv[])
- {
- // make the schedule
- bus_schedule original_schedule;
- // fill in the data
- // make a few stops
- bus_stop *bs0 = new bus_stop_corner(
- gps_position(34, 135, 52.560f),
- gps_position(134, 22, 78.30f),
- "24th Street", "10th Avenue"
- );
- bus_stop *bs1 = new bus_stop_corner(
- gps_position(35, 137, 23.456f),
- gps_position(133, 35, 54.12f),
- "State street", "Cathedral Vista Lane"
- );
- bus_stop *bs2 = new bus_stop_destination(
- gps_position(35, 136, 15.456f),
- gps_position(133, 32, 15.300f),
- "White House"
- );
- bus_stop *bs3 = new bus_stop_destination(
- gps_position(35, 134, 48.789f),
- gps_position(133, 32, 16.230f),
- "Lincoln Memorial"
- );
- // make a routes
- bus_route route0;
- route0.append(bs0);
- route0.append(bs1);
- route0.append(bs2);
- // add trips to schedule
- original_schedule.append("bob", 6, 24, &route0);
- original_schedule.append("bob", 9, 57, &route0);
- original_schedule.append("alice", 11, 02, &route0);
- // make aother routes
- bus_route route1;
- route1.append(bs3);
- route1.append(bs2);
- route1.append(bs1);
- // add trips to schedule
- original_schedule.append("ted", 7, 17, &route1);
- original_schedule.append("ted", 9, 38, &route1);
- original_schedule.append("alice", 11, 47, &route1);
- // display the complete schedule
- std::cout << "original schedule";
- std::cout << original_schedule;
-
- std::string filename(boost::archive::tmpdir());
- filename += "/demo.xml";
- // save the schedule
- save_schedule(original_schedule, filename.c_str());
- // ... some time later
- // make a new schedule
- bus_schedule new_schedule;
- restore_schedule(new_schedule, filename.c_str());
- // and display
- std::cout << "\nrestored schedule";
- std::cout << new_schedule;
- // should be the same as the old one. (except for the pointer values)
- std::remove(filename.c_str());
- delete bs0;
- delete bs1;
- delete bs2;
- delete bs3;
- return 0;
- }
|