| Return Type | Function name | Arguments |
|---|---|---|
| hzEcode | hzCron::Retard | (hzXDate&,unsigned int,) |
Declared in file: hzCron.h
Defined in file : hzCron.cpp
Function Logic:
Function body:
hzEcode hzCron::Retard (hzXDate& date, unsigned int factor)
{
_hzfunc("hzCron::Advance(hzXDate)") ;
uint32_t Y ;
uint32_t M ;
uint32_t dow ;
uint32_t alt ;
if (!m_bActive)
{
date.Clear() ;
m_error = "Interval not active" ;
return E_NOINIT ;
}
if (factor < 1)
{
m_error = "Factor must be 1 or more" ;
return E_ARGUMENT ;
}
if (!date.IsSet())
date.SysDateTime() ;
do
{
Y = date.Year() ;
M = date.Month() ;
dow = date.Dow() ;
if (m_Period == HZPERIOD_DAY) { alt = 1; date.altdate(DAY, -alt) ; }
// Mon - Sat",
else if (m_Period == HZPERIOD_MONSAT) { alt = dow==0? 2: 1; date.altdate(DAY, -alt) ; }
// Weekdays only
else if (m_Period == HZPERIOD_WEEKDAY) { alt = dow>4? dow - 4: dow ? 1: 3; date.altdate(DAY, -alt) ; }
else if (m_Period == HZPERIOD_EMON) { alt = dow>0? dow : 7; date.altdate(DAY, -alt) ; }
else if (m_Period == HZPERIOD_ETUE) { alt = dow>1? dow - 1: dow + 6; date.altdate(DAY, -alt) ; }
else if (m_Period == HZPERIOD_EWED) { alt = dow>2? dow - 2: dow + 5; date.altdate(DAY, -alt) ; }
else if (m_Period == HZPERIOD_ETHR) { alt = dow>3? dow - 3: dow + 4; date.altdate(DAY, -alt) ; }
else if (m_Period == HZPERIOD_EFRI) { alt = dow>4? dow - 4: dow + 3; date.altdate(DAY, -alt) ; }
else if (m_Period == HZPERIOD_ESAT) { alt = dow>5? dow - 5: dow + 2; date.altdate(DAY, -alt) ; }
else if (m_Period == HZPERIOD_ESUN) { alt = dow + 1; date.altdate(DAY, -alt) ; }
else if (m_Period == HZPERIOD_ALT_MON) { alt = dow>0? dow : 7; alt += 7; date.altdate(DAY, -alt) ; }
else if (m_Period == HZPERIOD_ALT_TUE) { alt = dow>1? dow - 1: dow + 6; alt += 7; date.altdate(DAY, -alt) ; }
else if (m_Period == HZPERIOD_ALT_WED) { alt = dow>2? dow - 2: dow + 5; alt += 7; date.altdate(DAY, -alt) ; }
else if (m_Period == HZPERIOD_ALT_THR) { alt = dow>3? dow - 3: dow + 4; alt += 7; date.altdate(DAY, -alt) ; }
else if (m_Period == HZPERIOD_ALT_FRI) { alt = dow>4? dow - 4: dow + 3; alt += 7; date.altdate(DAY, -alt) ; }
else if (m_Period == HZPERIOD_ALT_SAT) { alt = dow>5? dow - 5: dow + 2; alt += 7; date.altdate(DAY, -alt) ; }
else if (m_Period == HZPERIOD_ALT_SUN) { alt = dow + 1; alt += 7; date.altdate(DAY, -alt) ; }
else
{
switch (m_Period)
{
case HZPERIOD_MONTH:
M-- ; break ;
case HZPERIOD_MONTH1:
case HZPERIOD_MONTH2:
alt = M % 2; M -= alt ? alt : 2; break ;
case HZPERIOD_QTR1: case HZPERIOD_QTR2: case HZPERIOD_QTR3:
alt = M % 3; M -= alt ? alt : 3; break ;
case HZPERIOD_HYEAR1: case HZPERIOD_HYEAR2: case HZPERIOD_HYEAR3: case HZPERIOD_HYEAR4: case HZPERIOD_HYEAR5: case HZPERIOD_HYEAR6:
alt = M % 6; M -= alt ? alt : 6; break ;
case HZPERIOD_YEAR1: case HZPERIOD_YEAR2: case HZPERIOD_YEAR3: case HZPERIOD_YEAR4: case HZPERIOD_YEAR5: case HZPERIOD_YEAR6:
case HZPERIOD_YEAR7: case HZPERIOD_YEAR8: case HZPERIOD_YEAR9: case HZPERIOD_YEAR10: case HZPERIOD_YEAR11: case HZPERIOD_YEAR12:
Y-- ; break ;
}
if (M < 1)
{ Y-- ; M += 12;}
date.SetDate(Y, M, 1);
}
if (!IsHoliday(date, m_exclhols))
factor-- ;
}
while (factor) ;
return E_OK ;
}