[115] | 1 | #ifndef __XMLIO_CALENDAR__ |
---|
| 2 | #define __XMLIO_CALENDAR__ |
---|
| 3 | |
---|
| 4 | namespace XMLIOSERVER |
---|
| 5 | { |
---|
| 6 | class JulianCalendar : public AbstractCalendar |
---|
| 7 | { |
---|
| 8 | public : |
---|
[127] | 9 | |
---|
[115] | 10 | JulianCalendar() : AbstractCalendar("Julian") |
---|
| 11 | {/* Ne rien faire de plus */} |
---|
[120] | 12 | JulianCalendar(const string& _dateStr) : AbstractCalendar("Julian", _dateStr) |
---|
[119] | 13 | {/* Ne rien faire de plus */} |
---|
[115] | 14 | |
---|
[127] | 15 | public : /* virtual */ |
---|
| 16 | |
---|
[120] | 17 | virtual int getYearTotalLength(const Date& _d) const |
---|
[117] | 18 | { // Retourne la durée d'une année en seconde. |
---|
[120] | 19 | if (_d.getYear()%4 == 0) return (366 * 86400); |
---|
[116] | 20 | return (365 * 86400); |
---|
| 21 | } |
---|
| 22 | |
---|
[120] | 23 | virtual int getMonthLength(const Date& _d) const |
---|
[117] | 24 | { // Retourne la durée du mois en jour. |
---|
[120] | 25 | if (_d.getMonth() == 2) |
---|
| 26 | { if (_d.getYear()%4 == 0) return 29; return 28; } |
---|
| 27 | return (AbstractCalendar::getMonthLength(_d)); |
---|
[115] | 28 | } |
---|
| 29 | |
---|
[130] | 30 | virtual string getType(void) const { return (string("julian")); } |
---|
| 31 | |
---|
[115] | 32 | virtual ~JulianCalendar() |
---|
| 33 | {/* Ne rien faire de plus */} |
---|
| 34 | |
---|
| 35 | }; // class JulianCalendar |
---|
| 36 | |
---|
| 37 | class GregorianCalendar : public AbstractCalendar |
---|
| 38 | { |
---|
| 39 | public : |
---|
[127] | 40 | |
---|
[115] | 41 | GregorianCalendar() : AbstractCalendar("Gregorian") |
---|
| 42 | {/* Ne rien faire de plus */} |
---|
[119] | 43 | GregorianCalendar(const string& dateStr) : AbstractCalendar("Gregorian", dateStr) |
---|
| 44 | {/* Ne rien faire de plus */} |
---|
[115] | 45 | |
---|
[127] | 46 | public : /* virtual */ |
---|
| 47 | |
---|
[116] | 48 | virtual int getYearTotalLength(const Date& d) const |
---|
[117] | 49 | { // Retourne la durée d'une année en seconde. |
---|
[116] | 50 | if ((d.getYear() % 4 == 0) && (d.getYear() % 100 != 0 || d.getYear() % 400 == 0)) return (366 * 86400); |
---|
| 51 | return (365 * 86400); |
---|
| 52 | } |
---|
| 53 | |
---|
[115] | 54 | virtual int getMonthLength(const Date& d) const |
---|
[117] | 55 | { // Retourne la durée du mois en jour. |
---|
[115] | 56 | if (d.getMonth() == 2) |
---|
| 57 | { // Traitement du cas particulier en Février. |
---|
[127] | 58 | if ((d.getYear() % 4 == 0) && |
---|
| 59 | ((d.getYear() % 100 != 0) || |
---|
| 60 | (d.getYear() % 400 == 0) )) |
---|
[120] | 61 | return (29); |
---|
| 62 | return (28); |
---|
[115] | 63 | } |
---|
[120] | 64 | return (AbstractCalendar::getMonthLength(d)); |
---|
[115] | 65 | } |
---|
| 66 | |
---|
[130] | 67 | virtual string getType(void) const { return (string("gregorian")); } |
---|
| 68 | |
---|
[115] | 69 | virtual ~GregorianCalendar() |
---|
| 70 | {/* Ne rien faire de plus */} |
---|
| 71 | |
---|
| 72 | }; // class GregorianCalendar |
---|
| 73 | |
---|
| 74 | class NoLeapCalendar : public AbstractCalendar |
---|
| 75 | { |
---|
| 76 | public : |
---|
[127] | 77 | |
---|
[115] | 78 | NoLeapCalendar() : AbstractCalendar("NoLeap") |
---|
| 79 | {/* Ne rien faire de plus */} |
---|
[119] | 80 | NoLeapCalendar(const string& dateStr) : AbstractCalendar("NoLeap", dateStr) |
---|
| 81 | {/* Ne rien faire de plus */} |
---|
| 82 | |
---|
[130] | 83 | virtual string getType(void) const { return (string("noleap")); } |
---|
| 84 | |
---|
[115] | 85 | virtual ~NoLeapCalendar() |
---|
| 86 | {/* Ne rien faire de plus */} |
---|
| 87 | |
---|
| 88 | }; // class NoLeapCalendar |
---|
| 89 | |
---|
| 90 | class AllLeapCalendar : public AbstractCalendar |
---|
| 91 | { |
---|
| 92 | public : |
---|
[127] | 93 | |
---|
[115] | 94 | AllLeapCalendar() : AbstractCalendar("AllLeap") |
---|
| 95 | {/* Ne rien faire de plus */} |
---|
[119] | 96 | AllLeapCalendar(const string& dateStr) : AbstractCalendar("AllLeap", dateStr) |
---|
| 97 | {/* Ne rien faire de plus */} |
---|
[115] | 98 | |
---|
[127] | 99 | public : /* virtual */ |
---|
| 100 | |
---|
[115] | 101 | virtual int getMonthLength(const Date& d) const |
---|
[120] | 102 | { if (d.getMonth() == 2) return (29); return (AbstractCalendar::getMonthLength(d)); } |
---|
[115] | 103 | |
---|
[118] | 104 | virtual int getYearTotalLength(const Date& d) const { return (366 * 86400); } |
---|
[116] | 105 | |
---|
[130] | 106 | virtual string getType(void) const { return (string("allleap")); } |
---|
| 107 | |
---|
[115] | 108 | virtual ~AllLeapCalendar() |
---|
| 109 | {/* Ne rien faire de plus */} |
---|
| 110 | |
---|
| 111 | }; // class NoLeapCalendar |
---|
| 112 | |
---|
[116] | 113 | class D360Calendar : public AbstractCalendar |
---|
[115] | 114 | { |
---|
| 115 | public : |
---|
[127] | 116 | |
---|
[116] | 117 | D360Calendar() : AbstractCalendar("D360") |
---|
[115] | 118 | {/* Ne rien faire de plus */} |
---|
[119] | 119 | D360Calendar(const string& dateStr) : AbstractCalendar("D360", dateStr) |
---|
| 120 | {/* Ne rien faire de plus */} |
---|
[115] | 121 | |
---|
[127] | 122 | public : /* virtual */ |
---|
| 123 | |
---|
[118] | 124 | virtual int getYearTotalLength(const Date& d) const { return (360 * 86400); } |
---|
[115] | 125 | virtual int getMonthLength(const Date& d) const { return (30); } |
---|
| 126 | |
---|
[130] | 127 | virtual string getType(void) const { return (string("360d")); } |
---|
| 128 | |
---|
[116] | 129 | virtual ~D360Calendar() |
---|
[115] | 130 | {/* Ne rien faire de plus */} |
---|
| 131 | |
---|
[116] | 132 | }; // class D360Calendar |
---|
[115] | 133 | |
---|
| 134 | } // namespace XMLIOSERVER |
---|
| 135 | |
---|
| 136 | #endif // __XMLIO_CALENDAR__ |
---|