StdAir Logo  0.44.0
C++ Standard Airline IT Object Library
PeriodStruct.cpp
Go to the documentation of this file.
00001 // //////////////////////////////////////////////////////////////////////
00002 // Import section
00003 // //////////////////////////////////////////////////////////////////////
00004 // STL
00005 #include <sstream>
00006 #include <cassert>
00007 // StdAir
00008 #include <stdair/basic/BasConst_Period_BOM.hpp>
00009 #include <stdair/bom/PeriodStruct.hpp>
00010 
00011 namespace stdair {
00012   
00013   // ////////////////////////////////////////////////////////////////////
00014   PeriodStruct::PeriodStruct ()
00015     : _dateRange (BOOST_DEFAULT_DATE_PERIOD), _dow () {
00016   }
00017   
00018   // ////////////////////////////////////////////////////////////////////
00019   PeriodStruct::PeriodStruct (const DatePeriod_T& iDateRange,
00020                               const DoWStruct& iDoW)
00021     : _dateRange (iDateRange), _dow (iDoW) {
00022   }
00023 
00024   // ////////////////////////////////////////////////////////////////////
00025   PeriodStruct::PeriodStruct (const PeriodStruct& iPeriodStruct)
00026     : _dateRange (iPeriodStruct._dateRange), _dow (iPeriodStruct._dow) {
00027       
00028   }
00029     
00030   // ////////////////////////////////////////////////////////////////////
00031   const std::string PeriodStruct::describeShort() const {
00032     std::ostringstream ostr;
00033     ostr << _dateRange << ", " << _dow.describeShort ();
00034     return ostr.str();
00035   }
00036 
00037   // ////////////////////////////////////////////////////////////////////
00038   const std::string PeriodStruct::describe() const {
00039     std::ostringstream ostr;
00040     ostr << _dateRange << ", " << _dow.describe ();
00041     return ostr.str();
00042   }
00043 
00044   // ////////////////////////////////////////////////////////////////////
00045   PeriodStruct PeriodStruct::
00046   addDateOffset (const DateOffset_T& iDateOffset) const {
00047     // Create a new date range by shifting the date range of this object with
00048     // iDateOffset.
00049     DatePeriod_T lNewDateRange = getDateRange();
00050     lNewDateRange.shift (iDateOffset);
00051 
00052     // Create a new DoWStruct by shifting the DoWStruct of this object with
00053     // iDateOffset.
00054     const long lNbOfDaysOffset = iDateOffset.days();
00055     const DoWStruct& lDoW = getDoW();
00056     const DoWStruct lNewDoW = lDoW.shift (lNbOfDaysOffset);
00057 
00058     return PeriodStruct (lNewDateRange, lNewDoW);
00059   }
00060 
00061   // ////////////////////////////////////////////////////////////////////
00062   PeriodStruct PeriodStruct::
00063   intersection (const PeriodStruct& iPeriodStruct) const {
00064     const DatePeriod_T lNewDateRange =
00065       _dateRange.intersection (iPeriodStruct._dateRange);
00066     const DoWStruct lNewDoW = _dow.intersection (iPeriodStruct._dow);
00067     
00068     return PeriodStruct (lNewDateRange, lNewDoW);
00069   }
00070 
00071   // ////////////////////////////////////////////////////////////////////
00072   const bool PeriodStruct::isValid () const {
00073     if (_dateRange.is_null() == false && _dow.isValid()) {
00074       return true;
00075     }
00076     return false;
00077   }
00078   
00079 }