static mrb_value mrb_time_minus(mrb_state *mrb, mrb_value self) { mrb_float f; mrb_value other; struct mrb_time *tm, *tm2; mrb_get_args(mrb, "o", &other); tm = mrb_get_datatype(mrb, self, &mrb_time_type); if (!tm) return mrb_nil_value(); tm2 = mrb_get_datatype(mrb, other, &mrb_time_type); if (tm2) { f = (mrb_float)(tm->sec - tm2->sec) + (mrb_float)(tm->usec - tm2->usec) / 1.0e6; return mrb_float_value(f); } else { mrb_float f, f2; mrb_get_args(mrb, "f", &f2); f = ((mrb_float)tm->sec + (mrb_float)tm->usec/1.0e6); return mrb_time_make(mrb, mrb_obj_class(mrb, self), f-f2, tm->timezone); } }
/* Creates an instance of time at the given time in seconds, etc. */ static mrb_value mrb_time_at(mrb_state *mrb, mrb_value self) { mrb_float f, f2 = 0; mrb_get_args(mrb, "f|f", &f, &f2); return mrb_time_make(mrb, mrb_class_ptr(self), f, f2, MRB_TIMEZONE_LOCAL); }
static mrb_value mrb_time_plus(mrb_state *mrb, mrb_value self) { mrb_float f; struct mrb_time *tm; mrb_get_args(mrb, "f", &f); 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, (double)tm->usec, tm->timezone); }
static mrb_value mrb_time_plus(mrb_state *mrb, mrb_value self) { mrb_float f; struct mrb_time *tm; mrb_get_args(mrb, "f", &f); tm = (struct mrb_time *)mrb_get_datatype(mrb, self, &mrb_time_type); if (!tm) return mrb_nil_value(); return mrb_time_make(mrb, mrb_obj_class(mrb, self), (double)tm->sec+f, tm->usec, tm->timezone); }
static mrb_value mrb_time_plus(mrb_state *mrb, mrb_value self) { mrb_float f; struct mrb_time *tm; mrb_get_args(mrb, "f", &f); tm = mrb_get_datatype(mrb, self, &mrb_time_type); if (!tm) return mrb_nil_value(); f += tm->sec; f += (mrb_float)tm->usec / 1.0e6; return mrb_time_make(mrb, mrb_obj_class(mrb, self), f, tm->timezone); }
static mrb_value mrb_time_minus(mrb_state *mrb, mrb_value self) { mrb_float f; mrb_value other; struct mrb_time *tm, *tm2; mrb_get_args(mrb, "o", &other); tm = DATA_GET_PTR(mrb, self, &mrb_time_type, struct mrb_time); 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; return mrb_float_value(mrb, f); } else { mrb_get_args(mrb, "f", &f); return mrb_time_make(mrb, mrb_obj_class(mrb, self), (double)tm->sec-f, (double)tm->usec, tm->timezone); } }
static mrb_value mrb_time_minus(mrb_state *mrb, mrb_value self) { mrb_float f; mrb_value other; 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(); tm2 = (struct mrb_time*)mrb_data_get_ptr(mrb, other, &mrb_time_type); if (tm2) { f = (mrb_float)(tm->sec - tm2->sec) + (mrb_float)(tm->usec - tm2->usec) / 1.0e6; return mrb_float_value(mrb, f); } else { mrb_get_args(mrb, "f", &f); return mrb_time_make(mrb, mrb_obj_class(mrb, self), (double)tm->sec-f, tm->usec, tm->timezone); } }