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 }