AirSched Logo  0.1.4
C++ Simulated Airline Schedule Manager Library
BomDisplay.cpp
Go to the documentation of this file.
00001 // //////////////////////////////////////////////////////////////////////
00002 // Import section
00003 // //////////////////////////////////////////////////////////////////////
00004 // STL
00005 #include <cassert>
00006 #include <ostream>
00007 // StdAir
00008 #include <stdair/basic/BasConst_BomDisplay.hpp>
00009 #include <stdair/bom/BomManager.hpp>
00010 #include <stdair/bom/BomRoot.hpp>
00011 // AirSched
00012 #include <airsched/bom/ReachableUniverse.hpp>
00013 #include <airsched/bom/BomDisplay.hpp>
00014 
00015 namespace AIRSCHED {
00016 
00022   struct FlagSaver {
00023   public:
00025     FlagSaver (std::ostream& oStream)
00026       : _oStream (oStream), _streamFlags (oStream.flags()) {
00027     }
00028 
00030     ~FlagSaver() {
00031       // Reset formatting flags of the given output stream
00032       _oStream.flags (_streamFlags);
00033     }
00034     
00035   private:
00037     std::ostream& _oStream;
00039     std::ios::fmtflags _streamFlags;
00040   };
00041 
00042   // ////////////////////////////////////////////////////////////////////
00043   std::string BomDisplay::csvDisplay (const stdair::BomRoot& iBomRoot) {
00044     std::ostringstream oStream;
00045 
00049     oStream << std::endl;
00050     oStream << "==============================================================="
00051             << std::endl;
00052     oStream << "BomRoot: " << iBomRoot.describeKey() << std::endl;
00053     oStream << "==============================================================="
00054             << std::endl;
00055 
00056     // Check whether there are ReachableUniverse objects
00057     if (stdair::BomManager::hasList<ReachableUniverse> (iBomRoot) == false) {
00058       return oStream.str();
00059     }
00060     
00061     // Retrieve the ReachableUniverse list
00062     const ReachableUniverseList_T& lReachableUniverseList =
00063       stdair::BomManager::getList<ReachableUniverse> (iBomRoot);
00064 
00065     // Browse the networks for each departure airport
00066     for (ReachableUniverseList_T::const_iterator itReachableUniverse =
00067            lReachableUniverseList.begin();
00068          itReachableUniverse != lReachableUniverseList.end();
00069          ++itReachableUniverse) {
00070       ReachableUniverse* lReachableUniverse_ptr = *itReachableUniverse;
00071       assert (lReachableUniverse_ptr != NULL);
00072 
00073       // Display the reachable universe
00074       csvDisplay (oStream, *lReachableUniverse_ptr);
00075     }
00076 
00077     return oStream.str();
00078   }
00079 
00080   // ////////////////////////////////////////////////////////////////////
00081   void BomDisplay::csvDisplay (std::ostream& oStream,
00082                                const ReachableUniverse& iReachableUniverse) {
00083     // Save the formatting flags for the given STL output stream
00084     FlagSaver flagSaver (oStream);
00085 
00089     oStream << "+++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
00090     oStream << iReachableUniverse.toString();
00091     oStream << "+++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
00092   }
00093 
00094 }