Ignore:
Timestamp:
07/20/10 10:09:45 (14 years ago)
Author:
hozdoba
Message:

Réorganisation du code gérant le calendrier.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XMLIO_V2/dev/dev_rv/src/XMLIO/date.hpp

    r117 r118  
    44namespace XMLIOSERVER 
    55{ 
    6    class AbstractCalendar; 
    7  
    8    typedef long long int Time; 
    9  
    10    typedef struct _duration 
    11    { 
    12       /// Méthodes associées à la structure Duration. 
    13       friend std::ostream& operator<<(std::ostream& out, const struct _duration& d) 
    14       { 
    15          out << d.year  << "y. " << d.month  << "mo. "   <<  d.day   << "d. " 
    16              << d.hour  << "h. " << d.minute << "min. " << d.second << "sec. "; 
    17          return (out); 
    18       } 
    19  
    20       struct _duration& resolve(const AbstractCalendar&); 
    21  
    22       /// Propriétés associées à la structure. 
    23       double year, month, day, hour, minute, second; 
    24  
    25    } Duration; 
    26  
    27    /// Opérateurs associés à la structure Duration. 
    28    Duration operator*(const Duration& ddr, const double& scal) 
    29    { 
    30       Duration dur(ddr); 
    31       dur.year *= scal;  dur.month  *= scal; dur.day    *= scal; 
    32       dur.hour *= scal;  dur.minute *= scal; dur.second *= scal; 
    33       return (dur); 
    34    } 
    35  
    36    Duration operator*(const double& scal, const Duration& ddr) 
    37    { return (ddr * scal); } 
    38  
    39    Duration operator-(const Duration& ddr, const Duration& dr) 
    40    { 
    41       Duration dur(ddr); 
    42       dur.year -= dr.year;  dur.month  -= dr.month ; dur.day    -= dr.day; 
    43       dur.hour -= dr.hour;  dur.minute -= dr.minute; dur.second -= dr.second; 
    44       return (dur); 
    45    } 
    46  
    47    Duration operator-(const Duration& ddr) 
    48    { 
    49       Duration dur(ddr); 
    50       dur.year = -dur.year;  dur.month  = -dur.month ; dur.day    = -dur.day; 
    51       dur.hour = -dur.hour;  dur.minute = -dur.minute; dur.second = -dur.second; 
    52       return (dur); 
    53    } 
    54  
    55    Duration operator+(const Duration& ddr, const Duration& dr) 
    56    { 
    57       Duration dur(ddr); 
    58       dur.year += dr.year;  dur.month  += dr.month ; dur.day    += dr.day; 
    59       dur.hour += dr.hour;  dur.minute += dr.minute; dur.second += dr.second; 
    60       return (dur); 
    61    } 
    62  
    63    // Les principales durées constantes : année, mois, jour, ... 
    64    static const Duration Year   = {1.0, 0.0, 0.0, 0.0, 0.0, 0.0}, 
    65                          Month  = {0.0, 1.0, 0.0, 0.0, 0.0, 0.0}, 
    66                          Day    = {0.0, 0.0, 1.0, 0.0, 0.0, 0.0}, 
    67                          Hour   = {0.0, 0.0, 0.0, 1.0, 0.0, 0.0}, 
    68                          Minute = {0.0, 0.0, 0.0, 0.0, 1.0, 0.0}, 
    69                          Second = {0.0, 0.0, 0.0, 0.0, 0.0, 1.0}; 
    70  
    71    /////////////////////////////////////////////////// 
    72  
    736   class Date 
    747   { 
     
    8720         friend std::ostream& operator<<(std::ostream& out, const Date& d) 
    8821         { 
    89             out << d.month << "/"   << d.day    << "/"     << d.year   << " - " 
    90                 << d.hour  << "h. " << d.minute << "min. " << d.second << "sec. "; 
     22            out << d.day  << "/" << d.month  << "/" << d.year   << "-" 
     23                << d.hour << ":" << d.minute << ":" << d.second; 
    9124            return (out); 
    9225         } 
     
    9427         friend std::istream& operator>>(std::istream& in, Date& d) // Non testée. 
    9528         { 
    96             char c = '/'; // Le caractÚre c est utilisé pour "recueillir" le séparateur "/". 
    97             in >> d.month >> c >> d.day >> c  >> d.year; 
    98             in.seekg(3, std::ios_base::cur); // On passe la lecture de la chaîne " - " 
    99             in >> d.hour;   in.seekg(3, std::ios_base::cur); // On passe la lecture de la chaîne "h. " 
    100             in >> d.minute; in.seekg(5, std::ios_base::cur); // On passe la lecture de la chaîne "min. " 
    101             in >> d.second; in.seekg(5, std::ios_base::cur); // On passe la lecture de la chaîne "sec. " 
     29            char c = '/'; // Le caractÚre c est utilisé pour "recueillir" les séparateurs "/" et ":". 
     30            in >> d.day  >> c >> d.month  >> c >> d.year   >> c; 
     31            in >> d.hour >> c >> d.minute >> c >> d.second; 
    10232            return (in); 
    10333         } 
     34 
     35         static Date FromString(const string& str, const AbstractCalendar& cal); 
    10436 
    10537         /// Divers accesseurs. 
     
    13365   }; // class Date 
    13466 
    135    Duration operator-(const Date& dt0, const Date& dt1) 
    136    { 
    137       // TODO :: Vérifier que les deux dates (dt0 et dt1) ont une référence vers le même calendrier. 
    138       Duration dur = 
    139       { dt0.getYear() - dt1.getYear(), dt0.getMonth()  - dt1.getMonth() , dt0.getDay()    - dt1.getDay(), 
    140         dt0.getHour() - dt1.getHour(), dt0.getMinute() - dt1.getMinute(), dt0.getSecond() - dt1.getSecond() }; 
    141       return (dur.resolve(dt0.getRelCalendar())); 
    142    } 
    143  
    144    /// Les opérateurs de comparaison. (Non testés pour le moment) 
    145    bool operator==(const Date& dt0, const Date& dt1) 
    146    { 
    147       // TODO :: Vérifier que les deux dates (dt0 et dt1) ont une référence vers le même calendrier. 
    148       return ((dt0.getYear() == dt1.getYear()) && (dt0.getMonth()  == dt1.getMonth())  && (dt1.getDay()    == dt0.getDay()) && 
    149               (dt0.getHour() == dt1.getHour()) && (dt0.getMinute() == dt1.getMinute()) && (dt1.getSecond() == dt0.getSecond())); 
    150    } 
    151  
    152    bool operator<(const Date& dt0, const Date& dt1) 
    153    { 
    154       // TODO :: Vérifier que les deux dates (dt0 et dt1) ont une référence vers le même calendrier. 
    155       if (dt0.getYear()   < dt1.getYear())   return true; if (dt0.getMonth()  < dt1.getMonth())  return true; 
    156       if (dt0.getDay()    < dt1.getDay())    return true; if (dt0.getHour()   < dt1.getHour())   return true; 
    157       if (dt0.getMinute() < dt1.getMinute()) return true; if (dt0.getSecond() < dt1.getSecond()) return true; 
    158       return false; 
    159    } 
    160  
    161    bool operator!=(const Date& dt0, const Date& dt1) { return !(dt1 == dt0); } 
    162    bool operator> (const Date& dt0, const Date& dt1) { return (dt1 < dt0); } 
    163    bool operator>=(const Date& dt0, const Date& dt1) { return ((dt1 > dt0) || (dt1 == dt0)); } 
    164    bool operator<=(const Date& dt0, const Date& dt1) { return ((dt1 < dt0) || (dt1 == dt0)); } 
    165  
    16667} // namespace XMLIOSERVER 
    16768 
Note: See TracChangeset for help on using the changeset viewer.