AirSched Logo  0.1.4
C++ Simulated Airline Schedule Manager Library
SegmentPathPeriodKey.cpp
Go to the documentation of this file.
00001 // //////////////////////////////////////////////////////////////////////
00002 // Import section
00003 // //////////////////////////////////////////////////////////////////////
00004 // STL
00005 #include <cassert>
00006 #include <sstream>
00007 // Boost.Serialization
00008 #include <boost/archive/text_iarchive.hpp>
00009 #include <boost/archive/text_oarchive.hpp>
00010 #include <boost/serialization/access.hpp>
00011 // StdAir
00012 #include <stdair/basic/BasConst_General.hpp>
00013 #include <stdair/basic/BasConst_Inventory.hpp>
00014 #include <stdair/basic/BasConst_Period_BOM.hpp>
00015 #include <stdair/basic/BasConst_TravelSolution.hpp>
00016 // AirSched
00017 #include <airsched/bom/SegmentPathPeriodKey.hpp>
00018 
00019 namespace AIRSCHED {
00020 
00021   // ////////////////////////////////////////////////////////////////////
00022   SegmentPathPeriodKey::SegmentPathPeriodKey()
00023     : _period (stdair::BOOST_DEFAULT_DATE_PERIOD, stdair::DEFAULT_DOW_STRING),
00024       _boardingTime (stdair::NULL_BOOST_TIME_DURATION),
00025       _elapsed (stdair::NULL_BOOST_TIME_DURATION),
00026       _nbOfAirlines (stdair::DEFAULT_NBOFAIRLINES) {
00027   }
00028 
00029   // ////////////////////////////////////////////////////////////////////
00030   SegmentPathPeriodKey::SegmentPathPeriodKey (const SegmentPathPeriodKey& iSPPK)
00031     : _period (iSPPK._period),
00032       _boardingTime (iSPPK._boardingTime),
00033       _elapsed (iSPPK._elapsed),
00034       _boardingDateOffsetList (iSPPK._boardingDateOffsetList),
00035       _nbOfAirlines (iSPPK._nbOfAirlines) {
00036   }
00037 
00038   // ////////////////////////////////////////////////////////////////////
00039   SegmentPathPeriodKey::
00040   SegmentPathPeriodKey (const stdair::PeriodStruct& iPeriod,
00041                         const stdair::Duration_T& iBoardingTime,
00042                         const stdair::Duration_T& iElapsedTime,
00043                         const DateOffsetList_T& iBoardingDateOffsetList,
00044                         const stdair::NbOfAirlines_T& iNbOfAirlines)
00045     : _period (iPeriod),
00046       _boardingTime (iBoardingTime),
00047       _elapsed (iElapsedTime),
00048       _boardingDateOffsetList (iBoardingDateOffsetList),
00049       _nbOfAirlines (iNbOfAirlines) {
00050   }
00051   
00052   // ////////////////////////////////////////////////////////////////////
00053   SegmentPathPeriodKey::~SegmentPathPeriodKey() {
00054   }
00055 
00056   // ////////////////////////////////////////////////////////////////////
00057   void SegmentPathPeriodKey::toStream (std::ostream& ioOut) const {
00058     ioOut << "SegmentPathPeriodKey: " << toString() << std::endl;
00059   }
00060 
00061   // ////////////////////////////////////////////////////////////////////
00062   void SegmentPathPeriodKey::fromStream (std::istream& ioIn) {
00063   }
00064 
00065   // ////////////////////////////////////////////////////////////////////
00066   const std::string SegmentPathPeriodKey::toString() const {
00067     std::ostringstream oStr;
00068     oStr << _period.describeShort() << ", "
00069          << _boardingTime << ", "  << _elapsed << ", ";
00070 
00071     for (DateOffsetList_T::const_iterator itOffset =
00072            _boardingDateOffsetList.begin();
00073          itOffset != _boardingDateOffsetList.end(); ++itOffset) {
00074       const stdair::DateOffset_T& lDateOffset = *itOffset;
00075       oStr << lDateOffset.days() << ", ";
00076     }
00077 
00078     oStr << _nbOfAirlines ;
00079     return oStr.str();
00080   }
00081   
00082   // ////////////////////////////////////////////////////////////////////
00083   void SegmentPathPeriodKey::serialisationImplementationExport() const {
00084     std::ostringstream oStr;
00085     boost::archive::text_oarchive oa (oStr);
00086     oa << *this;
00087   }
00088 
00089   // ////////////////////////////////////////////////////////////////////
00090   void SegmentPathPeriodKey::serialisationImplementationImport() {
00091     std::istringstream iStr;
00092     boost::archive::text_iarchive ia (iStr);
00093     ia >> *this;
00094   }
00095 
00096   // ////////////////////////////////////////////////////////////////////
00097   template<class Archive>
00098   void SegmentPathPeriodKey::serialize (Archive& ioArchive,
00099                                         const unsigned int iFileVersion) {
00104     //ioArchive & _period & _boardingTime & _elapsed & _nbOfAirlines;
00105     std::string lBTStr = boost::posix_time::to_simple_string (_boardingTime);
00106     std::string lElapsedStr = boost::posix_time::to_simple_string (_elapsed);
00107     ioArchive & lBTStr & lElapsedStr & _nbOfAirlines;
00108   }
00109 
00110   // ////////////////////////////////////////////////////////////////////
00111   // Explicit template instantiation
00112   namespace ba = boost::archive;
00113   template
00114   void SegmentPathPeriodKey::serialize<ba::text_oarchive> (ba::text_oarchive&,
00115                                                            unsigned int);
00116   template
00117   void SegmentPathPeriodKey::serialize<ba::text_iarchive> (ba::text_iarchive&,
00118                                                            unsigned int);
00119   // ////////////////////////////////////////////////////////////////////
00120 
00121 }