home_run 0.9.1-x86-mswin32-60 → 0.9.2-x86-mswin32-60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +8 -0
 - data/README.rdoc +3 -7
 - data/ext/date_ext/date_ext.c +65 -61
 - data/ext/date_ext/date_ext.h +1 -2
 - data/ext/date_ext/date_parser.c +59 -55
 - data/ext/date_ext/date_parser.rl +12 -8
 - data/ext/date_ext/datetime.c +90 -74
 - data/ext/date_ext/extconf.rb +2 -0
 - data/lib/1.8/date_ext.so +0 -0
 - data/lib/1.9/date_ext.so +0 -0
 - data/spec/datetime/accessor_spec.rb +13 -4
 - data/spec/datetime/parse_spec.rb +10 -1
 - metadata +4 -4
 
    
        data/ext/date_ext/datetime.c
    CHANGED
    
    | 
         @@ -1,5 +1,9 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            #include "date_ext.h"
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            #ifdef RHR_ENCODING
         
     | 
| 
      
 4 
     | 
    
         
            +
            extern int rhrd_encoding_index;
         
     | 
| 
      
 5 
     | 
    
         
            +
            #endif
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
       3 
7 
     | 
    
         
             
            extern const unsigned char rhrd_days_in_month[];
         
     | 
| 
       4 
8 
     | 
    
         
             
            extern const long rhrd_cumulative_days_in_month[];
         
     | 
| 
       5 
9 
     | 
    
         
             
            extern const unsigned char rhrd_yday_to_month[];
         
     | 
| 
         @@ -115,7 +119,7 @@ void rhrdt__set_offset(rhrdt_t *dt, double offset) { 
     | 
|
| 
       115 
119 
     | 
    
         
             
              long offset_min;
         
     | 
| 
       116 
120 
     | 
    
         
             
              offset_min = lround(offset * 1440);
         
     | 
| 
       117 
121 
     | 
    
         
             
              rhrdt__check_offset(offset_min);
         
     | 
| 
       118 
     | 
    
         
            -
              dt->offset = offset_min;
         
     | 
| 
      
 122 
     | 
    
         
            +
              dt->offset = (short)offset_min;
         
     | 
| 
       119 
123 
     | 
    
         
             
            }
         
     | 
| 
       120 
124 
     | 
    
         | 
| 
       121 
125 
     | 
    
         
             
            /* Check if the time information consistutes a valid time.  If not, raise an
         
     | 
| 
         @@ -138,16 +142,16 @@ void rhrdt__set_time(rhrdt_t *dt, long h, long m, long s, double offset) { 
     | 
|
| 
       138 
142 
     | 
    
         
             
              if (h == 24 && m == 0 && s == 0) {
         
     | 
| 
       139 
143 
     | 
    
         
             
                RHRDT_FILL_JD(dt)
         
     | 
| 
       140 
144 
     | 
    
         
             
                dt->jd++;
         
     | 
| 
       141 
     | 
    
         
            -
                dt->flags &= ~RHR_HAVE_CIVIL;
         
     | 
| 
      
 145 
     | 
    
         
            +
                dt->flags &= (unsigned char)~RHR_HAVE_CIVIL;
         
     | 
| 
       142 
146 
     | 
    
         
             
                h = 0;
         
     | 
| 
       143 
147 
     | 
    
         
             
              } else if (h < 0 || m < 0 || s < 0 || h > 23 || m > 59 || s > 59) {
         
     | 
| 
       144 
148 
     | 
    
         
             
                rb_raise(rb_eArgError, "invalid time: %ld hours, %ld minutes, %ld seconds", h, m, s);
         
     | 
| 
       145 
149 
     | 
    
         
             
              }
         
     | 
| 
       146 
150 
     | 
    
         
             
              rhrdt__set_offset(dt, offset);
         
     | 
| 
       147 
151 
     | 
    
         | 
| 
       148 
     | 
    
         
            -
              dt->hour = h;
         
     | 
| 
       149 
     | 
    
         
            -
              dt->minute = m;
         
     | 
| 
       150 
     | 
    
         
            -
              dt->second = s;
         
     | 
| 
      
 152 
     | 
    
         
            +
              dt->hour = (unsigned char)h;
         
     | 
| 
      
 153 
     | 
    
         
            +
              dt->minute = (unsigned char)m;
         
     | 
| 
      
 154 
     | 
    
         
            +
              dt->second = (unsigned char)s;
         
     | 
| 
       151 
155 
     | 
    
         
             
              dt->flags |= RHR_HAVE_HMS;
         
     | 
| 
       152 
156 
     | 
    
         
             
            }
         
     | 
| 
       153 
157 
     | 
    
         | 
| 
         @@ -166,12 +170,12 @@ void rhrdt__jd_to_civil(rhrdt_t *date) { 
     | 
|
| 
       166 
170 
     | 
    
         
             
              c = (long)floor((b - 122.1) / 365.25);
         
     | 
| 
       167 
171 
     | 
    
         
             
              d = (long)floor(365.25 * c);
         
     | 
| 
       168 
172 
     | 
    
         
             
              e = (long)floor((b - d) / 30.6001);
         
     | 
| 
       169 
     | 
    
         
            -
              date->day = b - d - (long)floor(30.6001 * e);
         
     | 
| 
      
 173 
     | 
    
         
            +
              date->day = (unsigned char)(b - d - (long)floor(30.6001 * e));
         
     | 
| 
       170 
174 
     | 
    
         
             
              if (e <= 13) {
         
     | 
| 
       171 
     | 
    
         
            -
                date->month = e - 1;
         
     | 
| 
      
 175 
     | 
    
         
            +
                date->month = (unsigned char)(e - 1);
         
     | 
| 
       172 
176 
     | 
    
         
             
                date->year = c - 4716;
         
     | 
| 
       173 
177 
     | 
    
         
             
              } else {
         
     | 
| 
       174 
     | 
    
         
            -
                date->month = e - 13;
         
     | 
| 
      
 178 
     | 
    
         
            +
                date->month = (unsigned char)(e - 13);
         
     | 
| 
       175 
179 
     | 
    
         
             
                date->year = c - 4715;
         
     | 
| 
       176 
180 
     | 
    
         
             
              }
         
     | 
| 
       177 
181 
     | 
    
         
             
              date->flags |= RHR_HAVE_CIVIL;
         
     | 
| 
         @@ -182,10 +186,10 @@ void rhrdt__jd_to_civil(rhrdt_t *date) { 
     | 
|
| 
       182 
186 
     | 
    
         
             
             * nanos field has already been filled in. */
         
     | 
| 
       183 
187 
     | 
    
         
             
            void rhrdt__nanos_to_hms(rhrdt_t *d) {
         
     | 
| 
       184 
188 
     | 
    
         
             
              unsigned int seconds;
         
     | 
| 
       185 
     | 
    
         
            -
              seconds = d->nanos/RHR_NANOS_PER_SECOND;
         
     | 
| 
       186 
     | 
    
         
            -
              d->hour = seconds/RHR_SECONDS_PER_HOUR;
         
     | 
| 
       187 
     | 
    
         
            -
              d->minute = (seconds % RHR_SECONDS_PER_HOUR)/60;
         
     | 
| 
       188 
     | 
    
         
            -
              d->second = seconds % 60;
         
     | 
| 
      
 189 
     | 
    
         
            +
              seconds = (unsigned int)(d->nanos/RHR_NANOS_PER_SECOND);
         
     | 
| 
      
 190 
     | 
    
         
            +
              d->hour = (unsigned char)(seconds/RHR_SECONDS_PER_HOUR);
         
     | 
| 
      
 191 
     | 
    
         
            +
              d->minute = (unsigned char)((seconds % RHR_SECONDS_PER_HOUR)/60);
         
     | 
| 
      
 192 
     | 
    
         
            +
              d->second = (unsigned char)(seconds % 60);
         
     | 
| 
       189 
193 
     | 
    
         
             
              d->flags |= RHR_HAVE_HMS;
         
     | 
| 
       190 
194 
     | 
    
         
             
            }
         
     | 
| 
       191 
195 
     | 
    
         | 
