diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-08-15 01:33:36 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-08-15 01:33:36 +0900 |
| commit | b225e4cc82f0e727b6175306e530efc2a59f4e95 (patch) | |
| tree | eb8a64a304a8468ec4e033cc578c4b6531966436 /mrbgems/mruby-time/src | |
| parent | babc8d00865b86c77032cfe4d69ddfea3ac9f4ef (diff) | |
| download | mruby-b225e4cc82f0e727b6175306e530efc2a59f4e95.tar.gz mruby-b225e4cc82f0e727b6175306e530efc2a59f4e95.zip | |
redesign mruby/data.h API; use DATA_PTR() for raw data pointer, DATA_GET_PTR() to type safe retrieval (TypeError will be raised), DATA_CHECK_GET_PTR() to get nil if type mismatched
Diffstat (limited to 'mrbgems/mruby-time/src')
| -rw-r--r-- | mrbgems/mruby-time/src/time.c | 92 |
1 files changed, 35 insertions, 57 deletions
diff --git a/mrbgems/mruby-time/src/time.c b/mrbgems/mruby-time/src/time.c index 07e10e2c6..3948a64fa 100644 --- a/mrbgems/mruby-time/src/time.c +++ b/mrbgems/mruby-time/src/time.c @@ -299,8 +299,8 @@ mrb_time_eq(mrb_state *mrb, mrb_value self) mrb_bool eq_p; mrb_get_args(mrb, "o", &other); - tm1 = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); - tm2 = (struct mrb_time*)mrb_data_get_ptr(mrb, other, &mrb_time_type); + tm1 = DATA_CHECK_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time); + tm2 = DATA_CHECK_GET_PTR(mrb, other, &mrb_time_type, struct mrb_time); eq_p = tm1 && tm2 && tm1->sec == tm2->sec && tm1->usec == tm2->usec; return mrb_bool_value(eq_p); @@ -313,8 +313,8 @@ mrb_time_cmp(mrb_state *mrb, mrb_value self) struct mrb_time *tm1, *tm2; mrb_get_args(mrb, "o", &other); - tm1 = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); - tm2 = (struct mrb_time*)mrb_data_get_ptr(mrb, other, &mrb_time_type); + tm1 = DATA_CHECK_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time); + tm2 = DATA_CHECK_GET_PTR(mrb, other, &mrb_time_type, struct mrb_time); if (!tm1 || !tm2) return mrb_nil_value(); if (tm1->sec > tm2->sec) { return mrb_fixnum_value(1); @@ -339,8 +339,7 @@ mrb_time_plus(mrb_state *mrb, mrb_value self) struct mrb_time *tm; mrb_get_args(mrb, "f", &f); - tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); - if (!tm) return mrb_nil_value(); + tm = DATA_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time); return mrb_time_make(mrb, mrb_obj_class(mrb, self), (double)tm->sec+f, tm->usec, tm->timezone); } @@ -352,10 +351,9 @@ mrb_time_minus(mrb_state *mrb, mrb_value self) struct mrb_time *tm, *tm2; mrb_get_args(mrb, "o", &other); - tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); - if (!tm) return mrb_nil_value(); + tm = DATA_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time); - tm2 = (struct mrb_time*)mrb_data_get_ptr(mrb, other, &mrb_time_type); + tm2 = DATA_CHECK_GET_PTR(mrb, other, &mrb_time_type, struct mrb_time); if (tm2) { f = (mrb_float)(tm->sec - tm2->sec) + (mrb_float)(tm->usec - tm2->usec) / 1.0e6; @@ -374,8 +372,7 @@ mrb_time_wday(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); - if (!tm) return mrb_nil_value(); + tm = DATA_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time); return mrb_fixnum_value(tm->datetime.tm_wday); } @@ -386,8 +383,7 @@ mrb_time_yday(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); - if (!tm) return mrb_nil_value(); + tm = DATA_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time); return mrb_fixnum_value(tm->datetime.tm_yday + 1); } @@ -398,8 +394,7 @@ mrb_time_year(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); - if (!tm) return mrb_nil_value(); + tm = DATA_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time); return mrb_fixnum_value(tm->datetime.tm_year + 1900); } @@ -410,8 +405,7 @@ mrb_time_zone(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); - if (!tm) return mrb_nil_value(); + tm = DATA_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time); if (tm->timezone <= MRB_TIMEZONE_NONE) return mrb_nil_value(); if (tm->timezone >= MRB_TIMEZONE_LAST) return mrb_nil_value(); return mrb_str_new_cstr(mrb, timezone_names[tm->timezone]); @@ -427,8 +421,7 @@ mrb_time_asctime(mrb_state *mrb, mrb_value self) char buf[256]; int len; - tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); - if (!tm) return mrb_nil_value(); + tm = DATA_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time); d = &tm->datetime; len = snprintf(buf, sizeof(buf), "%s %s %02d %02d:%02d:%02d %s%d", wday_names[d->tm_wday], mon_names[d->tm_mon], d->tm_mday, @@ -445,7 +438,7 @@ mrb_time_day(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); + tm = DATA_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time); if (!tm) return mrb_nil_value(); return mrb_fixnum_value(tm->datetime.tm_mday); } @@ -454,12 +447,11 @@ mrb_time_day(mrb_state *mrb, mrb_value self) /* 15.2.19.7.7 */ /* Returns true if daylight saving was applied for this time. */ static mrb_value -mrb_time_dstp(mrb_state *mrb, mrb_value self) +mrb_time_dst_p(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); - if (!tm) return mrb_nil_value(); + tm = DATA_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time); return mrb_bool_value(tm->datetime.tm_isdst); } @@ -471,8 +463,7 @@ mrb_time_getutc(mrb_state *mrb, mrb_value self) { struct mrb_time *tm, *tm2; - tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); - if (!tm) return self; + tm = DATA_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time); tm2 = (struct mrb_time *)mrb_malloc(mrb, sizeof(*tm)); *tm2 = *tm; tm2->timezone = MRB_TIMEZONE_UTC; @@ -487,8 +478,7 @@ mrb_time_getlocal(mrb_state *mrb, mrb_value self) { struct mrb_time *tm, *tm2; - tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); - if (!tm) return self; + tm = DATA_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time); tm2 = (struct mrb_time *)mrb_malloc(mrb, sizeof(*tm)); *tm2 = *tm; tm2->timezone = MRB_TIMEZONE_LOCAL; @@ -503,8 +493,7 @@ mrb_time_hour(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); - if (!tm) return mrb_nil_value(); + tm = DATA_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time); return mrb_fixnum_value(tm->datetime.tm_hour); } @@ -564,8 +553,7 @@ mrb_time_localtime(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); - if (!tm) return self; + tm = DATA_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time); tm->timezone = MRB_TIMEZONE_LOCAL; mrb_time_update_datetime(tm); return self; @@ -578,8 +566,7 @@ mrb_time_mday(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); - if (!tm) return mrb_nil_value(); + tm = DATA_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time); return mrb_fixnum_value(tm->datetime.tm_mday); } @@ -590,8 +577,7 @@ mrb_time_min(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); - if (!tm) return mrb_nil_value(); + tm = DATA_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time); return mrb_fixnum_value(tm->datetime.tm_min); } @@ -602,8 +588,7 @@ mrb_time_mon(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); - if (!tm) return mrb_nil_value(); + tm = DATA_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time); return mrb_fixnum_value(tm->datetime.tm_mon + 1); } @@ -614,8 +599,7 @@ mrb_time_sec(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); - if (!tm) return mrb_nil_value(); + tm = DATA_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time); return mrb_fixnum_value(tm->datetime.tm_sec); } @@ -627,8 +611,7 @@ mrb_time_to_f(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); - if (!tm) return mrb_nil_value(); + tm = DATA_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time); return mrb_float_value(mrb, (mrb_float)tm->sec + (mrb_float)tm->usec/1.0e6); } @@ -639,8 +622,7 @@ mrb_time_to_i(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); - if (!tm) return mrb_nil_value(); + tm = DATA_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time); return mrb_fixnum_value(tm->sec); } @@ -651,8 +633,7 @@ mrb_time_usec(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); - if (!tm) return mrb_nil_value(); + tm = DATA_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time); return mrb_fixnum_value(tm->usec); } @@ -663,27 +644,24 @@ mrb_time_utc(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); - if (tm) { - tm->timezone = MRB_TIMEZONE_UTC; - mrb_time_update_datetime(tm); - } + tm = DATA_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time); + tm->timezone = MRB_TIMEZONE_UTC; + mrb_time_update_datetime(tm); return self; } /* 15.2.19.7.28 */ /* Returns true if this time is in the UTC timezone false if not. */ static mrb_value -mrb_time_utcp(mrb_state *mrb, mrb_value self) +mrb_time_utc_p(mrb_state *mrb, mrb_value self) { struct mrb_time *tm; - tm = (struct mrb_time*)mrb_data_get_ptr(mrb, self, &mrb_time_type); - if (!tm) return mrb_nil_value(); + + tm = DATA_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time); return mrb_bool_value(tm->timezone == MRB_TIMEZONE_UTC); } - void mrb_mruby_time_gem_init(mrb_state* mrb) { @@ -709,11 +687,11 @@ mrb_mruby_time_gem_init(mrb_state* mrb) mrb_define_method(mrb, tc, "asctime", mrb_time_asctime, MRB_ARGS_NONE()); /* 15.2.19.7.4 */ mrb_define_method(mrb, tc, "ctime" , mrb_time_asctime, MRB_ARGS_NONE()); /* 15.2.19.7.5 */ mrb_define_method(mrb, tc, "day" , mrb_time_day , MRB_ARGS_NONE()); /* 15.2.19.7.6 */ - mrb_define_method(mrb, tc, "dst?" , mrb_time_dstp , MRB_ARGS_NONE()); /* 15.2.19.7.7 */ + mrb_define_method(mrb, tc, "dst?" , mrb_time_dst_p , MRB_ARGS_NONE()); /* 15.2.19.7.7 */ mrb_define_method(mrb, tc, "getgm" , mrb_time_getutc , MRB_ARGS_NONE()); /* 15.2.19.7.8 */ mrb_define_method(mrb, tc, "getlocal",mrb_time_getlocal,MRB_ARGS_NONE()); /* 15.2.19.7.9 */ mrb_define_method(mrb, tc, "getutc" , mrb_time_getutc , MRB_ARGS_NONE()); /* 15.2.19.7.10 */ - mrb_define_method(mrb, tc, "gmt?" , mrb_time_utcp , MRB_ARGS_NONE()); /* 15.2.19.7.11 */ + mrb_define_method(mrb, tc, "gmt?" , mrb_time_utc_p , MRB_ARGS_NONE()); /* 15.2.19.7.11 */ mrb_define_method(mrb, tc, "gmtime" , mrb_time_utc , MRB_ARGS_NONE()); /* 15.2.19.7.13 */ mrb_define_method(mrb, tc, "hour" , mrb_time_hour, MRB_ARGS_NONE()); /* 15.2.19.7.15 */ mrb_define_method(mrb, tc, "localtime", mrb_time_localtime, MRB_ARGS_NONE()); /* 15.2.19.7.18 */ @@ -728,7 +706,7 @@ mrb_mruby_time_gem_init(mrb_state* mrb) mrb_define_method(mrb, tc, "to_f", mrb_time_to_f, MRB_ARGS_NONE()); /* 15.2.19.7.24 */ mrb_define_method(mrb, tc, "usec", mrb_time_usec, MRB_ARGS_NONE()); /* 15.2.19.7.26 */ mrb_define_method(mrb, tc, "utc" , mrb_time_utc, MRB_ARGS_NONE()); /* 15.2.19.7.27 */ - mrb_define_method(mrb, tc, "utc?", mrb_time_utcp, MRB_ARGS_NONE()); /* 15.2.19.7.28 */ + mrb_define_method(mrb, tc, "utc?", mrb_time_utc_p,MRB_ARGS_NONE()); /* 15.2.19.7.28 */ mrb_define_method(mrb, tc, "wday", mrb_time_wday, MRB_ARGS_NONE()); /* 15.2.19.7.30 */ mrb_define_method(mrb, tc, "yday", mrb_time_yday, MRB_ARGS_NONE()); /* 15.2.19.7.31 */ mrb_define_method(mrb, tc, "year", mrb_time_year, MRB_ARGS_NONE()); /* 15.2.19.7.32 */ |
