inline static VALUE f_one_p(VALUE x) { if (RB_TYPE_P(x, T_FIXNUM)) { return f_boolcast(FIX2LONG(x) == 1); } else if (RB_TYPE_P(x, T_BIGNUM)) { return Qfalse; } else if (RB_TYPE_P(x, T_RATIONAL)) { VALUE num = RRATIONAL(x)->num; VALUE den = RRATIONAL(x)->den; return f_boolcast(FIXNUM_P(num) && FIX2LONG(num) == 1 && FIXNUM_P(den) && FIX2LONG(den) == 1); } return rb_funcall(x, id_eqeq_p, 1, ONE); }
inline static VALUE f_one_p(VALUE x) { switch (TYPE(x)) { case T_FIXNUM: return f_boolcast(FIX2LONG(x) == 1); case T_BIGNUM: return Qfalse; case T_RATIONAL: { VALUE num = RRATIONAL(x)->num; VALUE den = RRATIONAL(x)->den; return f_boolcast(FIXNUM_P(num) && FIX2LONG(num) == 1 && FIXNUM_P(den) && FIX2LONG(den) == 1); } } return rb_funcall(x, id_eqeq_p, 1, ONE); }
inline static VALUE f_zero_p(VALUE x) { if (RB_TYPE_P(x, T_FIXNUM)) { return f_boolcast(FIX2LONG(x) == 0); } else if (RB_TYPE_P(x, T_BIGNUM)) { return Qfalse; } else if (RB_TYPE_P(x, T_RATIONAL)) { VALUE num = RRATIONAL(x)->num; return f_boolcast(FIXNUM_P(num) && FIX2LONG(num) == 0); } return rb_funcall(x, id_eqeq_p, 1, ZERO); }
inline static VALUE f_zero_p(VALUE x) { switch (TYPE(x)) { case T_FIXNUM: return f_boolcast(FIX2LONG(x) == 0); case T_BIGNUM: return Qfalse; case T_RATIONAL: { VALUE num = RRATIONAL(x)->num; return f_boolcast(FIXNUM_P(num) && FIX2LONG(num) == 0); } } return rb_funcall(x, id_eqeq_p, 1, ZERO); }
template <> QDateTime Conversion<QDateTime>::from(RubyValue time) { int offset; if (time.isKindOf(rb_cTime)) { offset = time.send(RUBYQML_INTERN("gmt_offset")).to<int>(); } else { // DateTime VALUE dayOffset = time.send(RUBYQML_INTERN("offset")); offset = RubyValue(RRATIONAL(dayOffset)->num).to<int>() * 24 * 60 * 60 / RubyValue(RRATIONAL(dayOffset)->den).to<int>(); time = time.send(RUBYQML_INTERN("to_time")); } timeval at = rb_time_timeval(time); QDateTime dateTime; dateTime.setOffsetFromUtc(offset); dateTime.setMSecsSinceEpoch(at.tv_sec * 1000 + at.tv_usec / 1000); return dateTime; }