| 
         @@ -286,13 +290,13 @@ void rhrdt__now(rhrdt_t * dt) { 
     | 
|
| 
       286 
290 
     | 
    
         
             
              rt = rb_funcall(rb_cTime, rhrd_id_now, 0);
         
     | 
| 
       287 
291 
     | 
    
         
             
              offset = NUM2LONG(rb_funcall(rt, rhrd_id_utc_offset, 0));
         
     | 
| 
       288 
292 
     | 
    
         
             
              t = NUM2LONG(rb_funcall(rt, rhrd_id_to_i, 0)) + offset;
         
     | 
| 
       289 
     | 
    
         
            -
              dt->jd = rhrd__unix_to_jd(t);
         
     | 
| 
      
 293 
     | 
    
         
            +
              dt->jd = rhrd__unix_to_jd((long long)t);
         
     | 
| 
       290 
294 
     | 
    
         
             
            #ifdef RUBY19
         
     | 
| 
       291 
295 
     | 
    
         
             
              dt->nanos = rhrd__mod(t, RHR_SECONDS_PER_DAY) * RHR_NANOS_PER_SECOND + NUM2LONG(rb_funcall(rt, rhrd_id_nsec, 0));
         
     | 
| 
       292 
296 
     | 
    
         
             
            #else
         
     | 
| 
       293 
297 
     | 
    
         
             
              dt->nanos = rhrd__mod(t, RHR_SECONDS_PER_DAY) * RHR_NANOS_PER_SECOND + NUM2LONG(rb_funcall(rt, rhrd_id_usec, 0)) * 1000;
         
     | 
| 
       294 
298 
     | 
    
         
             
            #endif
         
     | 
| 
       295 
     | 
    
         
            -
              dt->offset = offset/60;
         
     | 
| 
      
 299 
     | 
    
         
            +
              dt->offset = (short)(offset/60);
         
     | 
| 
       296 
300 
     | 
    
         
             
              dt->flags |= RHR_HAVE_JD | RHR_HAVE_NANOS;
         
     | 
| 
       297 
301 
     | 
    
         
             
              RHR_CHECK_JD(dt);
         
     | 
| 
       298 
302 
     | 
    
         
             
            }
         
     | 
