]> pilppa.org Git - lib1wire.git/blobdiff - src/Date.cc
Started adding support for caches when reading data. Cache files for
[lib1wire.git] / src / Date.cc
index 6e8fdb6250b3d7e101a2e760cf176349a7cc52eb..86b2cdc82a73bd28179ef36d8e9532f6dee9b0f7 100644 (file)
@@ -88,30 +88,127 @@ void Date::copy(Date *date) {
        sec     = date->sec;
 }
 
-bool Date::before(Date date2) {
+bool Date::before(Date *date2) {
        bool    ret_val;
+       string  s1;
+       string  s2;
 
-       string s1 = this->to_sortable_string();
-       string s2 = date2.to_sortable_string();
        ret_val = false;
-       if (s1.compare(s2) < 0) {
-               ret_val = true;
+       if (date2 != NULL) {
+               s1      = this->to_sortable_string();
+               s2      = date2->to_sortable_string();
+               if (s1.compare(s2) < 0) {
+                       ret_val = true;
+               }
        }
        return ret_val;
 }
 
-bool Date::equals(Date date2) {
+bool Date::equals(Date *date2) {
        bool ret_val;
 
        ret_val = false;
-       if ((this->sec == date2.sec) &&
-           (this->min == date2.min) &&
-           (this->hour == date2.hour) &&
-           (this->day == date2.day) &&
-           (this->month == date2.month) &&
-           (this->year == date2.year)) {
+       if (date2 != NULL) {
+               if ((this->sec == date2->sec) &&
+                   (this->min == date2->min) &&
+                   (this->hour == date2->hour) &&
+                   (this->day == date2->day) &&
+                   (this->month == date2->month) &&
+                   (this->year == date2->year)) {
+                       ret_val = true;
+               }
+       }
+       return ret_val;
+}
+
+bool Date::before_or_equal_year(Date *date2) {
+       bool    ret_val;
+       string  s1;
+       string  s2;
+
+       ret_val = (this->year <= date2->year);
+       return ret_val;
+}
+
+bool Date::before_or_equal_month(Date *date2) {
+       bool    ret_val;
+       string  s1;
+       string  s2;
+
+       ret_val = false;
+       if (this->year < date2->month) {
                ret_val = true;
        }
+       else {
+               if ((this->year == date2->year) &&
+                   (this->month <= date2->month)) {
+                       ret_val = true;
+               }
+       }
+       return ret_val;
+}
+
+bool Date::before_or_equal_day(Date *date2) {
+       bool    ret_val;
+       string  s1;
+       string  s2;
+
+       ret_val = false;
+       if (date2 != NULL) {
+               s1      = this->to_sortable_day_string();
+               s2      = date2->to_sortable_day_string();
+               if (s1.compare(s2) <= 0) {
+                       ret_val = true;
+               }
+       }
+       return ret_val;
+}
+
+bool Date::before_or_equal_hour(Date *date2) {
+       bool    ret_val;
+       string  s1;
+       string  s2;
+
+       ret_val = false;
+       if (date2 != NULL) {
+               s1      = this->to_sortable_hour_string();
+               s2      = date2->to_sortable_hour_string();
+               if (s1.compare(s2) <= 0) {
+                       ret_val = true;
+               }
+       }
+       return ret_val;
+}
+
+bool Date::before_or_equal_min(Date *date2) {
+       bool    ret_val;
+       string  s1;
+       string  s2;
+
+       ret_val = false;
+       if (date2 != NULL) {
+               s1      = this->to_sortable_min_string();
+               s2      = date2->to_sortable_min_string();
+               if (s1.compare(s2) <= 0) {
+                       ret_val = true;
+               }
+       }
+       return ret_val;
+}
+
+bool Date::before_or_equal(Date *date2) {
+       bool    ret_val;
+       string  s1;
+       string  s2;
+
+       ret_val = false;
+       if (date2 != NULL) {
+               s1      = this->to_sortable_string();
+               s2      = date2->to_sortable_string();
+               if (s1.compare(s2) <= 0) {
+                       ret_val = true;
+               }
+       }
        return ret_val;
 }
 
@@ -128,7 +225,7 @@ void Date::tomorrow() {
                        else {
                                day     = 1;
                                month++;
-                               if (month == 12) {
+                               if (month > 12) {
                                        year++;
                                        month   = 1;
                                }
@@ -191,6 +288,35 @@ void Date::inc_seconds(int seconds) {
        }
 }
 
+string Date::to_sortable_day_string() {
+       char    buffer[30];
+
+
+       string  ret_val;
+
+       sprintf(buffer, "%016d%02d%02d", year, month, day);
+       ret_val = buffer;
+       return ret_val;
+}
+
+string Date::to_sortable_hour_string() {
+       char    buffer[30];
+       string  ret_val;
+
+       sprintf(buffer, "%016d%02d%02d%02d", year, month, day, hour);
+       ret_val = buffer;
+       return ret_val;
+}
+
+string Date::to_sortable_min_string() {
+       char    buffer[30];
+       string  ret_val;
+
+       sprintf(buffer, "%016d%02d%02d%02d%02d", year, month, day, hour, min);
+       ret_val = buffer;
+       return ret_val;
+}
+
 string Date::to_sortable_string() {
        char    buffer[30];
        string  ret_val;