1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* ext/date/date_core.c: refactoring.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32236 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
tadf 2011-06-26 13:23:00 +00:00
parent d6e89e0c4e
commit 51a0501a39
2 changed files with 99 additions and 34 deletions

View file

@ -1,3 +1,7 @@
Sun Jun 26 22:21:23 2011 Tadayoshi Funaba <tadf@dotrb.org>
* ext/date/date_core.c: refactoring.
Sun Jun 26 18:03:30 2011 URABE Shyouhei <shyouhei@ruby-lang.org>
* parse.y: comma at the end of line is no longer allowed.

View file

@ -846,12 +846,11 @@ c_valid_time_p(int h, int min, int s, int *rh, int *rmin, int *rs)
inline static int
c_valid_start_p(double sg)
{
if (!isinf(sg)) {
if (sg < REFORM_BEGIN_JD)
return 0;
if (sg > REFORM_END_JD)
return 0;
} else if (isnan(sg))
if (isnan(sg))
return 0;
if (isinf(sg))
return 1;
if (sg < REFORM_BEGIN_JD || sg > REFORM_END_JD)
return 0;
return 1;
}
@ -6970,28 +6969,30 @@ d_lite_httpdate(VALUE self)
return strftimev("%a, %d %b %Y %T GMT", dup, set_tmx);
}
static int
gengo(VALUE jd, VALUE y, VALUE *a)
static VALUE
jisx0301_date(VALUE jd, VALUE y)
{
VALUE a[2];
if (f_lt_p(jd, INT2FIX(2405160)))
return 0;
return rb_usascii_str_new2("%Y-%m-%d");
if (f_lt_p(jd, INT2FIX(2419614))) {
a[0] = rb_usascii_str_new2("M%02d");
a[0] = rb_usascii_str_new2("M%02d" ".%%m.%%d");
a[1] = f_sub(y, INT2FIX(1867));
}
else if (f_lt_p(jd, INT2FIX(2424875))) {
a[0] = rb_usascii_str_new2("T%02d");
a[0] = rb_usascii_str_new2("T%02d" ".%%m.%%d");
a[1] = f_sub(y, INT2FIX(1911));
}
else if (f_lt_p(jd, INT2FIX(2447535))) {
a[0] = rb_usascii_str_new2("S%02d");
a[0] = rb_usascii_str_new2("S%02d" ".%%m.%%d");
a[1] = f_sub(y, INT2FIX(1925));
}
else {
a[0] = rb_usascii_str_new2("H%02d");
a[0] = rb_usascii_str_new2("H%02d" ".%%m.%%d");
a[1] = f_sub(y, INT2FIX(1988));
}
return 1;
return rb_f_sprintf(2, a);
}
/*
@ -7007,16 +7008,12 @@ gengo(VALUE jd, VALUE y, VALUE *a)
static VALUE
d_lite_jisx0301(VALUE self)
{
VALUE argv[2];
VALUE s;
get_d1(self);
if (!gengo(m_real_local_jd(dat),
m_real_year(dat),
argv))
return strftimev("%Y-%m-%d", self, set_tmx);
return f_add(rb_f_sprintf(2, argv),
strftimev(".%m.%d", self, set_tmx));
s = jisx0301_date(m_real_local_jd(dat),
m_real_year(dat));
return strftimev(RSTRING_PTR(s), self, set_tmx);
}
#ifndef NDEBUG
@ -8271,7 +8268,7 @@ dt_lite_strftime(int argc, VALUE *argv, VALUE self)
}
static VALUE
dt_lite_iso8601_timediv(VALUE self, VALUE n)
iso8601_timediv(VALUE self, VALUE n)
{
VALUE f, fmt;
@ -8319,7 +8316,7 @@ dt_lite_iso8601(int argc, VALUE *argv, VALUE self)
n = INT2FIX(0);
return f_add(strftimev("%Y-%m-%d", self, set_tmx),
dt_lite_iso8601_timediv(self, n));
iso8601_timediv(self, n));
}
/*
@ -8355,7 +8352,7 @@ dt_lite_rfc3339(int argc, VALUE *argv, VALUE self)
static VALUE
dt_lite_jisx0301(int argc, VALUE *argv, VALUE self)
{
VALUE n, argv2[2];
VALUE n, s;
rb_scan_args(argc, argv, "01", &n);
@ -8364,15 +8361,10 @@ dt_lite_jisx0301(int argc, VALUE *argv, VALUE self)
{
get_d1(self);
if (!gengo(m_real_local_jd(dat),
m_real_year(dat),
argv2))
return f_add(strftimev("%Y-%m-%d", self, set_tmx),
dt_lite_iso8601_timediv(self, n));
return f_add(f_add(rb_f_sprintf(2, argv2),
strftimev(".%m.%d", self, set_tmx)),
dt_lite_iso8601_timediv(self, n));
s = jisx0301_date(m_real_local_jd(dat),
m_real_year(dat));
return rb_str_append(strftimev(RSTRING_PTR(s), self, set_tmx),
iso8601_timediv(self, n));
}
}
@ -8820,6 +8812,71 @@ date_s_test_nth_kday(VALUE klass)
return Qtrue;
}
static int
test_unit_v2v(VALUE i,
VALUE (* conv1)(VALUE),
VALUE (* conv2)(VALUE))
{
VALUE c, o;
c = (*conv1)(i);
o = (*conv2)(c);
return f_eqeq_p(o, i);
}
static int
test_unit_v2v_iter2(VALUE (* conv1)(VALUE),
VALUE (* conv2)(VALUE))
{
if (!test_unit_v2v(INT2FIX(0), conv1, conv2))
return 0;
if (!test_unit_v2v(INT2FIX(1), conv1, conv2))
return 0;
if (!test_unit_v2v(INT2FIX(2), conv1, conv2))
return 0;
if (!test_unit_v2v(INT2FIX(3), conv1, conv2))
return 0;
if (!test_unit_v2v(INT2FIX(11), conv1, conv2))
return 0;
if (!test_unit_v2v(INT2FIX(65535), conv1, conv2))
return 0;
if (!test_unit_v2v(INT2FIX(1073741823), conv1, conv2))
return 0;
if (!test_unit_v2v(INT2NUM(1073741824), conv1, conv2))
return 0;
if (!test_unit_v2v(rb_rational_new2(INT2FIX(0), INT2FIX(1)), conv1, conv2))
return 0;
if (!test_unit_v2v(rb_rational_new2(INT2FIX(1), INT2FIX(1)), conv1, conv2))
return 0;
if (!test_unit_v2v(rb_rational_new2(INT2FIX(1), INT2FIX(2)), conv1, conv2))
return 0;
if (!test_unit_v2v(rb_rational_new2(INT2FIX(2), INT2FIX(3)), conv1, conv2))
return 0;
return 1;
}
static int
test_unit_v2v_iter(VALUE (* conv1)(VALUE),
VALUE (* conv2)(VALUE))
{
if (!test_unit_v2v_iter2(conv1, conv2))
return 0;
if (!test_unit_v2v_iter2(conv2, conv1))
return 0;
return 1;
}
static VALUE
date_s_test_unit_conv(VALUE klass)
{
if (!test_unit_v2v_iter(sec_to_day, day_to_sec))
return Qfalse;
if (!test_unit_v2v_iter(ns_to_day, day_to_ns))
return Qfalse;
if (!test_unit_v2v_iter(ns_to_sec, sec_to_ns))
return Qfalse;
return Qtrue;
}
static VALUE
date_s_test_all(VALUE klass)
{
@ -8833,6 +8890,8 @@ date_s_test_all(VALUE klass)
return Qfalse;
if (date_s_test_nth_kday(klass) == Qfalse)
return Qfalse;
if (date_s_test_unit_conv(klass) == Qfalse)
return Qfalse;
return Qtrue;
}
#endif
@ -9451,6 +9510,8 @@ Init_date_core(void)
date_s_test_commercial, 0);
de_define_singleton_method(cDate, "test_weeknum", date_s_test_weeknum, 0);
de_define_singleton_method(cDate, "test_nth_kday", date_s_test_nth_kday, 0);
de_define_singleton_method(cDate, "test_unit_conv",
date_s_test_unit_conv, 0);
de_define_singleton_method(cDate, "test_all", date_s_test_all, 0);
#endif
}