Return TypeFunction nameArguments
unsigned intIsHoliday(hzSDate&,unsigned int,)

Declared in file: hzCron.h
Defined in file : hzCron.cpp

Function Logic:

0:START 1:!holFlags 2:holFlags hzSDate::Year hzSet::Exists 3:!hol_year.Exists(date.Year()) 4:hzSDate::Year hzSet::Insert hzSDate::Year hzSDate::SetDate hzMapM::Insert 5:test.Dow()==5 6:test 7:test.Dow()==6 8:test 9:hzMapM::Insert hzXDate::SetDateTime hzSDate::Year hzXDate::SetDate hzXDate::SetTime 10:moon<=limt; 11:moon.Dow()!=6; 12:hzSDate::Year hzXDate::Month hzXDate::Day hzSDate::SetDate test hzMapM::Insert test hzMapM::Insert test hzMapM::Insert hzSDate::Year hzSDate::SetDate 13:test.Dow()==5 14:test 15:test.Dow()==6 16:test 17:hzMapM::Insert hzSDate::Year hzSDate::SetDate 18:test.Dow(); 19:hzMapM::Insert hzSDate::Year hzSDate::SetDate 20:test.Dow(); 21:hzMapM::Insert hzSDate::Year hzSDate::SetDate hzMapM::Insert 22:test.Dow()==5 23:test 24:test.Dow()==6 25:test 26:hzMapM::Insert hzSDate::Year hzSDate::SetDate hzMapM::Insert 27:test.Dow()==5 28:test 29:test.Dow()==6 30:test 31:hzMapM::Insert 32:hzMapM::First Lo 33:Lo<0 34:Return false 35:hzMapM::Last Hi nIndex 36:nIndex<=Hi; 37:hzMapM::GetObj theday 38:Return theday

Function body:

unsigned int IsHoliday (hzSDate& date, unsigned int holFlags)
{
   _hzfunc(__func__) ;
   static  hzMapM<hzSDate,uint32_t>    hols ;
   static  hzSet<uint32_t>             hol_year ;
   hzXDate     moon ;
   hzXDate     limt ;
   hzSDate     test ;
   uint32_t    Lo ;
   uint32_t    Hi ;
   uint32_t    theday = 0;
   uint32_t    nIndex ;
   if (!holFlags)
       holFlags = HZ_PUBHOL_ALLUK ;
   if (!hol_year.Exists(date.Year()))
   {
       hol_year.Insert(date.Year()) ;
       test.SetDate(date.Year(), 1,1);
       hols.Insert(test, HZ_PUBHOL_NEWYEAR) ;
       if (test.Dow() == 5)
           test += 2;
       if (test.Dow() == 6)
           test += 1;
       hols.Insert(test, HZ_PUBHOL_LUE_NEWYEAR) ;
       moon.SetDateTime("20120109083006") ;
       limt.SetDate(date.Year(), 3,21);
       limt.SetTime(0,0,0);
       for (; moon <&eq; limt ; moon.altdate(SECOND, 2541298));
       for (; moon.Dow() != 6; moon.altdate(DAY, 1));
       test.SetDate(date.Year(), moon.Month(), moon.Day()) ;
       test -= 2; hols.Insert(test, HZ_PUBHOL_GOOD_FRIDAY) ;
       test += 2; hols.Insert(test, HZ_PUBHOL_EASTER_SUNDAY) ;
       test += 1; hols.Insert(test, HZ_PUBHOL_EASTER_MONDAY) ;
       test.SetDate(date.Year(), 5,1);
       if (test.Dow() == 5)
           test += 2;
       if (test.Dow() == 6)
           test += 1;
       hols.Insert(test, HZ_PUBHOL_MAYDAY) ;
       test.SetDate(date.Year(), 5,31);
       for (; test.Dow() ; test -= 1);
       hols.Insert(test, HZ_PUBHOL_SPRING) ;
       test.SetDate(date.Year(), 5,31);
       for (; test.Dow() ; test -= 1);
       hols.Insert(test, HZ_PUBHOL_SUMMER) ;
       test.SetDate(date.Year(), 12,25);
       hols.Insert(test, HZ_PUBHOL_XMAS) ;
       if (test.Dow() == 5)
           test += 2;
       if (test.Dow() == 6)
           test += 1;
       hols.Insert(test, HZ_PUBHOL_LUE_XMAS) ;
       test.SetDate(date.Year(), 12,26);
       hols.Insert(test, HZ_PUBHOL_BOXING) ;
       if (test.Dow() == 5)
           test += 2;
       if (test.Dow() == 6)
           test += 1;
       hols.Insert(test, HZ_PUBHOL_LUE_BOXING) ;
   }
   Lo = hols.First(date) ;
   if (Lo < 0)
       return false ;
   Hi = hols.Last(date) ;
   for (nIndex = Lo ; nIndex <&eq; Hi ; nIndex++)
       theday |= hols.GetObj(nIndex) ;
   return theday ;
}