/
#include <cassert>
#include <ostream>
  struct FlagSaver {
  public:
    FlagSaver (std::ostream& oStream)
      : _oStream (oStream), _streamFlags (oStream.flags()) {
    }
    ~FlagSaver() {
      
      _oStream.flags (_streamFlags);
    }
    
  private:
    std::ostream& _oStream;
    std::ios::fmtflags _streamFlags;
  };
  
    
    FlagSaver flagSaver (oStream);
    
    if (BomManager::hasList<Inventory> (iBomRoot) == false) {
      return;
    }
    
    
    unsigned short invIdx = 1;
      BomManager::getList<Inventory> (iBomRoot);
    for (InventoryList_T::const_iterator itInv = lInventoryList.begin();
         itInv != lInventoryList.end(); ++itInv, ++invIdx) {
      const Inventory* lInv_ptr = *itInv;
      assert (lInv_ptr != NULL);
      
      
      if (iAirlineCode == "all" || iAirlineCode == lAirlineCode) {
        
        list (oStream, *lInv_ptr, invIdx, iFlightNumber);
 
      }
    }
  }
  
                         const unsigned short iInventoryIndex,
    
    FlagSaver flagSaver (oStream);
    
    if (BomManager::hasMap<FlightDate> (iInventory) == false) {
      return;
    }
    
    
    oStream << iInventoryIndex << ". " << lAirlineCode << std::endl;
    
    unsigned short lCurrentFlightNumber = 0;
    unsigned short flightNumberIdx = 0;
    unsigned short departureDateIdx = 1;
      BomManager::getMap<FlightDate> (iInventory);
    for (FlightDateMap_T::const_iterator itFD = lFlightDateList.begin();
         itFD != lFlightDateList.end(); ++itFD, ++departureDateIdx) {
      const FlightDate* lFD_ptr = itFD->second;
      assert (lFD_ptr != NULL);
      
      
      const Date_T& lFlightDateDate = lFD_ptr->getDepartureDate();
 
      
      if (iFlightNumber == 0 || iFlightNumber == lFlightNumber) {
        
        if (lCurrentFlightNumber != lFlightNumber) {
          lCurrentFlightNumber = lFlightNumber;
          ++flightNumberIdx; departureDateIdx = 1;
          oStream << "  " << iInventoryIndex << "." << flightNumberIdx << ". "
                  << lAirlineCode << lFlightNumber << std::endl;
        }
      
        oStream << "    " << iInventoryIndex << "." << flightNumberIdx
                << "." << departureDateIdx << ". "
                << lAirlineCode << lFlightNumber << " / " << lFlightDateDate
                << std::endl;
      }
    }   
  }
  
                                             const BomRoot& iBomRoot) {
    
    FlagSaver flagSaver (oStream);
    
    if (BomManager::hasList<AirportPair> (iBomRoot) == false) {
      return;
    }
      BomManager::getList<AirportPair> (iBomRoot);
    for (AirportPairList_T::const_iterator itAir = lAirportPairList.begin();
         itAir != lAirportPairList.end(); ++itAir ) {
      const AirportPair* lAir_ptr = *itAir;      
      assert (lAir_ptr != NULL);
      
      assert (BomManager::hasList<DatePeriod> (*lAir_ptr) == true);
      
        BomManager::getList<DatePeriod> (*lAir_ptr);
      
      for (DatePeriodList_T::const_iterator itDP = lDatePeriodList.begin();
           itDP != lDatePeriodList.end(); ++itDP) {
        const DatePeriod* lDP_ptr = *itDP;
        assert (lDP_ptr != NULL);
      
        
        oStream << lAir_ptr->describeKey()
                <<" / " << lDP_ptr->describeKey() << std::endl;
      }  
    }   
  }
  
  
                               const BomRoot& iBomRoot) {
    
    FlagSaver flagSaver (oStream);
    oStream << std::endl;
    oStream << "==============================================================="
            << std::endl;
    oStream << "BomRoot: " << iBomRoot.describeKey() << std::endl;
    oStream << "==============================================================="
            << std::endl;
    
    if (BomManager::hasList<Inventory> (iBomRoot) == false) {
      return;
    }
    
    
      BomManager::getList<Inventory> (iBomRoot);
    for (InventoryList_T::const_iterator itInv = lInventoryList.begin();
         itInv != lInventoryList.end(); ++itInv) {
      const Inventory* lInv_ptr = *itInv;
      assert (lInv_ptr != NULL);
      
    }
  }
  
                               const Inventory& iInventory) {
    
    FlagSaver flagSaver (oStream);
    oStream << "+++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
    oStream << "Inventory: " << iInventory.describeKey() << std::endl;
    oStream << "+++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
    
    if (BomManager::hasList<FlightDate> (iInventory) == false) {
      return;
    }
    
    
      BomManager::getList<FlightDate> (iInventory);
    for (FlightDateList_T::const_iterator itFD = lFlightDateList.begin();
         itFD != lFlightDateList.end(); ++itFD) {
      const FlightDate* lFD_ptr = *itFD;
      assert (lFD_ptr != NULL);
      
      
    }
    
    if (BomManager::hasList<Inventory> (iInventory)){
    
      
        BomManager::getList<Inventory> (iInventory);
      
      for (InventoryList_T::const_iterator itInv = lPartnerInventoryList.begin();
           itInv != lPartnerInventoryList.end(); ++itInv) {           
      
        oStream << "-------------------------------------------------" << std::endl;
        oStream << "Partner inventory:" << std::endl;
        oStream << "-------------------------------------------------" << std::endl;
        const Inventory* lInv_ptr = *itInv;
        assert (lInv_ptr != NULL);
      
        
      }
      oStream << "******************************************" << std::endl;
      oStream << std::endl;
    }
    
    if (BomManager::hasList<OnDDate> (iInventory)){
      
        BomManager::getList<OnDDate> (iInventory);
      for (OnDDateList_T::const_iterator itOnD = lOnDDateList.begin();
           itOnD != lOnDDateList.end(); ++itOnD) {
        oStream << "******************************************" << std::endl;
        oStream << "O&D-Date:" << std::endl;
        oStream << "----------" << std::endl;
        oStream << "Airline, Date, Origin-Destination, Segments, " << std::endl;
       
        const OnDDate* lOnDDate_ptr = *itOnD;
        assert (lOnDDate_ptr != NULL);
        
      }
      oStream << "******************************************" << std::endl;
    }
  }
  
                               const OnDDate& iOnDDate) {
    
    FlagSaver flagSaver (oStream);
    const Date_T& lDate = iOnDDate.getDate();
 
    
    oStream << lAirlineCode <<", " << lDate << ", "<< lOrigin << "-"
            << lDestination << ", " << iOnDDate.describeKey() << ", "
            << std::endl;
        
      iOnDDate.getDemandInfoMap();
    
    const bool isInfoMapEmpty = lDemandInfoMap.empty();
    if (isInfoMapEmpty) {
      return;
    }
    assert (lDemandInfoMap.empty() ==false);
    
    oStream << "----------" << std::endl;        
    oStream << "Cabin-Class path, Demand mean, Demand std dev, Yield, "
            << std::endl;
    
    for (StringDemandStructMap_T::const_iterator itDI = lDemandInfoMap.begin();
         itDI != lDemandInfoMap.end(); ++itDI) {
      
      const std::string& lCabinClassPath = itDI->first;
        itDI->second;
      const Yield_T lYield = lYieldDemandPair.first;
 
        lYieldDemandPair.second;
      oStream << lCabinClassPath << ", "
              << lDemandMean << ", "
              << lDemandStdDev << ", "
              << lYield << ", "
              << std::endl;
    }
     
  }
    
  
                               const FlightDate& iFlightDate) {
    
    FlagSaver flagSaver (oStream);
    const AirlineCode_T& lAirlineCode = iFlightDate.getAirlineCode();
 
    oStream << "******************************************" << std::endl;
    oStream << "FlightDate: " << lAirlineCode << iFlightDate.describeKey()
            << std::endl;
    oStream << "******************************************" << std::endl;
    
    
    
    
    
    
  }
    
  
                                      const FlightDate& iFlightDate) {
    
    FlagSaver flagSaver (oStream);
    oStream << "******************************************" << std::endl;
    oStream << "Leg-Dates:" << std::endl
            << "----------" << std::endl;
    oStream << "Flight, Leg, BoardDate, BoardTime, "
            << "OffDate, OffTime, Date Offset, Time Offset, Elapsed, "
            << "Distance, Capacity, " << std::endl;
    
    const AirlineCode_T& lAirlineCode = iFlightDate.getAirlineCode();
 
    const Date_T& lFlightDateDate = iFlightDate.getDepartureDate();
 
    
    if (BomManager::hasList<LegDate> (iFlightDate) == false) {
      return;
    }
    
    
      BomManager::getList<LegDate> (iFlightDate);
    for (LegDateList_T::const_iterator itLD = lLegDateList.begin();
         itLD != lLegDateList.end(); ++itLD) {
      const LegDate* lLD_ptr = *itLD;
      assert (lLD_ptr != NULL);
      
      oStream << lAirlineCode << lFlightNumber << " "
              << lFlightDateDate << ", ";
      oStream << lLD_ptr->getBoardingPoint() << "-"
              << lLD_ptr->getOffPoint() << ", "
              << lLD_ptr->getBoardingDate() << ", "
              << lLD_ptr->getBoardingTime() << ", "
              << lLD_ptr->getOffDate() << ", "
              << lLD_ptr->getOffTime() << ", "
              << lLD_ptr->getElapsedTime() << ", "
              << lLD_ptr->getDateOffset().days() << ", "
              << lLD_ptr->getTimeOffset() << ", "
              << lLD_ptr->getDistance() << ", "
              << lLD_ptr->getCapacity() << ", " << std::endl;
    }
    oStream << "******************************************" << std::endl;
  }
    
  
                                          const FlightDate& iFlightDate) {
    
    FlagSaver flagSaver (oStream);
    oStream << "******************************************" << std::endl;
    oStream << "SegmentDates:" << std::endl
            << "----------" << std::endl;
    oStream << "Flight, Segment, Date"
            << std::endl;
    
    const AirlineCode_T& lAirlineCode = iFlightDate.getAirlineCode();
 
    const Date_T& lFlightDateDate = iFlightDate.getDepartureDate();
 
    
    if (BomManager::hasList<SegmentDate> (iFlightDate) == false) {
      return;
    }
    
    
      BomManager::getList<SegmentDate> (iFlightDate);
    for (SegmentDateList_T::const_iterator itSD = lSegmentDateList.begin();
         itSD != lSegmentDateList.end(); ++itSD) {
      const SegmentDate* lSD_ptr = *itSD;
      assert (lSD_ptr != NULL);
      
      
      const Date_T& lSegmentDateDate = lSD_ptr->getBoardingDate();
 
      oStream << lAirlineCode << lFlightNumber << " " << lFlightDateDate << ", "
              << lBoardPoint << "-" << lOffPoint << ", " << lSegmentDateDate << std::endl;
      
      const bool hasMarketingSDList = BomManager::hasList<SegmentDate>(*lSD_ptr);
      if (hasMarketingSDList == true) {
        
        const SegmentDateList_T& lMarketingSDList = BomManager::getList<SegmentDate>(*lSD_ptr);
 
          
        oStream << " *** Marketed by ";
        for (SegmentDateList_T::const_iterator itMarketingSD = lMarketingSDList.begin();
             itMarketingSD != lMarketingSDList.end(); ++itMarketingSD) {
          SegmentDate* lMarketingSD_ptr = *itMarketingSD;
          FlightDate* lMarketingFD_ptr = BomManager::getParentPtr<FlightDate>(*lMarketingSD_ptr);
          Inventory* lMarketingInv_ptr = BomManager::getParentPtr<Inventory>(*lMarketingFD_ptr);
          oStream << lMarketingInv_ptr->toString() << lMarketingFD_ptr->toString() <<" * ";
        }
      }
      
      const SegmentDate* lOperatingSD_ptr = lSD_ptr->getOperatingSegmentDate ();
      if (lOperatingSD_ptr != NULL) {
        const FlightDate* lOperatingFD_ptr = BomManager::getParentPtr<FlightDate>(*lOperatingSD_ptr);
        const Inventory* lOperatingInv_ptr = BomManager::getParentPtr<Inventory>(*lOperatingFD_ptr);
        oStream << " *** Operated by " << lOperatingInv_ptr->toString()
                << lOperatingFD_ptr->toString() << std::endl;
      }
      
      oStream << std::endl;
    }
  }
  
                                       const FlightDate& iFlightDate) {
    
    FlagSaver flagSaver (oStream);
    oStream << "******************************************" << std::endl;
    oStream << "LegCabins:" << std::endl
            << "----------" << std::endl;
    oStream << "Flight, Leg, Cabin, "
            << "OffedCAP, PhyCAP, RgdADJ, AU, UPR, SS, Staff, WL, Group, "
            << "CommSpace, AvPool, Avl, NAV, GAV, ACP, ETB, BidPrice, "
            << std::endl;
    
    
    const AirlineCode_T& lAirlineCode = iFlightDate.getAirlineCode();
 
    const Date_T& lFlightDateDate = iFlightDate.getDepartureDate();
 
    
    
    if (BomManager::hasList<LegDate> (iFlightDate) == false) {
      return;
    }
    
    
      BomManager::getList<LegDate> (iFlightDate);
    for (LegDateList_T::const_iterator itLD = lLegDateList.begin();
         itLD != lLegDateList.end(); ++itLD) {
      const LegDate* lLD_ptr = *itLD;
      assert (lLD_ptr != NULL);
      
      const Date_T& lLegDateDate = lLD_ptr->getBoardingDate();
 
      
        BomManager::getList<LegCabin> (*lLD_ptr);
      for (LegCabinList_T::const_iterator itLC = lLegCabinList.begin();
           itLC != lLegCabinList.end(); ++itLC) {
        const LegCabin* lLC_ptr = *itLC;
        assert (lLC_ptr != NULL);
      
        oStream << lAirlineCode << lFlightNumber << " "
                << lFlightDateDate << ", ";
        oStream << lBoardPoint << "-" << lOffPoint
                << " " << lLegDateDate << ", ";
        oStream << lLC_ptr->getCabinCode() << ", ";
        oStream << lLC_ptr->getOfferedCapacity() << ", "
                << lLC_ptr->getPhysicalCapacity() << ", "
                << lLC_ptr->getRegradeAdjustment() << ", "
                << lLC_ptr->getAuthorizationLevel() << ", "
                << lLC_ptr->getUPR() << ", "
                << lLC_ptr->getSoldSeat() << ", "
                << lLC_ptr->getStaffNbOfSeats() << ", "
                << lLC_ptr->getWLNbOfSeats() << ", "
                << lLC_ptr->getGroupNbOfSeats() << ", "
                << lLC_ptr->getCommittedSpace() << ", "
                << lLC_ptr->getAvailabilityPool() << ", "
                << lLC_ptr->getAvailability() << ", "
                << lLC_ptr->getNetAvailability() << ", "
                << lLC_ptr->getGrossAvailability() << ", "
                << lLC_ptr->getAvgCancellationPercentage() << ", "
                << lLC_ptr->getETB() << ", "
                << lLC_ptr->getCurrentBidPrice() << ", "
                << std::endl;
      }
    }
    oStream << "******************************************" << std::endl;
  }
    
  
                                           const FlightDate& iFlightDate) {
    
    FlagSaver flagSaver (oStream);
  }
  
                                         const FlightDate& iFlightDate) {
    
    FlagSaver flagSaver (oStream);
    oStream << "******************************************" << std::endl;
    oStream << "SegmentCabins:" << std::endl
            << "--------------" << std::endl;
    oStream << "Flight, Segment, Cabin, FF, Bkgs, MIN, UPR, "
            << "CommSpace, AvPool, BP, " << std::endl;
    
    
    const AirlineCode_T& lAirlineCode = iFlightDate.getAirlineCode();
 
    const Date_T& lFlightDateDate = iFlightDate.getDepartureDate();
 
    
    if (BomManager::hasList<SegmentDate> (iFlightDate) == false) {
      return;
    }
    
    
      BomManager::getList<SegmentDate> (iFlightDate);
    for (SegmentDateList_T::const_iterator itSD = lSegmentDateList.begin();
         itSD != lSegmentDateList.end(); ++itSD) {
      const SegmentDate* lSD_ptr = *itSD;
      assert (lSD_ptr != NULL);
      
      
      const Date_T& lSegmentDateDate = lSD_ptr->getBoardingDate();
 
      
      
        BomManager::getList<SegmentCabin> (*lSD_ptr);
      for (SegmentCabinList_T::const_iterator itSC = lSegmentCabinList.begin();
           itSC != lSegmentCabinList.end(); ++itSC) {
        const SegmentCabin* lSC_ptr = *itSC;
        assert (lSC_ptr != NULL);
        
        
        const CabinCode_T& lCabinCode = lSC_ptr->getCabinCode();
 
        
        if (BomManager::hasList<FareFamily> (*lSC_ptr) == false) {
          continue;
        }
    
        
          BomManager::getList<FareFamily> (*lSC_ptr);
        for (FareFamilyList_T::const_iterator itFF = lFareFamilyList.begin();
             itFF != lFareFamilyList.end(); ++itFF) {
          const FareFamily* lFF_ptr = *itFF;
          assert (lFF_ptr != NULL);
          oStream << lAirlineCode << lFlightNumber << " "
                  << lFlightDateDate << ", ";
          oStream << lBoardPoint << "-" << lOffPoint << " "
                  << lSegmentDateDate << ", ";
          oStream << lCabinCode << ", " << lFF_ptr->getFamilyCode() << ", ";
          oStream << lSC_ptr->getBookingCounter() << ", "
                  << lSC_ptr->getMIN() << ", "
                  << lSC_ptr->getUPR() << ", "
                  << lSC_ptr->getCommittedSpace() << ", "
                  << lSC_ptr->getAvailabilityPool() << ", "
                  << lSC_ptr->getCurrentBidPrice() << ", "
                  << std::endl;
        }
      }
    }
    oStream << "******************************************" << std::endl;
  }
  
                                     const FlightDate& iFlightDate) {
    
    FlagSaver flagSaver (oStream);
    oStream << "******************************************" << std::endl;
    oStream << "Buckets:" << std::endl
            << "--------" << std::endl;
    oStream << "Flight, Leg, Cabin, Yield, AU/SI, SS, AV, "
            << std::endl;
    
    const AirlineCode_T& lAirlineCode = iFlightDate.getAirlineCode();
 
    const Date_T& lFlightDateDate = iFlightDate.getDepartureDate();
 
    
    if (BomManager::hasList<LegDate> (iFlightDate) == false) {
      return;
    }
    
    
      BomManager::getList<LegDate> (iFlightDate);
    for (LegDateList_T::const_iterator itLD = lLegDateList.begin();
         itLD != lLegDateList.end(); ++itLD) {
      const LegDate* lLD_ptr = *itLD;
      assert (lLD_ptr != NULL);
      
      
      const Date_T& lLegDateDate = lLD_ptr->getBoardingDate();
 
      
        BomManager::getList<LegCabin> (*lLD_ptr);
      for (LegCabinList_T::const_iterator itLC = lLegCabinList.begin();
           itLC != lLegCabinList.end(); ++itLC) {
        const LegCabin* lLC_ptr = *itLC;
        assert (lLC_ptr != NULL);
        
        if (BomManager::hasList<Bucket> (*lLC_ptr) == false) {
          continue;
        }
        
        const CabinCode_T& lCabinCode = lLC_ptr->getCabinCode();      
 
        
        const BucketList_T& lBucketList = BomManager::getList<Bucket> (*lLC_ptr);
 
        for (BucketList_T::const_iterator itBuck = lBucketList.begin();
             itBuck != lBucketList.end(); ++itBuck) {
          const Bucket* lBucket_ptr = *itBuck;
          assert (lBucket_ptr != NULL);
          oStream << lAirlineCode << lFlightNumber << " "
                  << lFlightDateDate << ", ";
          oStream << lBoardPoint << "-" << lOffPoint << " "
                  << lLegDateDate << ", " << lCabinCode << ", ";
          oStream << lBucket_ptr->getYieldRangeUpperValue() << ", "
                  << lBucket_ptr->getSeatIndex() << ", "
                  << lBucket_ptr->getSoldSeats() << ", "
                  << lBucket_ptr->getAvailability() << ", ";
          oStream << std::endl;
        }
      }
    }
    oStream << "******************************************" << std::endl;
  }
    
  
                                           const BookingClass& iBookingClass,
                                           const std::string& iLeadingString) {
    
    FlagSaver flagSaver (oStream);
    oStream << iLeadingString << iBookingClass.getClassCode();
    if (iBookingClass.getSubclassCode() == 0) {
      oStream << ", ";
    } else {
      oStream << iBookingClass.getSubclassCode() << ", ";
    }
    oStream << iBookingClass.getAuthorizationLevel() << " ("
            << iBookingClass.getProtection() << "), "
            << iBookingClass.getNegotiatedSpace() << ", "
            << iBookingClass.getNoShowPercentage() << ", "
            << iBookingClass.getCancellationPercentage() << ", "
            << iBookingClass.getNbOfBookings() << ", "
            << iBookingClass.getNbOfGroupBookings() << " ("
            << iBookingClass.getNbOfPendingGroupBookings() << "), "
            << iBookingClass.getNbOfStaffBookings() << ", "
            << iBookingClass.getNbOfWLBookings() << ", "
            << iBookingClass.getETB() << ", "
            << iBookingClass.getNetClassAvailability() << ", "
            << iBookingClass.getNetRevenueAvailability() << ", "
            << iBookingClass.getSegmentAvailability() << ", "
            << std::endl;
  }
  
                                           const FlightDate& iFlightDate) {
    
    FlagSaver flagSaver (oStream);
    
    oStream << "******************************************" << std::endl;
    oStream << "Subclasses:" << std::endl
            << "-----------" << std::endl;
    oStream << "Flight, Segment, Cabin, FF, Subclass, MIN/AU (Prot), "
            << "Nego, NS%, OB%, "
            << "Bkgs, GrpBks (pdg), StfBkgs, WLBkgs, ETB, "
            << "ClassAvl, RevAvl, SegAvl, "
            << std::endl;
    
    const AirlineCode_T& lAirlineCode = iFlightDate.getAirlineCode();
 
    const Date_T& lFlightDateDate = iFlightDate.getDepartureDate();
 
    
    
    if (BomManager::hasList<SegmentDate> (iFlightDate) == false) {
      return;
    }
    
    
      BomManager::getList<SegmentDate> (iFlightDate);
    for (SegmentDateList_T::const_iterator itSD = lSegmentDateList.begin();
         itSD != lSegmentDateList.end(); ++itSD) {
      const SegmentDate* lSD_ptr = *itSD;
      assert (lSD_ptr != NULL);
      
      
      const Date_T& lSegmentDateDate = lSD_ptr->getBoardingDate();
 
      
      
        BomManager::getList<SegmentCabin> (*lSD_ptr);
      for (SegmentCabinList_T::const_iterator itSC = lSegmentCabinList.begin();
           itSC != lSegmentCabinList.end(); ++itSC) {
        const SegmentCabin* lSC_ptr = *itSC;
        assert (lSC_ptr != NULL);
        
        
        const CabinCode_T& lCabinCode = lSC_ptr->getCabinCode();
 
        
        
        std::ostringstream oSCLeadingStr;
        oSCLeadingStr << lAirlineCode << lFlightNumber << " "
                      << lFlightDateDate << ", "
                      << lBoardPoint << "-" << lOffPoint << " "
                      << lSegmentDateDate << ", "
                      << lCabinCode << ", ";
        
        
        if (BomManager::hasList<FareFamily> (*lSC_ptr) == true) {
          
            BomManager::getList<FareFamily> (*lSC_ptr);
          for (FareFamilyList_T::const_iterator itFF = lFareFamilyList.begin();
               itFF != lFareFamilyList.end(); ++itFF) {
            const FareFamily* lFF_ptr = *itFF;
            assert (lFF_ptr != NULL);
            
            lFamilyCode = lFF_ptr->getFamilyCode();
            
            std::ostringstream oFFLeadingStr;
            oFFLeadingStr << oSCLeadingStr.str() << lFamilyCode << ", ";
            
              BomManager::getList<BookingClass> (*lFF_ptr);
            for (BookingClassList_T::const_iterator itBC =
                   lBookingClassList.begin();
                 itBC != lBookingClassList.end(); ++itBC) {
              const BookingClass* lBC_ptr = *itBC;
              assert (lBC_ptr != NULL);
              
            }
          }
          
          continue;
        }
        assert (BomManager::hasList<FareFamily> (*lSC_ptr) == false);
        
        
        std::ostringstream oFFLeadingStr;
        oFFLeadingStr << oSCLeadingStr.str() << lFamilyCode << ", ";
        
          BomManager::getList<BookingClass> (*lSC_ptr);
        for (BookingClassList_T::const_iterator itBC =
               lBookingClassList.begin();
             itBC != lBookingClassList.end(); ++itBC) {
          const BookingClass* lBC_ptr = *itBC;
          assert (lBC_ptr != NULL);
          
        }
      }
    }
    oStream << "******************************************" << std::endl;
  }
  
    
    FlagSaver flagSaver (oStream);
    oStream << "Travel solutions:";
    unsigned short idx = 0;
    for (TravelSolutionList_T::const_iterator itTS =
           iTravelSolutionList.begin();
         itTS != iTravelSolutionList.end(); ++itTS, ++idx) {
      const TravelSolutionStruct& lTS = *itTS;
      oStream << std::endl;
      oStream << "    [" << idx << "] " << lTS.display();
    }
  }
  
    
    FlagSaver flagSaver (oStream);
    
    for (DatePeriodList_T::const_iterator itDP = iDatePeriodList.begin();
         itDP != iDatePeriodList.end(); ++itDP) {
      const DatePeriod* lDP_ptr = *itDP;
      assert (lDP_ptr != NULL);
      
      
    }   
  }
  
                                           const BomRoot& iBomRoot) {
    
    FlagSaver flagSaver (oStream);
    oStream << std::endl;
    oStream << "==============================================================="
            << std::endl;
    oStream << "BomRoot: " << iBomRoot.describeKey() << std::endl;
    oStream << "==============================================================="
            << std::endl;
    
    if (BomManager::hasList<AirportPair> (iBomRoot) == false) {
      return;
    }
    
    
      BomManager::getList<AirportPair> (iBomRoot);
    for (AirportPairList_T::const_iterator itAir = lAirportPairList.begin();
         itAir != lAirportPairList.end(); ++itAir ) {
      const AirportPair* lAir_ptr = *itAir;
      assert (lAir_ptr != NULL);
      
    }
  }
  
                                          const AirportPair& iAirportPair) {
    
    FlagSaver flagSaver (oStream);
    oStream << "+++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
    oStream << "AirportPair: " << iAirportPair.describeKey() << std::endl;
    oStream << "+++++++++++++++++++++++++++++++++++++++++++++++++" << std::endl;
    
    
    if (BomManager::hasList<DatePeriod> (iAirportPair) == false) {
      return;
    }
    
      BomManager::getList<DatePeriod> (iAirportPair);
    for (DatePeriodList_T::const_iterator itDP = lDatePeriodList.begin();
         itDP != lDatePeriodList.end(); ++itDP) {
      const DatePeriod* lDP_ptr = *itDP;
      assert (lDP_ptr != NULL);
      
      
    }   
  }
  
                                   const DatePeriod& iDatePeriod) {
    
    FlagSaver flagSaver (oStream);
    oStream << "------------------------------------------" << std::endl;
    oStream << "DatePeriod: " << iDatePeriod.describeKey() << std::endl;
    oStream << "------------------------------------------" << std::endl;
    
    if (BomManager::hasList<PosChannel> (iDatePeriod) == false) {
      return;
    }
    
      BomManager::getList<PosChannel> (iDatePeriod);
    for (PosChannelList_T::const_iterator itPC = lPosChannelList.begin();
         itPC != lPosChannelList.end(); ++itPC) {
      const PosChannel* lPC_ptr = *itPC;
      assert (lPC_ptr != NULL);
      
      
    }   
  }
  
  
                                         const PosChannel& iPosChannel) {
    
    FlagSaver flagSaver (oStream);
    oStream << "******************************************" << std::endl;
    oStream << "PosChannel: " << iPosChannel.describeKey() << std::endl;
    oStream << "******************************************" << std::endl;
    
    if (BomManager::hasList<TimePeriod> (iPosChannel) == false) {
      return;
    }
    
      BomManager::getList<TimePeriod> (iPosChannel);
    for (TimePeriodList_T::const_iterator itTP = lTimePeriodList.begin();
         itTP != lTimePeriodList.end(); ++itTP) {
      const TimePeriod* lTP_ptr = *itTP;
      assert (lTP_ptr != NULL);
      
      
    }
  }
  
  
                                   const TimePeriod& iTimePeriod) {
    
    FlagSaver flagSaver (oStream);
    oStream << "----------------------------------------" << std::endl;
    oStream << "TimePeriod: " << iTimePeriod.describeKey() << std::endl;
    oStream << "----------------------------------------" << std::endl;
    
    
    
    csvFeatureListDisplay<FareFeatures> (oStream, iTimePeriod);
    csvFeatureListDisplay<YieldFeatures> (oStream, iTimePeriod);
  }
  
  template <typename FEATURE_TYPE>
                                          const TimePeriod& iTimePeriod) {
    
    if (BomManager::hasList<FEATURE_TYPE> (iTimePeriod) == false) {
      return;
    }
    
    typedef typename BomHolder<FEATURE_TYPE>::BomList_T FeaturesList_T;
    const FeaturesList_T& lFeaturesList =
      BomManager::getList<FEATURE_TYPE> (iTimePeriod);
    for (typename FeaturesList_T::const_iterator itFF = lFeaturesList.begin();
         itFF != lFeaturesList.end(); ++itFF) {
      const FEATURE_TYPE* lFF_ptr = *itFF;
      assert (lFF_ptr != NULL);
      
    }
  }
  
  
  template <typename FEATURE_TYPE>
                                       const FEATURE_TYPE& iFeatures) {
    
    FlagSaver flagSaver (oStream);
    oStream << "--------------------------------------" << std::endl;
    oStream << "Fare/yield-Features: " << iFeatures.describeKey() << std::endl;
    oStream << "--------------------------------------" << std::endl;
   
    
    if (BomManager::hasList<AirlineClassList> (iFeatures) == false) {
      return;
    }
    
    
      BomManager::getList<AirlineClassList> (iFeatures);
    for (AirlineClassListList_T::const_iterator itACL =
           lAirlineClassListList.begin();
         itACL != lAirlineClassListList.end(); ++itACL) {
      const AirlineClassList* lACL_ptr = *itACL;
      assert (lACL_ptr != NULL);
      
    }
  }
  
                           const AirlineClassList& iAirlineClassList) {
    
    FlagSaver flagSaver (oStream);
    oStream << "------------------------------------" << std::endl;
    oStream << "AirlineClassList: "
            << iAirlineClassList.describeKey() << std::endl;
    oStream << "------------------------------------" << std::endl;
  }
    
}