| 
         @@ -310,11 +314,11 @@ VALUE rhrdt__from_jd_nanos(long jd, long long nanos, short offset) { 
     | 
|
| 
       310 
314 
     | 
    
         
             
              new = Data_Make_Struct(rhrdt_class, rhrdt_t, NULL, -1, dt);
         
     | 
| 
       311 
315 
     | 
    
         | 
| 
       312 
316 
     | 
    
         
             
              if (nanos < 0) {
         
     | 
| 
       313 
     | 
    
         
            -
                t = nanos/RHR_NANOS_PER_DAY - 1;
         
     | 
| 
      
 317 
     | 
    
         
            +
                t = (long)(nanos/RHR_NANOS_PER_DAY - 1);
         
     | 
| 
       314 
318 
     | 
    
         
             
                nanos -= t * RHR_NANOS_PER_DAY;
         
     | 
| 
       315 
319 
     | 
    
         
             
                jd += t;
         
     | 
| 
       316 
320 
     | 
    
         
             
              } else if (nanos >= RHR_NANOS_PER_DAY) {
         
     | 
| 
       317 
     | 
    
         
            -
                t = nanos/RHR_NANOS_PER_DAY;
         
     | 
| 
      
 321 
     | 
    
         
            +
                t = (long)(nanos/RHR_NANOS_PER_DAY);
         
     | 
| 
       318 
322 
     | 
    
         
             
                nanos -= t * RHR_NANOS_PER_DAY;
         
     | 
| 
       319 
323 
     | 
    
         
             
                jd += t;
         
     | 
| 
       320 
324 
     | 
    
         
             
              }
         
     | 
| 
         @@ -357,7 +361,7 @@ VALUE rhrdt__add_days(VALUE self, double n) { 
     | 
|
| 
       357 
361 
     | 
    
         
             
              Data_Get_Struct(self, rhrdt_t, dt);
         
     | 
| 
       358 
362 
     | 
    
         
             
              RHRDT_FILL_JD(dt)
         
     | 
| 
       359 
363 
     | 
    
         
             
              RHRDT_FILL_NANOS(dt)
         
     | 
| 
       360 
     | 
    
         
            -
              l = floor(n);
         
     | 
| 
      
 364 
     | 
    
         
            +
              l = (long)floor(n);
         
     | 
| 
       361 
365 
     | 
    
         
             
              nanos = llround((n - l) * RHR_NANOS_PER_DAY);
         
     | 
| 
       362 
366 
     | 
    
         
             
              return rhrdt__from_jd_nanos(rhrd__safe_add_long(dt->jd, l), dt->nanos + nanos, dt->offset);
         
     | 
| 
       363 
367 
     | 
    
         
             
            }
         
     | 
| 
         @@ -378,13 +382,13 @@ VALUE rhrdt__add_months(VALUE self, long n) { 
     | 
|
| 
       378 
382 
     | 
    
         
             
              n = rhrd__safe_add_long(n, (long)(d->month));
         
     | 
| 
       379 
383 
     | 
    
         
             
              if(n > 1 && n <= 12) {
         
     | 
| 
       380 
384 
     | 
    
         
             
                newd->year = d->year;
         
     | 
| 
       381 
     | 
    
         
            -
                newd->month = n;
         
     | 
| 
      
 385 
     | 
    
         
            +
                newd->month = (unsigned char)n;
         
     | 
| 
       382 
386 
     | 
    
         
             
              } else {
         
     | 
| 
       383 
387 
     | 
    
         
             
                x = n / 12;
         
     | 
| 
       384 
388 
     | 
    
         
             
                n = n % 12;
         
     | 
| 
       385 
389 
     | 
    
         
             
                if (n <= 0) {
         
     | 
| 
       386 
390 
     | 
    
         
             
                  newd->year = d->year + x - 1;
         
     | 
| 
       387 
     | 
    
         
            -
                  newd->month = n + 12;
         
     | 
| 
      
 391 
     | 
    
         
            +
                  newd->month = (unsigned char)(n + 12);
         
     | 
| 
       388 
392 
     | 
    
         
             
                } else {
         
     | 
| 
       389 
393 
     | 
    
         
             
                  newd->year = d->year + x;
         
     | 
| 
       390 
394 
     | 
    
         
             
                  newd->month = (unsigned char)n;
         
     | 
| 
         @@ -393,7 +397,7 @@ VALUE rhrdt__add_months(VALUE self, long n) { 
     | 
|
| 
       393 
397 
     | 
    
         
             
              x = rhrd__days_in_month(newd->year, newd->month);
         
     | 
| 
       394 
398 
     | 
    
         
             
              newd->day = (unsigned char)(d->day > x ? x : d->day);
         
     | 
| 
       395 
399 
     | 
    
         
             
              RHR_CHECK_CIVIL(newd)
         
     | 
| 
       396 
     | 
    
         
            -
              newd->flags &= ~RHR_HAVE_JD;
         
     | 
| 
      
 400 
     | 
    
         
            +
              newd->flags &= (unsigned char)~RHR_HAVE_JD;
         
     | 
| 
       397 
401 
     | 
    
         
             
              return new;
         
     | 
| 
       398 
402 
     | 
    
         
             
            }
         
     | 
| 
       399 
403 
     | 
    
         | 
| 
         @@ -430,9 +434,9 @@ void rhrdt__fill_from_hash(rhrdt_t *dt, VALUE hash) { 
     | 
|
| 
       430 
434 
     | 
    
         
             
                dt->jd = rhrd__unix_to_jd(time_set);
         
     | 
| 
       431 
435 
     | 
    
         
             
                time_set = rhrd__modll(time_set, RHR_SECONDS_PER_DAY);
         
     | 
| 
       432 
436 
     | 
    
         
             
                dt->nanos = time_set*RHR_NANOS_PER_SECOND + nanos;
         
     | 
| 
       433 
     | 
    
         
            -
                dt->hour = time_set/RHR_SECONDS_PER_HOUR;
         
     | 
| 
       434 
     | 
    
         
            -
                dt->minute = (time_set - dt->hour * RHR_SECONDS_PER_HOUR)/60;
         
     | 
| 
       435 
     | 
    
         
            -
                dt->second = rhrd__mod(time_set, 60);
         
     | 
| 
      
 437 
     | 
    
         
            +
                dt->hour = (unsigned char)(time_set/RHR_SECONDS_PER_HOUR);
         
     | 
| 
      
 438 
     | 
    
         
            +
                dt->minute = (unsigned char)((time_set - dt->hour * RHR_SECONDS_PER_HOUR)/60);
         
     | 
| 
      
 439 
     | 
    
         
            +
                dt->second = (unsigned char)rhrd__mod((long)time_set, 60);
         
     | 
| 
       436 
440 
     | 
    
         
             
                offset /= 60;
         
     | 
| 
       437 
441 
     | 
    
         
             
                rhrdt__check_offset(offset);
         
     | 
| 
       438 
442 
     | 
    
         
             
                RHR_CHECK_JD(dt);
         
     | 
| 
         @@ -505,7 +509,7 @@ VALUE rhrdt__new_offset(VALUE self, double offset) { 
     | 
|
| 
       505 
509 
     | 
    
         
             
              Data_Get_Struct(self, rhrdt_t, dt);
         
     | 
| 
       506 
510 
     | 
    
         
             
              RHRDT_FILL_JD(dt)
         
     | 
| 
       507 
511 
     | 
    
         
             
              RHRDT_FILL_NANOS(dt)
         
     | 
| 
       508 
     | 
    
         
            -
              return rhrdt__from_jd_nanos(dt->jd, dt->nanos - (dt->offset - offset_min)*RHR_NANOS_PER_MINUTE, offset_min);
         
     | 
| 
      
 512 
     | 
    
         
            +
              return rhrdt__from_jd_nanos(dt->jd, dt->nanos - (dt->offset - offset_min)*RHR_NANOS_PER_MINUTE, (short)offset_min);
         
     | 
| 
       509 
513 
     | 
    
         
             
            }
         
     | 
| 
       510 
514 
     | 
    
         | 
| 
       511 
515 
     | 
    
         
             
            /* Class methods */
         
     | 
| 
         @@ -541,7 +545,7 @@ static VALUE rhrdt_s__load(VALUE klass, VALUE string) { 
     | 
|
| 
       541 
545 
     | 
    
         | 
| 
       542 
546 
     | 
    
         
             
              x = NUM2LONG(rb_ary_entry(ary, 2));
         
     | 
| 
       543 
547 
     | 
    
         
             
              rhrdt__check_offset(x);
         
     | 
| 
       544 
     | 
    
         
            -
              d->offset = x;
         
     | 
| 
      
 548 
     | 
    
         
            +
              d->offset = (short)x;
         
     | 
| 
       545 
549 
     | 
    
         | 
| 
       546 
550 
     | 
    
         
             
              d->flags = RHR_HAVE_JD | RHR_HAVE_NANOS;
         
     | 
| 
       547 
551 
     | 
    
         
             
              return rd;
         
     | 
| 
         @@ -765,9 +769,9 @@ static VALUE rhrdt_s_new_b(int argc, VALUE *argv, VALUE klass) { 
     | 
|
| 
       765 
769 
     | 
    
         
             
                  rhrdt__set_offset(dt, offset);
         
     | 
| 
       766 
770 
     | 
    
         
             
                case 1:
         
     | 
| 
       767 
771 
     | 
    
         
             
                  offset += NUM2DBL(argv[0]) + 0.5;
         
     | 
| 
       768 
     | 
    
         
            -
                  dt->jd = offset;
         
     | 
| 
      
 772 
     | 
    
         
            +
                  dt->jd = (long)offset;
         
     | 
| 
       769 
773 
     | 
    
         
             
                  RHR_CHECK_JD(dt)
         
     | 
| 
       770 
     | 
    
         
            -
                  dt->nanos = (offset - dt->jd)*RHR_NANOS_PER_DAY;
         
     | 
| 
      
 774 
     | 
    
         
            +
                  dt->nanos = (long long)((offset - dt->jd)*RHR_NANOS_PER_DAY);
         
     | 
| 
       771 
775 
     | 
    
         
             
                  dt->flags = RHR_HAVE_JD | RHR_HAVE_NANOS;
         
     | 
| 
       772 
776 
     | 
    
         
             
                  break;
         
     | 
| 
       773 
777 
     | 
    
         
             
                default:
         
     | 
| 
         @@ -949,7 +953,7 @@ static VALUE rhrdt_ajd(VALUE self) { 
     | 
|
| 
       949 
953 
     | 
    
         
             
              Data_Get_Struct(self, rhrdt_t, d);
         
     | 
| 
       950 
954 
     | 
    
         
             
              RHRDT_FILL_JD(d)
         
     | 
| 
       951 
955 
     | 
    
         
             
              RHRDT_FILL_NANOS(d)
         
     | 
| 
       952 
     | 
    
         
            -
              return rb_float_new(d->jd + d->nanos/RHR_NANOS_PER_DAYD - d->offset/1440.0 - 0.5);
         
     | 
| 
      
 956 
     | 
    
         
            +
              return rb_float_new(d->jd + (double)d->nanos/RHR_NANOS_PER_DAYD - d->offset/1440.0 - 0.5);
         
     | 
| 
       953 
957 
     | 
    
         
             
            }
         
     | 
| 
       954 
958 
     | 
    
         | 
| 
       955 
959 
     | 
    
         
             
            /* call-seq:
         
     | 
| 
         @@ -963,7 +967,7 @@ static VALUE rhrdt_amjd(VALUE self) { 
     | 
|
| 
       963 
967 
     | 
    
         
             
              Data_Get_Struct(self, rhrdt_t, d);
         
     | 
| 
       964 
968 
     | 
    
         
             
              RHRDT_FILL_JD(d)
         
     | 
| 
       965 
969 
     | 
    
         
             
              RHRDT_FILL_NANOS(d)
         
     | 
| 
       966 
     | 
    
         
            -
              return rb_float_new(d->jd + d->nanos/RHR_NANOS_PER_DAYD - d->offset/1440.0 - RHR_JD_MJD);
         
     | 
| 
      
 970 
     | 
    
         
            +
              return rb_float_new(d->jd + (double)d->nanos/RHR_NANOS_PER_DAYD - d->offset/1440.0 - RHR_JD_MJD);
         
     | 
| 
       967 
971 
     | 
    
         
             
            }
         
     | 
| 
       968 
972 
     | 
    
         | 
| 
       969 
973 
     | 
    
         
             
            /* call-seq:
         
     | 
| 
         @@ -984,10 +988,10 @@ static VALUE rhrdt_asctime(VALUE self) { 
     | 
|
| 
       984 
988 
     | 
    
         
             
              RHRDT_FILL_HMS(d)
         
     | 
| 
       985 
989 
     | 
    
         | 
| 
       986 
990 
     | 
    
         
             
              s = rb_str_buf_new(128);
         
     | 
| 
       987 
     | 
    
         
            -
              len = snprintf(RSTRING_PTR(s), 128, "%s %s % 
     | 
| 
      
 991 
     | 
    
         
            +
              len = snprintf(RSTRING_PTR(s), 128, "%s %s %2i %02i:%02i:%02i %04li", 
         
     | 
| 
       988 
992 
     | 
    
         
             
                    rhrd__abbr_day_names[rhrd__jd_to_wday(d->jd)],
         
     | 
| 
       989 
993 
     | 
    
         
             
                    rhrd__abbr_month_names[d->month],
         
     | 
| 
       990 
     | 
    
         
            -
                    d->day, d->hour, d->minute, d->second,
         
     | 
| 
      
 994 
     | 
    
         
            +
                    (int)d->day, (int)d->hour, (int)d->minute, (int)d->second,
         
     | 
| 
       991 
995 
     | 
    
         
             
                    d->year);
         
     | 
| 
       992 
996 
     | 
    
         
             
              if (len == -1 || len > 127) {
         
     | 
| 
       993 
997 
     | 
    
         
             
                rb_raise(rb_eNoMemError, "in DateTime#asctime (in snprintf)");
         
     | 
| 
         @@ -1096,7 +1100,7 @@ static VALUE rhrdt_day_fraction(VALUE self) { 
     | 
|
| 
       1096 
1100 
     | 
    
         
             
              rhrdt_t *dt;
         
     | 
| 
       1097 
1101 
     | 
    
         
             
              Data_Get_Struct(self, rhrdt_t, dt);
         
     | 
| 
       1098 
1102 
     | 
    
         
             
              RHRDT_FILL_NANOS(dt)
         
     | 
| 
       1099 
     | 
    
         
            -
              return rb_float_new(dt->nanos/RHR_NANOS_PER_DAYD);
         
     | 
| 
      
 1103 
     | 
    
         
            +
              return rb_float_new((double)dt->nanos/RHR_NANOS_PER_DAYD);
         
     | 
| 
       1100 
1104 
     | 
    
         
             
            }
         
     | 
| 
       1101 
1105 
     | 
    
         | 
| 
       1102 
1106 
     | 
    
         
             
            /* call-seq:
         
     | 
| 
         @@ -1142,8 +1146,8 @@ static VALUE rhrdt_eql_q(VALUE self, VALUE other) { 
     | 
|
| 
       1142 
1146 
     | 
    
         
             
              long diff;
         
     | 
| 
       1143 
1147 
     | 
    
         | 
| 
       1144 
1148 
     | 
    
         
             
              if (RTEST(rb_obj_is_kind_of(other, rhrdt_class))) {
         
     | 
| 
       1145 
     | 
    
         
            -
                self = rhrdt__new_offset(self, 0);
         
     | 
| 
       1146 
     | 
    
         
            -
                other = rhrdt__new_offset(other, 0);
         
     | 
| 
      
 1149 
     | 
    
         
            +
                self = rhrdt__new_offset(self, 0.0);
         
     | 
| 
      
 1150 
     | 
    
         
            +
                other = rhrdt__new_offset(other, 0.0);
         
     | 
| 
       1147 
1151 
     | 
    
         
             
                Data_Get_Struct(self, rhrdt_t, dt);
         
     | 
| 
       1148 
1152 
     | 
    
         
             
                Data_Get_Struct(other, rhrdt_t, odt);
         
     | 
| 
       1149 
1153 
     | 
    
         
             
                return rhrdt__spaceship(dt, odt) == 0 ? Qtrue : Qfalse;
         
     | 
| 
         @@ -1170,8 +1174,9 @@ static VALUE rhrdt_eql_q(VALUE self, VALUE other) { 
     | 
|
| 
       1170 
1174 
     | 
    
         
             
             */
         
     | 
| 
       1171 
1175 
     | 
    
         
             
            static VALUE rhrdt_hash(VALUE self) {
         
     | 
| 
       1172 
1176 
     | 
    
         
             
              rhrdt_t *d;
         
     | 
| 
      
 1177 
     | 
    
         
            +
              VALUE new = rhrdt__new_offset(self, 0.0); 
         
     | 
| 
       1173 
1178 
     | 
    
         
             
              RHR_CACHED_IV(self, rhrd_id_hash)
         
     | 
| 
       1174 
     | 
    
         
            -
              Data_Get_Struct( 
     | 
| 
      
 1179 
     | 
    
         
            +
              Data_Get_Struct(new, rhrdt_t, d);
         
     | 
| 
       1175 
1180 
     | 
    
         
             
              return rb_ivar_set(self, rhrd_id_hash, rb_funcall(rb_ary_new3(2, LONG2NUM(d->jd), LL2NUM(d->nanos)), rhrd_id_hash, 0));
         
     | 
| 
       1176 
1181 
     | 
    
         
             
            }
         
     | 
| 
       1177 
1182 
     | 
    
         | 
| 
         @@ -1208,8 +1213,8 @@ static VALUE rhrdt_inspect(VALUE self) { 
     | 
|
| 
       1208 
1213 
     | 
    
         
             
              RHRDT_FILL_HMS(dt)
         
     | 
| 
       1209 
1214 
     | 
    
         | 
| 
       1210 
1215 
     | 
    
         
             
              s = rb_str_buf_new(128);
         
     | 
| 
       1211 
     | 
    
         
            -
              len = snprintf(RSTRING_PTR(s), 128, "#<DateTime %04li-% 
     | 
| 
       1212 
     | 
    
         
            -
                    dt->year, dt->month, dt->day, dt->hour, dt->minute, dt->second, dt->offset/60, abs(dt->offset % 60));
         
     | 
| 
      
 1216 
     | 
    
         
            +
              len = snprintf(RSTRING_PTR(s), 128, "#<DateTime %04li-%02i-%02iT%02i:%02i:%02i%+03i:%02i>",
         
     | 
| 
      
 1217 
     | 
    
         
            +
                    dt->year, (int)dt->month, (int)dt->day, (int)dt->hour, (int)dt->minute, (int)dt->second, dt->offset/60, abs(dt->offset % 60));
         
     | 
| 
       1213 
1218 
     | 
    
         
             
              if (len == -1 || len > 127) {
         
     | 
| 
       1214 
1219 
     | 
    
         
             
                rb_raise(rb_eNoMemError, "in DateTime#inspect (in snprintf)");
         
     | 
| 
       1215 
1220 
     | 
    
         
             
              }
         
     | 
| 
         @@ -1357,7 +1362,7 @@ static VALUE rhrdt_new_offset(int argc, VALUE *argv, VALUE self) { 
     | 
|
| 
       1357 
1362 
     | 
    
         
             
             *   # => #<DateTime 2009-01-03T12:00:00+00:00>
         
     | 
| 
       1358 
1363 
     | 
    
         
             
             */
         
     | 
| 
       1359 
1364 
     | 
    
         
             
            static VALUE rhrdt_next(VALUE self) {
         
     | 
| 
       1360 
     | 
    
         
            -
               return rhrdt__add_days(self, 1);
         
     | 
| 
      
 1365 
     | 
    
         
            +
               return rhrdt__add_days(self, 1.0);
         
     | 
| 
       1361 
1366 
     | 
    
         
             
            }
         
     | 
| 
       1362 
1367 
     | 
    
         | 
| 
       1363 
1368 
     | 
    
         
             
            /* call-seq:
         
     | 
| 
         @@ -1395,17 +1400,27 @@ static VALUE rhrdt_sec(VALUE self) { 
     | 
|
| 
       1395 
1400 
     | 
    
         
             
            /* call-seq:
         
     | 
| 
       1396 
1401 
     | 
    
         
             
             *   sec_fraction() -> Float
         
     | 
| 
       1397 
1402 
     | 
    
         
             
             *
         
     | 
| 
       1398 
     | 
    
         
            -
             *  
     | 
| 
      
 1403 
     | 
    
         
            +
             * On ruby 1.8, returns a +Float+ representing the fraction of the second as a
         
     | 
| 
       1399 
1404 
     | 
    
         
             
             * fraction of the day, which will always be in the range [0.0, 1/86400.0).
         
     | 
| 
       1400 
1405 
     | 
    
         
             
             * 
         
     | 
| 
       1401 
1406 
     | 
    
         
             
             *   (DateTime.civil(2009, 1, 2, 12, 13, 14) + (1.5/86400)).sec_fraction
         
     | 
| 
       1402 
1407 
     | 
    
         
             
             *   # => 0.000005787037
         
     | 
| 
      
 1408 
     | 
    
         
            +
             *
         
     | 
| 
      
 1409 
     | 
    
         
            +
             * On ruby 1.9, returns a +Float+ representing the fraction of the second, which
         
     | 
| 
      
 1410 
     | 
    
         
            +
             * will always be in the range [0,1).
         
     | 
| 
      
 1411 
     | 
    
         
            +
             * 
         
     | 
| 
      
 1412 
     | 
    
         
            +
             *   (DateTime.civil(2009, 1, 2, 12, 13, 14) + (1.5/86400)).sec_fraction
         
     | 
| 
      
 1413 
     | 
    
         
            +
             *   # => 0.5
         
     | 
| 
       1403 
1414 
     | 
    
         
             
             */
         
     | 
| 
       1404 
1415 
     | 
    
         
             
            static VALUE rhrdt_sec_fraction(VALUE self) {
         
     | 
| 
       1405 
1416 
     | 
    
         
             
              rhrdt_t *dt;
         
     | 
| 
       1406 
1417 
     | 
    
         
             
              Data_Get_Struct(self, rhrdt_t, dt);
         
     | 
| 
       1407 
1418 
     | 
    
         
             
              RHRDT_FILL_NANOS(dt)
         
     | 
| 
       1408 
     | 
    
         
            -
             
     | 
| 
      
 1419 
     | 
    
         
            +
            #ifdef RUBY19
         
     | 
| 
      
 1420 
     | 
    
         
            +
              return rb_float_new((double)(dt->nanos % RHR_NANOS_PER_SECOND)/RHR_NANOS_PER_SECONDD);
         
     | 
| 
      
 1421 
     | 
    
         
            +
            #else
         
     | 
| 
      
 1422 
     | 
    
         
            +
              return rb_float_new((double)(dt->nanos % RHR_NANOS_PER_SECOND)/RHR_NANOS_PER_DAYD);
         
     | 
| 
      
 1423 
     | 
    
         
            +
            #endif
         
     | 
| 
       1409 
1424 
     | 
    
         
             
            } 
         
     | 
| 
       1410 
1425 
     | 
    
         | 
| 
       1411 
1426 
     | 
    
         
             
            /* call-seq:
         
     | 
| 
         @@ -1438,9 +1453,10 @@ static VALUE rhrdt_step(int argc, VALUE *argv, VALUE self) { 
     | 
|
| 
       1438 
1453 
     | 
    
         
             
              double step, limit;
         
     | 
| 
       1439 
1454 
     | 
    
         
             
              long long step_nanos, limit_nanos, current_nanos;
         
     | 
| 
       1440 
1455 
     | 
    
         
             
              long step_jd, limit_jd, current_jd;
         
     | 
| 
       1441 
     | 
    
         
            -
              VALUE rlimit, new, rstep;
         
     | 
| 
      
 1456 
     | 
    
         
            +
              VALUE rlimit, new, rstep, new_off;
         
     | 
| 
      
 1457 
     | 
    
         
            +
              new_off = rhrdt__new_offset(self, 0.0);
         
     | 
| 
       1442 
1458 
     | 
    
         
             
              Data_Get_Struct(self, rhrdt_t, d);
         
     | 
| 
       1443 
     | 
    
         
            -
              Data_Get_Struct( 
     | 
| 
      
 1459 
     | 
    
         
            +
              Data_Get_Struct(new_off, rhrdt_t, d0);
         
     | 
| 
       1444 
1460 
     | 
    
         | 
| 
       1445 
1461 
     | 
    
         
             
              switch(argc) {
         
     | 
| 
       1446 
1462 
     | 
    
         
             
                case 1:
         
     | 
| 
         @@ -1451,7 +1467,7 @@ static VALUE rhrdt_step(int argc, VALUE *argv, VALUE self) { 
     | 
|
| 
       1451 
1467 
     | 
    
         
             
                case 2:
         
     | 
| 
       1452 
1468 
     | 
    
         
             
                  rstep = argv[1];
         
     | 
| 
       1453 
1469 
     | 
    
         
             
                  step = NUM2DBL(rstep);
         
     | 
| 
       1454 
     | 
    
         
            -
                  step_jd = floor(step);
         
     | 
| 
      
 1470 
     | 
    
         
            +
                  step_jd = (long)floor(step);
         
     | 
| 
       1455 
1471 
     | 
    
         
             
                  step_nanos = llround((step - step_jd)*RHR_NANOS_PER_DAY);
         
     | 
| 
       1456 
1472 
     | 
    
         
             
                  break;
         
     | 
| 
       1457 
1473 
     | 
    
         
             
                default:
         
     | 
| 
         @@ -1470,10 +1486,10 @@ static VALUE rhrdt_step(int argc, VALUE *argv, VALUE self) { 
     | 
|
| 
       1470 
1486 
     | 
    
         | 
| 
       1471 
1487 
     | 
    
         
             
              if (RTEST(rb_obj_is_kind_of(rlimit, rb_cNumeric))) {
         
     | 
| 
       1472 
1488 
     | 
    
         
             
                limit = NUM2DBL(rlimit);
         
     | 
| 
       1473 
     | 
    
         
            -
                limit_jd = floor(limit);
         
     | 
| 
      
 1489 
     | 
    
         
            +
                limit_jd = (long)floor(limit);
         
     | 
| 
       1474 
1490 
     | 
    
         
             
                limit_nanos = llround((limit - limit_jd)*RHR_NANOS_PER_DAY);
         
     | 
| 
       1475 
1491 
     | 
    
         
             
              } else if (RTEST((rb_obj_is_kind_of(rlimit, rhrdt_class)))) {
         
     | 
| 
       1476 
     | 
    
         
            -
                rlimit = rhrdt__new_offset(rlimit, 0);
         
     | 
| 
      
 1492 
     | 
    
         
            +
                rlimit = rhrdt__new_offset(rlimit, 0.0);
         
     | 
| 
       1477 
1493 
     | 
    
         
             
                Data_Get_Struct(rlimit, rhrdt_t, ndt);
         
     | 
| 
       1478 
1494 
     | 
    
         
             
                RHRDT_FILL_JD(ndt)
         
     | 
| 
       1479 
1495 
     | 
    
         
             
                RHRDT_FILL_NANOS(ndt)
         
     | 
| 
         @@ -1571,8 +1587,8 @@ static VALUE rhrdt_to_s(VALUE self) { 
     | 
|
| 
       1571 
1587 
     | 
    
         
             
              RHRDT_FILL_HMS(dt)
         
     | 
| 
       1572 
1588 
     | 
    
         | 
| 
       1573 
1589 
     | 
    
         
             
              s = rb_str_buf_new(128);
         
     | 
| 
       1574 
     | 
    
         
            -
              len = snprintf(RSTRING_PTR(s), 128, "%04li-% 
     | 
| 
       1575 
     | 
    
         
            -
                    dt->year, dt->month, dt->day, dt->hour, dt->minute, dt->second, dt->offset/60, abs(dt->offset % 60));
         
     | 
| 
      
 1590 
     | 
    
         
            +
              len = snprintf(RSTRING_PTR(s), 128, "%04li-%02i-%02iT%02i:%02i:%02i%+03i:%02i",
         
     | 
| 
      
 1591 
     | 
    
         
            +
                    dt->year, (int)dt->month, (int)dt->day, (int)dt->hour, (int)dt->minute, (int)dt->second, dt->offset/60, abs(dt->offset % 60));
         
     | 
| 
       1576 
1592 
     | 
    
         
             
              if (len == -1 || len > 127) {
         
     | 
| 
       1577 
1593 
     | 
    
         
             
                rb_raise(rb_eNoMemError, "in DateTime#to_s (in snprintf)");
         
     | 
| 
       1578 
1594 
     | 
    
         
             
              }
         
     | 
| 
         @@ -1772,8 +1788,8 @@ static VALUE rhrdt_op_minus(VALUE self, VALUE other) { 
     | 
|
| 
       1772 
1788 
     | 
    
         
             
                return rhrdt__add_days(self, -NUM2DBL(other));
         
     | 
| 
       1773 
1789 
     | 
    
         
             
              }
         
     | 
| 
       1774 
1790 
     | 
    
         
             
              if (RTEST((rb_obj_is_kind_of(other, rhrdt_class)))) {
         
     | 
| 
       1775 
     | 
    
         
            -
                self = rhrdt__new_offset(self, 0);
         
     | 
| 
       1776 
     | 
    
         
            -
                other = rhrdt__new_offset(other, 0);
         
     | 
| 
      
 1791 
     | 
    
         
            +
                self = rhrdt__new_offset(self, 0.0);
         
     | 
| 
      
 1792 
     | 
    
         
            +
                other = rhrdt__new_offset(other, 0.0);
         
     | 
| 
       1777 
1793 
     | 
    
         
             
                Data_Get_Struct(self, rhrdt_t, dt);
         
     | 
| 
       1778 
1794 
     | 
    
         
             
                Data_Get_Struct(other, rhrdt_t, newdt);
         
     | 
| 
       1779 
1795 
     | 
    
         
             
                RHRDT_FILL_JD(dt)
         
     | 
| 
         @@ -1781,11 +1797,11 @@ static VALUE rhrdt_op_minus(VALUE self, VALUE other) { 
     | 
|
| 
       1781 
1797 
     | 
    
         
             
                RHRDT_FILL_JD(newdt)
         
     | 
| 
       1782 
1798 
     | 
    
         
             
                RHRDT_FILL_NANOS(newdt)
         
     | 
| 
       1783 
1799 
     | 
    
         
             
                if (dt->nanos == newdt->nanos) {
         
     | 
| 
       1784 
     | 
    
         
            -
                  return rb_float_new(dt->jd - newdt->jd);
         
     | 
| 
      
 1800 
     | 
    
         
            +
                  return rb_float_new((double)(dt->jd - newdt->jd));
         
     | 
| 
       1785 
1801 
     | 
    
         
             
                } else if (dt->jd == newdt->jd) 
         
     | 
| 
       1786 
     | 
    
         
            -
                  return rb_float_new((dt->nanos - newdt->nanos)/RHR_NANOS_PER_DAYD);
         
     | 
| 
      
 1802 
     | 
    
         
            +
                  return rb_float_new((double)(dt->nanos - newdt->nanos)/RHR_NANOS_PER_DAYD);
         
     | 
| 
       1787 
1803 
     | 
    
         
             
                else {
         
     | 
| 
       1788 
     | 
    
         
            -
                  return rb_float_new((dt->jd - newdt->jd) + (dt->nanos - newdt->nanos)/RHR_NANOS_PER_DAYD);
         
     | 
| 
      
 1804 
     | 
    
         
            +
                  return rb_float_new((dt->jd - newdt->jd) + (double)(dt->nanos - newdt->nanos)/RHR_NANOS_PER_DAYD);
         
     | 
| 
       1789 
1805 
     | 
    
         
             
                }
         
     | 
| 
       1790 
1806 
     | 
    
         
             
              }
         
     | 
| 
       1791 
1807 
     | 
    
         
             
              if (RTEST((rb_obj_is_kind_of(other, rhrd_class)))) {
         
     | 
| 
         @@ -1794,7 +1810,7 @@ static VALUE rhrdt_op_minus(VALUE self, VALUE other) { 
     | 
|
| 
       1794 
1810 
     | 
    
         
             
                RHRDT_FILL_JD(dt)
         
     | 
| 
       1795 
1811 
     | 
    
         
             
                RHRDT_FILL_NANOS(dt)
         
     | 
| 
       1796 
1812 
     | 
    
         
             
                RHR_FILL_JD(newd)
         
     | 
| 
       1797 
     | 
    
         
            -
                return rb_float_new((dt->jd - newd->jd) + dt->nanos/RHR_NANOS_PER_DAYD); 
         
     | 
| 
      
 1813 
     | 
    
         
            +
                return rb_float_new((dt->jd - newd->jd) + (double)dt->nanos/RHR_NANOS_PER_DAYD); 
         
     | 
| 
       1798 
1814 
     | 
    
         
             
              }
         
     | 
| 
       1799 
1815 
     | 
    
         
             
              rb_raise(rb_eTypeError, "expected numeric or date");
         
     | 
| 
       1800 
1816 
     | 
    
         
             
            }
         
     | 
| 
         @@ -1865,8 +1881,8 @@ static VALUE rhrdt_op_spaceship(VALUE self, VALUE other) { 
     | 
|
| 
       1865 
1881 
     | 
    
         
             
              int res;
         
     | 
| 
       1866 
1882 
     | 
    
         | 
| 
       1867 
1883 
     | 
    
         
             
              if (RTEST(rb_obj_is_kind_of(other, rhrdt_class))) {
         
     | 
| 
       1868 
     | 
    
         
            -
                self = rhrdt__new_offset(self, 0);
         
     | 
| 
       1869 
     | 
    
         
            -
                other = rhrdt__new_offset(other, 0);
         
     | 
| 
      
 1884 
     | 
    
         
            +
                self = rhrdt__new_offset(self, 0.0);
         
     | 
| 
      
 1885 
     | 
    
         
            +
                other = rhrdt__new_offset(other, 0.0);
         
     | 
| 
       1870 
1886 
     | 
    
         
             
                Data_Get_Struct(self, rhrdt_t, dt);
         
     | 
| 
       1871 
1887 
     | 
    
         
             
                Data_Get_Struct(other, rhrdt_t, odt);
         
     | 
| 
       1872 
1888 
     | 
    
         
             
                return LONG2NUM(rhrdt__spaceship(dt, odt));
         
     | 
| 
         @@ -1918,7 +1934,7 @@ VALUE rhrdt__add_years(VALUE self, long n) { 
     | 
|
| 
       1918 
1934 
     | 
    
         
             
              } 
         
     | 
| 
       1919 
1935 
     | 
    
         | 
| 
       1920 
1936 
     | 
    
         
             
              RHR_CHECK_CIVIL(newd)
         
     | 
| 
       1921 
     | 
    
         
            -
              newd->flags &= ~RHR_HAVE_JD;
         
     | 
| 
      
 1937 
     | 
    
         
            +
              newd->flags &= (unsigned char)~RHR_HAVE_JD;
         
     | 
| 
       1922 
1938 
     | 
    
         
             
              return new;
         
     | 
| 
       1923 
1939 
     | 
    
         
             
            }
         
     | 
| 
       1924 
1940 
     | 
    
         | 
| 
         @@ -1943,7 +1959,7 @@ long rhrdt__add_iso_time_format(rhrdt_t *dt, char *str, long len, long i) { 
     | 
|
| 
       1943 
1959 
     | 
    
         
             
                i = 9;
         
     | 
| 
       1944 
1960 
     | 
    
         
             
              }
         
     | 
| 
       1945 
1961 
     | 
    
         | 
| 
       1946 
     | 
    
         
            -
              l = snprintf(str + len, 128 - len, "T% 
     | 
| 
      
 1962 
     | 
    
         
            +
              l = snprintf(str + len, (size_t)(128 - len), "T%02i:%02i:%02i", (int)dt->hour, (int)dt->minute, (int)dt->second);
         
     | 
| 
       1947 
1963 
     | 
    
         
             
              if (l == -1 || l > 127) {
         
     | 
| 
       1948 
1964 
     | 
    
         
             
                rb_raise(rb_eNoMemError, "in DateTime formatting method (in snprintf)");
         
     | 
| 
       1949 
1965 
     | 
    
         
             
              }
         
     | 
| 
         @@ -1951,14 +1967,14 @@ long rhrdt__add_iso_time_format(rhrdt_t *dt, char *str, long len, long i) { 
     | 
|
| 
       1951 
1967 
     | 
    
         | 
| 
       1952 
1968 
     | 
    
         
             
              if (i) {
         
     | 
| 
       1953 
1969 
     | 
    
         
             
                RHRDT_FILL_NANOS(dt)
         
     | 
| 
       1954 
     | 
    
         
            -
                l = snprintf(str + len, 128 - len, ".%09lli", dt->nanos % RHR_NANOS_PER_SECOND);
         
     | 
| 
      
 1970 
     | 
    
         
            +
                l = snprintf(str + len, (size_t)(128 - len), ".%09lli", dt->nanos % RHR_NANOS_PER_SECOND);
         
     | 
| 
       1955 
1971 
     | 
    
         
             
                if (l == -1 || l > 127) {
         
     | 
| 
       1956 
1972 
     | 
    
         
             
                  rb_raise(rb_eNoMemError, "in DateTime formatting method (in snprintf)");
         
     | 
| 
       1957 
1973 
     | 
    
         
             
                }
         
     | 
| 
       1958 
1974 
     | 
    
         
             
                len += i + 1;
         
     | 
| 
       1959 
1975 
     | 
    
         
             
              }
         
     | 
| 
       1960 
1976 
     | 
    
         | 
| 
       1961 
     | 
    
         
            -
              l = snprintf(str + len, 128 - len, "%+03i:%02i", dt->offset/60, abs(dt->offset % 60));
         
     | 
| 
      
 1977 
     | 
    
         
            +
              l = snprintf(str + len, (size_t)(128 - len), "%+03i:%02i", dt->offset/60, abs(dt->offset % 60));
         
     | 
| 
       1962 
1978 
     | 
    
         
             
              if (l == -1 || l > 127) {
         
     | 
| 
       1963 
1979 
     | 
    
         
             
                rb_raise(rb_eNoMemError, "in DateTime formatting method (in snprintf)");
         
     | 
| 
       1964 
1980 
     | 
    
         
             
              }
         
     | 
| 
         @@ -2193,18 +2209,18 @@ static VALUE rhrdt_httpdate(VALUE self) { 
     | 
|
| 
       2193 
2209 
     | 
    
         
             
              VALUE s;
         
     | 
| 
       2194 
2210 
     | 
    
         
             
              rhrdt_t *d;
         
     | 
| 
       2195 
2211 
     | 
    
         
             
              int len;
         
     | 
| 
       2196 
     | 
    
         
            -
              s = rhrdt__new_offset(self, 0);
         
     | 
| 
      
 2212 
     | 
    
         
            +
              s = rhrdt__new_offset(self, 0.0);
         
     | 
| 
       2197 
2213 
     | 
    
         
             
              Data_Get_Struct(s, rhrdt_t, d);
         
     | 
| 
       2198 
2214 
     | 
    
         
             
              RHRDT_FILL_JD(d)
         
     | 
| 
       2199 
2215 
     | 
    
         
             
              RHRDT_FILL_CIVIL(d)
         
     | 
| 
       2200 
2216 
     | 
    
         
             
              RHRDT_FILL_HMS(d)
         
     | 
| 
       2201 
2217 
     | 
    
         | 
| 
       2202 
2218 
     | 
    
         
             
              s = rb_str_buf_new(128);
         
     | 
| 
       2203 
     | 
    
         
            -
              len = snprintf(RSTRING_PTR(s), 128, "%s, % 
     | 
| 
      
 2219 
     | 
    
         
            +
              len = snprintf(RSTRING_PTR(s), 128, "%s, %02i %s %04li %02i:%02i:%02i GMT", 
         
     | 
| 
       2204 
2220 
     | 
    
         
             
                    rhrd__abbr_day_names[rhrd__jd_to_wday(d->jd)],
         
     | 
| 
       2205 
     | 
    
         
            -
                    d->day,
         
     | 
| 
      
 2221 
     | 
    
         
            +
                    (int)d->day,
         
     | 
| 
       2206 
2222 
     | 
    
         
             
                    rhrd__abbr_month_names[d->month],
         
     | 
| 
       2207 
     | 
    
         
            -
                    d->year, d->hour, d->minute, d->second);
         
     | 
| 
      
 2223 
     | 
    
         
            +
                    d->year, (int)d->hour, (int)d->minute, (int)d->second);
         
     | 
| 
       2208 
2224 
     | 
    
         
             
              if (len == -1 || len > 127) {
         
     | 
| 
       2209 
2225 
     | 
    
         
             
                rb_raise(rb_eNoMemError, "in DateTime#httpdate (in snprintf)");
         
     | 
| 
       2210 
2226 
     | 
    
         
             
              }
         
     | 
| 
         @@ -2250,7 +2266,7 @@ static VALUE rhrdt_iso8601(int argc, VALUE *argv, VALUE self) { 
     | 
|
| 
       2250 
2266 
     | 
    
         
             
              s = rb_str_buf_new(128);
         
     | 
| 
       2251 
2267 
     | 
    
         
             
              str = RSTRING_PTR(s);
         
     | 
| 
       2252 
2268 
     | 
    
         | 
| 
       2253 
     | 
    
         
            -
              len = snprintf(str, 128, "%04li-% 
     | 
| 
      
 2269 
     | 
    
         
            +
              len = snprintf(str, 128, "%04li-%02i-%02i", dt->year, (int)dt->month, (int)dt->day);
         
     | 
| 
       2254 
2270 
     | 
    
         
             
              if (len == -1 || len > 127) {
         
     | 
| 
       2255 
2271 
     | 
    
         
             
                rb_raise(rb_eNoMemError, "in DateTime#to_s (in snprintf)");
         
     | 
| 
       2256 
2272 
     | 
    
         
             
              }
         
     | 
| 
         @@ -2301,7 +2317,7 @@ static VALUE rhrdt_jisx0301(int argc, VALUE *argv, VALUE self) { 
     | 
|
| 
       2301 
2317 
     | 
    
         
             
              str = RSTRING_PTR(s); 
         
     | 
| 
       2302 
2318 
     | 
    
         | 
| 
       2303 
2319 
     | 
    
         
             
              if (d->jd < 2405160) {
         
     | 
| 
       2304 
     | 
    
         
            -
                len = snprintf(str, 128, "%04li-% 
     | 
| 
      
 2320 
     | 
    
         
            +
                len = snprintf(str, 128, "%04li-%02i-%02i", d->year, (int)d->month, (int)d->day);
         
     | 
| 
       2305 
2321 
     | 
    
         
             
              } else {
         
     | 
| 
       2306 
2322 
     | 
    
         
             
                if (d->jd >= 2447535) {
         
     | 
| 
       2307 
2323 
     | 
    
         
             
                  c = 'H';
         
     | 
| 
         @@ -2316,7 +2332,7 @@ static VALUE rhrdt_jisx0301(int argc, VALUE *argv, VALUE self) { 
     | 
|
| 
       2316 
2332 
     | 
    
         
             
                  c = 'M';
         
     | 
| 
       2317 
2333 
     | 
    
         
             
                  year = d->year - 1867;
         
     | 
| 
       2318 
2334 
     | 
    
         
             
                }
         
     | 
| 
       2319 
     | 
    
         
            -
                len = snprintf(RSTRING_PTR(s), 128, "%c%02li.% 
     | 
| 
      
 2335 
     | 
    
         
            +
                len = snprintf(RSTRING_PTR(s), 128, "%c%02li.%02i.%02i", c, year, (int)d->month, (int)d->day);
         
     | 
| 
       2320 
2336 
     | 
    
         
             
              }
         
     | 
| 
       2321 
2337 
     | 
    
         
             
              if (len == -1 || len > 127) {
         
     | 
| 
       2322 
2338 
     | 
    
         
             
                rb_raise(rb_eNoMemError, "in DateTime#jisx0301 (in snprintf)");
         
     | 
| 
         @@ -2354,7 +2370,7 @@ static VALUE rhrdt_next_day(int argc, VALUE *argv, VALUE self) { 
     | 
|
| 
       2354 
2370 
     | 
    
         
             
                  break;
         
     | 
| 
       2355 
2371 
     | 
    
         
             
              }
         
     | 
| 
       2356 
2372 
     | 
    
         | 
| 
       2357 
     | 
    
         
            -
               return rhrdt__add_days(self, i);
         
     | 
| 
      
 2373 
     | 
    
         
            +
               return rhrdt__add_days(self, (double)i);
         
     | 
| 
       2358 
2374 
     | 
    
         
             
            }
         
     | 
| 
       2359 
2375 
     | 
    
         | 
| 
       2360 
2376 
     | 
    
         
             
            /* call-seq:
         
     | 
| 
         @@ -2447,7 +2463,7 @@ static VALUE rhrdt_prev_day(int argc, VALUE *argv, VALUE self) { 
     | 
|
| 
       2447 
2463 
     | 
    
         
             
                  break;
         
     | 
| 
       2448 
2464 
     | 
    
         
             
              }
         
     | 
| 
       2449 
2465 
     | 
    
         | 
| 
       2450 
     | 
    
         
            -
               return rhrdt__add_days(self, i);
         
     | 
| 
      
 2466 
     | 
    
         
            +
               return rhrdt__add_days(self, (double)i);
         
     | 
| 
       2451 
2467 
     | 
    
         
             
            }
         
     | 
| 
       2452 
2468 
     | 
    
         | 
| 
       2453 
2469 
     | 
    
         
             
            /* call-seq:
         
     | 
| 
         @@ -2531,11 +2547,11 @@ static VALUE rhrdt_rfc2822(VALUE self) { 
     | 
|
| 
       2531 
2547 
     | 
    
         
             
              RHRDT_FILL_HMS(d)
         
     | 
| 
       2532 
2548 
     | 
    
         | 
| 
       2533 
2549 
     | 
    
         
             
              s = rb_str_buf_new(128);
         
     | 
| 
       2534 
     | 
    
         
            -
              len = snprintf(RSTRING_PTR(s), 128, "%s, % 
     | 
| 
      
 2550 
     | 
    
         
            +
              len = snprintf(RSTRING_PTR(s), 128, "%s, %i %s %04li %02i:%02i:%02i %+03i%02i", 
         
     | 
| 
       2535 
2551 
     | 
    
         
             
                    rhrd__abbr_day_names[rhrd__jd_to_wday(d->jd)],
         
     | 
| 
       2536 
     | 
    
         
            -
                    d->day,
         
     | 
| 
      
 2552 
     | 
    
         
            +
                    (int)d->day,
         
     | 
| 
       2537 
2553 
     | 
    
         
             
                    rhrd__abbr_month_names[d->month],
         
     | 
| 
       2538 
     | 
    
         
            -
                    d->year, d->hour, d->minute, d->second, d->offset/60, abs(d->offset % 60));
         
     | 
| 
      
 2554 
     | 
    
         
            +
                    d->year, (int)d->hour, (int)d->minute, (int)d->second, d->offset/60, abs(d->offset % 60));
         
     | 
| 
       2539 
2555 
     | 
    
         
             
              if (len == -1 || len > 127) {
         
     | 
| 
       2540 
2556 
     | 
    
         
             
                rb_raise(rb_eNoMemError, "in DateTime#rfc2822 (in snprintf)");
         
     | 
| 
       2541 
2557 
     | 
    
         
             
              }
         
     | 
| 
         @@ -2594,10 +2610,10 @@ static VALUE rhrdt_to_time(VALUE self) { 
     | 
|
| 
       2594 
2610 
     | 
    
         
             
              RHRDT_FILL_CIVIL(dt)
         
     | 
| 
       2595 
2611 
     | 
    
         
             
              RHRDT_FILL_HMS(dt)
         
     | 
| 
       2596 
2612 
     | 
    
         | 
| 
       2597 
     | 
    
         
            -
              s = dt->nanos/RHR_NANOS_PER_SECOND;
         
     | 
| 
      
 2613 
     | 
    
         
            +
              s = (long)(dt->nanos/RHR_NANOS_PER_SECOND);
         
     | 
| 
       2598 
2614 
     | 
    
         
             
              h = s/RHR_SECONDS_PER_HOUR;
         
     | 
| 
       2599 
2615 
     | 
    
         
             
              m = (s % RHR_SECONDS_PER_HOUR) / 60;
         
     | 
| 
       2600 
     | 
    
         
            -
              return rb_funcall(rb_funcall(rb_cTime, rhrd_id_utc, 6, LONG2NUM(dt->year), LONG2NUM(dt->month), LONG2NUM(dt->day), LONG2NUM(h), LONG2NUM(m), rb_float_new(s % 60 + (dt->nanos % RHR_NANOS_PER_SECOND)/RHR_NANOS_PER_SECONDD)), rhrd_id_localtime, 0);
         
     | 
| 
      
 2616 
     | 
    
         
            +
              return rb_funcall(rb_funcall(rb_cTime, rhrd_id_utc, 6, LONG2NUM(dt->year), LONG2NUM(dt->month), LONG2NUM(dt->day), LONG2NUM(h), LONG2NUM(m), rb_float_new(s % 60 + (double)(dt->nanos % RHR_NANOS_PER_SECOND)/RHR_NANOS_PER_SECONDD)), rhrd_id_localtime, 0);
         
     | 
| 
       2601 
2617 
     | 
    
         
             
            }
         
     | 
| 
       2602 
2618 
     | 
    
         | 
| 
       2603 
2619 
     | 
    
         
             
            /* call-seq:
         
     | 
| 
         @@ -2624,7 +2640,7 @@ static VALUE rhrdt_time_to_datetime(VALUE self) { 
     | 
|
| 
       2624 
2640 
     | 
    
         
             
            #else
         
     | 
| 
       2625 
2641 
     | 
    
         
             
              dt->nanos = rhrd__mod(t, RHR_SECONDS_PER_DAY) * RHR_NANOS_PER_SECOND + NUM2LONG(rb_funcall(self, rhrd_id_usec, 0)) * 1000;
         
     | 
| 
       2626 
2642 
     | 
    
         
             
            #endif
         
     | 
| 
       2627 
     | 
    
         
            -
              dt->offset = offset/60;
         
     | 
| 
      
 2643 
     | 
    
         
            +
              dt->offset = (short)(offset/60);
         
     | 
| 
       2628 
2644 
     | 
    
         
             
              dt->flags |= RHR_HAVE_JD | RHR_HAVE_NANOS;
         
     | 
| 
       2629 
2645 
     | 
    
         
             
              RHR_CHECK_JD(dt);
         
     | 
| 
       2630 
2646 
     | 
    
         
             
              return rd;
         
     | 
    
        data/ext/date_ext/extconf.rb
    CHANGED
    
    | 
         @@ -3,4 +3,6 @@ $CFLAGS << " -DRUBY19" if  RUBY_VERSION >= '1.9.0' 
     | 
|
| 
       3 
3 
     | 
    
         
             
            $CFLAGS << " -DRUBY186" if  RUBY_VERSION < '1.8.7'
         
     | 
| 
       4 
4 
     | 
    
         
             
            $CFLAGS << " -Wall " unless RUBY_PLATFORM =~ /solaris/
         
     | 
| 
       5 
5 
     | 
    
         
             
            $CFLAGS << ' -g -ggdb -rdynamic -O0 -DDEBUG' if ENV['DEBUG']
         
     | 
| 
      
 6 
     | 
    
         
            +
            $CFLAGS << " -Wconversion -Wsign-compare -Wno-unused-parameter -Wwrite-strings -Wpointer-arith -fno-common -pedantic -Wno-long-long" if ENV['STRICT']
         
     | 
| 
      
 7 
     | 
    
         
            +
            $CFLAGS << (ENV['CFLAGS'] || '')
         
     | 
| 
       6 
8 
     | 
    
         
             
            create_makefile("date_ext")
         
     | 
    
        data/lib/1.8/date_ext.so
    CHANGED
    
    | 
         Binary file 
     | 
    
        data/lib/1.9/date_ext.so
    CHANGED
    
    | 
         Binary file 
     | 
| 
         @@ -40,10 +40,19 @@ describe "DateTime#sec" do 
     | 
|
| 
       40 
40 
     | 
    
         
             
            end
         
     | 
| 
       41 
41 
     | 
    
         | 
| 
       42 
42 
     | 
    
         
             
            describe "DateTime#sec_fraction" do
         
     | 
| 
       43 
     | 
    
         
            -
               
     | 
| 
       44 
     | 
    
         
            -
                 
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
      
 43 
     | 
    
         
            +
              ruby_version_is "" ... "1.9" do
         
     | 
| 
      
 44 
     | 
    
         
            +
                it "should be the fraction of a second as a fraction of the day" do
         
     | 
| 
      
 45 
     | 
    
         
            +
                  DateTime.new(2008, 1, 1).sec_fraction.should == 0.0
         
     | 
| 
      
 46 
     | 
    
         
            +
                  DateTime.parse('12:13:15.678900').sec_fraction.should be_close(7.85763888888889e-06, 0.0000000000001)
         
     | 
| 
      
 47 
     | 
    
         
            +
                end 
         
     | 
| 
      
 48 
     | 
    
         
            +
              end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
              ruby_version_is "1.9" do
         
     | 
| 
      
 51 
     | 
    
         
            +
                it "should be the fraction of a second" do
         
     | 
| 
      
 52 
     | 
    
         
            +
                  DateTime.new(2008, 1, 1).sec_fraction.should == 0.0
         
     | 
| 
      
 53 
     | 
    
         
            +
                  DateTime.parse('12:13:15.678900').sec_fraction.should be_close(0.6789, 0.0000000000001)
         
     | 
| 
      
 54 
     | 
    
         
            +
                end 
         
     | 
| 
      
 55 
     | 
    
         
            +
              end
         
     | 
| 
       47 
56 
     | 
    
         
             
            end
         
     | 
| 
       48 
57 
     | 
    
         | 
| 
       49 
58 
     | 
    
         
             
            describe "DateTime#zone" do
         
     | 
    
        data/spec/datetime/parse_spec.rb
    CHANGED
    
    | 
         @@ -1,7 +1,16 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            require File.expand_path('../../spec_helper', __FILE__)
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            describe "DateTime 
     | 
| 
      
 3 
     | 
    
         
            +
            describe "DateTime._parse" do
         
     | 
| 
      
 4 
     | 
    
         
            +
              it "should return a hash of values" do
         
     | 
| 
      
 5 
     | 
    
         
            +
                DateTime._parse("01:02:03").should == {:hour=>1, :min=>2, :sec=>3}
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              it "should have :sec_fraction entry be the fraction of second" do
         
     | 
| 
      
 9 
     | 
    
         
            +
                DateTime._parse('12:13:15.678900')[:sec_fraction].should be_close(0.6789, 0.0000000000001)
         
     | 
| 
      
 10 
     | 
    
         
            +
              end 
         
     | 
| 
      
 11 
     | 
    
         
            +
            end
         
     | 
| 
       4 
12 
     | 
    
         | 
| 
      
 13 
     | 
    
         
            +
            describe "DateTime.parse" do
         
     | 
| 
       5 
14 
     | 
    
         
             
              it "should have defaults and an optional sg value" do
         
     | 
| 
       6 
15 
     | 
    
         
             
                DateTime.parse('2008-10-11').should == DateTime.civil(2008, 10, 11)
         
     | 
| 
       7 
16 
     | 
    
         
             
                DateTime.parse('2008-10-11', true).should == DateTime.civil(2008, 10, 11)
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,13 +1,13 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification 
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: home_run
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
     | 
    
         
            -
              hash:  
     | 
| 
      
 4 
     | 
    
         
            +
              hash: 63
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       6 
6 
     | 
    
         
             
              segments: 
         
     | 
| 
       7 
7 
     | 
    
         
             
              - 0
         
     | 
| 
       8 
8 
     | 
    
         
             
              - 9
         
     | 
| 
       9 
     | 
    
         
            -
              -  
     | 
| 
       10 
     | 
    
         
            -
              version: 0.9. 
     | 
| 
      
 9 
     | 
    
         
            +
              - 2
         
     | 
| 
      
 10 
     | 
    
         
            +
              version: 0.9.2
         
     | 
| 
       11 
11 
     | 
    
         
             
            platform: x86-mswin32-60
         
     | 
| 
       12 
12 
     | 
    
         
             
            authors: 
         
     | 
| 
       13 
13 
     | 
    
         
             
            - Jeremy Evans
         
     | 
| 
         @@ -15,7 +15,7 @@ autorequire: 
     | 
|
| 
       15 
15 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       16 
16 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
            date: 2010- 
     | 
| 
      
 18 
     | 
    
         
            +
            date: 2010-09-12 00:00:00 -07:00
         
     | 
| 
       19 
19 
     | 
    
         
             
            default_executable: 
         
     | 
| 
       20 
20 
     | 
    
         
             
            dependencies: []
         
     | 
| 
       21 
21 
     | 
    
         |