ca98cc237d
[SVN r41365]
128 lines
3.3 KiB
C++
128 lines
3.3 KiB
C++
/////////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;
|
|
}
|