зеркало из https://github.com/github/ruby.git
* time.c: use more polymorphic operations.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27121 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
91616a00ba
Коммит
39146c6b6b
|
@ -1,3 +1,7 @@
|
||||||
|
Tue Mar 30 22:24:19 2010 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
|
* time.c: use more polymorphic operations.
|
||||||
|
|
||||||
Tue Mar 30 22:12:38 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
|
Tue Mar 30 22:12:38 2010 Kazuhiro NISHIYAMA <zn@mbf.nifty.com>
|
||||||
|
|
||||||
* NEWS: add URI.decode and URI.encode to Obsoleted methods,
|
* NEWS: add URI.decode and URI.encode to Obsoleted methods,
|
||||||
|
|
41
time.c
41
time.c
|
@ -85,7 +85,7 @@ static ID id_eq, id_ne, id_quo, id_div, id_cmp, id_lshift;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if WIDEVALUE_IS_WIDER
|
#if WIDEVALUE_IS_WIDER
|
||||||
static wideval_t
|
static inline wideval_t
|
||||||
wint2wv(wideint_t wi)
|
wint2wv(wideint_t wi)
|
||||||
{
|
{
|
||||||
if (FIXWVABLE(wi))
|
if (FIXWVABLE(wi))
|
||||||
|
@ -323,10 +323,7 @@ wadd(wideval_t wx, wideval_t wy)
|
||||||
#if WIDEVALUE_IS_WIDER
|
#if WIDEVALUE_IS_WIDER
|
||||||
if (FIXWV_P(wx) && FIXWV_P(wy)) {
|
if (FIXWV_P(wx) && FIXWV_P(wy)) {
|
||||||
wideint_t r = FIXWV2WINT(wx) + FIXWV2WINT(wy);
|
wideint_t r = FIXWV2WINT(wx) + FIXWV2WINT(wy);
|
||||||
if (FIXWVABLE(r)) {
|
return WINT2WV(r);
|
||||||
return WINT2FIXWV(r);
|
|
||||||
}
|
|
||||||
return v2w(INT64toNUM(r));
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
@ -342,14 +339,10 @@ wsub(wideval_t wx, wideval_t wy)
|
||||||
#if WIDEVALUE_IS_WIDER
|
#if WIDEVALUE_IS_WIDER
|
||||||
if (FIXWV_P(wx) && FIXWV_P(wy)) {
|
if (FIXWV_P(wx) && FIXWV_P(wy)) {
|
||||||
wideint_t r = FIXWV2WINT(wx) - FIXWV2WINT(wy);
|
wideint_t r = FIXWV2WINT(wx) - FIXWV2WINT(wy);
|
||||||
if (FIXWVABLE(r)) {
|
return WINT2WV(r);
|
||||||
return WINT2FIXWV(r);
|
|
||||||
}
|
|
||||||
return v2w(INT64toNUM(r));
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
x = w2v(wx);
|
x = w2v(wx);
|
||||||
if (TYPE(x) == T_BIGNUM) return v2w(rb_big_minus(x, w2v(wy)));
|
if (TYPE(x) == T_BIGNUM) return v2w(rb_big_minus(x, w2v(wy)));
|
||||||
return v2w(rb_funcall(x, '-', 1, w2v(wy)));
|
return v2w(rb_funcall(x, '-', 1, w2v(wy)));
|
||||||
|
@ -366,8 +359,8 @@ wmul(wideval_t wx, wideval_t wy)
|
||||||
if (a == 0) return wx;
|
if (a == 0) return wx;
|
||||||
b = FIXWV2WINT(wy);
|
b = FIXWV2WINT(wy);
|
||||||
c = a * b;
|
c = a * b;
|
||||||
if (c / a == b && FIXWVABLE(c)) {
|
if (c / a == b) {
|
||||||
return WINT2FIXWV(c);
|
return WINT2WV(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -424,7 +417,7 @@ wquo(wideval_t wx, wideval_t wy)
|
||||||
}
|
}
|
||||||
|
|
||||||
#define wmulquo(x,y,z) ((WIDEVAL_GET(y) == WIDEVAL_GET(z)) ? (x) : wquo(wmul((x),(y)),(z)))
|
#define wmulquo(x,y,z) ((WIDEVAL_GET(y) == WIDEVAL_GET(z)) ? (x) : wquo(wmul((x),(y)),(z)))
|
||||||
#define wmulquoll(x,y,z) (((y) == (z)) ? (x) : wquo(wmul((x),v2w(LONG2FIX(y))),v2w(LONG2FIX(z))))
|
#define wmulquoll(x,y,z) (((y) == (z)) ? (x) : wquo(wmul((x),WINT2WV(y)),WINT2WV(z)))
|
||||||
|
|
||||||
static void
|
static void
|
||||||
wdivmodv(wideval_t wn, wideval_t wd, wideval_t *wq, wideval_t *wr)
|
wdivmodv(wideval_t wn, wideval_t wd, wideval_t *wq, wideval_t *wr)
|
||||||
|
@ -611,7 +604,7 @@ static void
|
||||||
split_second(wideval_t timew, VALUE *timev_p, VALUE *subsecx_p)
|
split_second(wideval_t timew, VALUE *timev_p, VALUE *subsecx_p)
|
||||||
{
|
{
|
||||||
wideval_t q, r;
|
wideval_t q, r;
|
||||||
wdivmodv(timew, v2w(INT2FIX(TIME_SCALE)), &q, &r);
|
wdivmodv(timew, WINT2FIXWV(TIME_SCALE), &q, &r);
|
||||||
*timev_p = w2v(q);
|
*timev_p = w2v(q);
|
||||||
*subsecx_p = w2v(r);
|
*subsecx_p = w2v(r);
|
||||||
}
|
}
|
||||||
|
@ -756,7 +749,7 @@ timegmw_noleapsecond(struct vtm *vtm)
|
||||||
vdays = LONG2NUM(days_in400);
|
vdays = LONG2NUM(days_in400);
|
||||||
vdays = add(vdays, mul(q400, INT2FIX(97)));
|
vdays = add(vdays, mul(q400, INT2FIX(97)));
|
||||||
vdays = add(vdays, mul(year1900, INT2FIX(365)));
|
vdays = add(vdays, mul(year1900, INT2FIX(365)));
|
||||||
wret = wadd(rb_time_magnify(v2w(ret)), wmul(rb_time_magnify(v2w(vdays)), v2w(INT2FIX(86400))));
|
wret = wadd(rb_time_magnify(v2w(ret)), wmul(rb_time_magnify(v2w(vdays)), WINT2FIXWV(86400)));
|
||||||
wret = wadd(wret, v2w(vtm->subsecx));
|
wret = wadd(wret, v2w(vtm->subsecx));
|
||||||
|
|
||||||
return wret;
|
return wret;
|
||||||
|
@ -1097,7 +1090,7 @@ gmtimew(wideval_t timew, struct vtm *result)
|
||||||
VALUE subsecx;
|
VALUE subsecx;
|
||||||
VALUE timev;
|
VALUE timev;
|
||||||
|
|
||||||
if (wlt(timew, v2w(INT2FIX(0)))) {
|
if (wlt(timew, WINT2FIXWV(0))) {
|
||||||
gmtimew_noleapsecond(timew, result);
|
gmtimew_noleapsecond(timew, result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -1342,7 +1335,7 @@ timelocalw(struct vtm *vtm)
|
||||||
|
|
||||||
n = vtmcmp(vtm, &vtm1);
|
n = vtmcmp(vtm, &vtm1);
|
||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
timew1 = wsub(timew1, rb_time_magnify(v2w(INT2FIX(12*3600))));
|
timew1 = wsub(timew1, rb_time_magnify(WINT2FIXWV(12*3600)));
|
||||||
if (!localtimew(timew1, &vtm1))
|
if (!localtimew(timew1, &vtm1))
|
||||||
rb_raise(rb_eArgError, "localtimew error");
|
rb_raise(rb_eArgError, "localtimew error");
|
||||||
n = 1;
|
n = 1;
|
||||||
|
@ -1351,12 +1344,12 @@ timelocalw(struct vtm *vtm)
|
||||||
if (n < 0) {
|
if (n < 0) {
|
||||||
timew2 = timew1;
|
timew2 = timew1;
|
||||||
vtm2 = vtm1;
|
vtm2 = vtm1;
|
||||||
timew1 = wsub(timew1, rb_time_magnify(v2w(INT2FIX(24*3600))));
|
timew1 = wsub(timew1, rb_time_magnify(WINT2FIXWV(24*3600)));
|
||||||
if (!localtimew(timew1, &vtm1))
|
if (!localtimew(timew1, &vtm1))
|
||||||
rb_raise(rb_eArgError, "localtimew error");
|
rb_raise(rb_eArgError, "localtimew error");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
timew2 = wadd(timew1, rb_time_magnify(v2w(INT2FIX(24*3600))));
|
timew2 = wadd(timew1, rb_time_magnify(WINT2FIXWV(24*3600)));
|
||||||
if (!localtimew(timew2, &vtm2))
|
if (!localtimew(timew2, &vtm2))
|
||||||
rb_raise(rb_eArgError, "localtimew error");
|
rb_raise(rb_eArgError, "localtimew error");
|
||||||
}
|
}
|
||||||
|
@ -1564,7 +1557,7 @@ time_s_alloc(VALUE klass)
|
||||||
|
|
||||||
obj = TypedData_Make_Struct(klass, struct time_object, &time_data_type, tobj);
|
obj = TypedData_Make_Struct(klass, struct time_object, &time_data_type, tobj);
|
||||||
tobj->tm_got=0;
|
tobj->tm_got=0;
|
||||||
tobj->timew = v2w(INT2FIX(0));
|
tobj->timew = WINT2FIXWV(0);
|
||||||
|
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
@ -1618,7 +1611,7 @@ time_init_0(VALUE time)
|
||||||
time_modify(time);
|
time_modify(time);
|
||||||
GetTimeval(time, tobj);
|
GetTimeval(time, tobj);
|
||||||
tobj->tm_got=0;
|
tobj->tm_got=0;
|
||||||
tobj->timew = v2w(INT2FIX(0));
|
tobj->timew = WINT2FIXWV(0);
|
||||||
#ifdef HAVE_CLOCK_GETTIME
|
#ifdef HAVE_CLOCK_GETTIME
|
||||||
if (clock_gettime(CLOCK_REALTIME, &ts) == -1) {
|
if (clock_gettime(CLOCK_REALTIME, &ts) == -1) {
|
||||||
rb_sys_fail("clock_gettime");
|
rb_sys_fail("clock_gettime");
|
||||||
|
@ -1859,7 +1852,7 @@ time_init_1(int argc, VALUE *argv, VALUE time)
|
||||||
time_modify(time);
|
time_modify(time);
|
||||||
GetTimeval(time, tobj);
|
GetTimeval(time, tobj);
|
||||||
tobj->tm_got=0;
|
tobj->tm_got=0;
|
||||||
tobj->timew = v2w(INT2FIX(0));
|
tobj->timew = WINT2FIXWV(0);
|
||||||
|
|
||||||
if (!NIL_P(vtm.utc_offset)) {
|
if (!NIL_P(vtm.utc_offset)) {
|
||||||
VALUE off = vtm.utc_offset;
|
VALUE off = vtm.utc_offset;
|
||||||
|
@ -3434,7 +3427,7 @@ rb_time_succ(VALUE time)
|
||||||
|
|
||||||
rb_warn("Time#succ is obsolete; use time + 1");
|
rb_warn("Time#succ is obsolete; use time + 1");
|
||||||
GetTimeval(time, tobj);
|
GetTimeval(time, tobj);
|
||||||
time = time_new_timew(rb_cTime, wadd(tobj->timew, v2w(INT2FIX(TIME_SCALE))));
|
time = time_new_timew(rb_cTime, wadd(tobj->timew, WINT2FIXWV(TIME_SCALE)));
|
||||||
GetTimeval(time, tobj2);
|
GetTimeval(time, tobj2);
|
||||||
TIME_COPY_GMT(tobj2, tobj);
|
TIME_COPY_GMT(tobj2, tobj);
|
||||||
return time;
|
return time;
|
||||||
|
@ -4285,7 +4278,7 @@ time_mload(VALUE time, VALUE str)
|
||||||
sec = p;
|
sec = p;
|
||||||
usec = s;
|
usec = s;
|
||||||
nsec = usec * 1000;
|
nsec = usec * 1000;
|
||||||
timew = wadd(TIMET2WIDEVAL(sec), wmulquoll(v2w(LONG2FIX(usec)), TIME_SCALE, 1000000));
|
timew = wadd(TIMET2WIDEVAL(sec), wmulquoll(WINT2FIXWV(usec), TIME_SCALE, 1000000));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
p &= ~(1UL<<31);
|
p &= ~(1UL<<31);
|
||||||
|
|
Загрузка…
Ссылка в новой задаче