[前][次][番号順一覧][スレッド一覧]

ruby-changes:16269

From: akr <ko1@a...>
Date: Wed, 9 Jun 2010 22:15:36 +0900 (JST)
Subject: [ruby-changes:16269] Ruby:r28236 (trunk): * time.c (calc_tm_yday): extracted from timegmw_noleapsecond.

akr	2010-06-09 22:13:44 +0900 (Wed, 09 Jun 2010)

  New Revision: 28236

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=28236

  Log:
    * time.c (calc_tm_yday): extracted from timegmw_noleapsecond.

  Modified files:
    trunk/ChangeLog
    trunk/time.c

Index: time.c
===================================================================
--- time.c	(revision 28235)
+++ time.c	(revision 28236)
@@ -30,6 +30,7 @@
 #define NDIV(x,y) (-(-((x)+1)/(y))-1)
 #define NMOD(x,y) ((y)-(-((x)+1)%(y))-1)
 #define DIV(n,d) ((n)<0 ? NDIV((n),(d)) : (n)/(d))
+#define MOD(n,d) ((n)<0 ? NMOD((n),(d)) : (n)%(d))
 
 static int
 eq(VALUE x, VALUE y)
@@ -933,13 +934,29 @@
     31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
 };
 
+static int
+calc_tm_yday(long tm_year, int tm_mon, int tm_mday)
+{
+    int tm_year_mod400;
+    int tm_yday = tm_mday;
+
+    tm_year_mod400 = MOD(tm_year, 400);
+
+    if (leap_year_p(tm_year_mod400 + 1900))
+	tm_yday += leap_year_yday_offset[tm_mon];
+    else
+	tm_yday += common_year_yday_offset[tm_mon];
+
+    return tm_yday;
+}
+
 static wideval_t
 timegmw_noleapsecond(struct vtm *vtm)
 {
     VALUE year1900;
     VALUE q400, r400;
     int year_mod400;
-    int yday = vtm->mday;
+    int yday;
     long days_in400;
     VALUE vdays, ret;
     wideval_t wret;
@@ -949,10 +966,7 @@
     divmodv(year1900, INT2FIX(400), &q400, &r400);
     year_mod400 = NUM2INT(r400);
 
-    if (leap_year_p(year_mod400 + 1900))
-	yday += leap_year_yday_offset[vtm->mon-1];
-    else
-	yday += common_year_yday_offset[vtm->mon-1];
+    yday = calc_tm_yday(year_mod400, vtm->mon-1, vtm->mday);
 
     /*
      *  `Seconds Since the Epoch' in SUSv3:
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 28235)
+++ ChangeLog	(revision 28236)
@@ -1,3 +1,7 @@
+Wed Jun  9 22:13:08 2010  Tanaka Akira  <akr@f...>
+
+	* time.c (calc_tm_yday): extracted from timegmw_noleapsecond.
+
 Tue Jun  8 06:27:09 2010  Nobuyoshi Nakada  <nobu@r...>
 
 	* gem_prelude.rb: load full rubygems at LoadError for activation

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]