/* * call-seq: * view.set_float64(2, 77.643) => nil * * Sets a float64 value at a given offset, using the provided endianness. * * === Examples * buf = ArrayBuffer.new(100) => ArrayBuffer * view = DataView.new(buf) => DataView * view.set_float64(2, 77.643) => nil * */ static VALUE rb_data_view_set_float64(int argc, VALUE *argv, VALUE obj) { double val; DataViewAset(obj); switch (TYPE(item)) { case T_FIXNUM: val = (double)FIX2LONG(item); break; case T_BIGNUM: val = rb_big2dbl(item); break; case T_FLOAT: val = RFLOAT_VALUE(item); break; default: rb_raise(rb_eTypeError, "Type arrays only support Fixnum, Bignum and Float instances"); } rb_type_array_set_float64(buf->buf, index, val, little_endian); return Qnil; }
static void ole_val2ptr_variant(VALUE val, VARIANT *var) { switch (TYPE(val)) { case T_STRING: if (V_VT(var) == (VT_BSTR | VT_BYREF)) { *V_BSTRREF(var) = ole_vstr2wc(val); } break; case T_FIXNUM: switch(V_VT(var)) { case (VT_UI1 | VT_BYREF) : *V_UI1REF(var) = NUM2CHR(val); break; case (VT_I2 | VT_BYREF) : *V_I2REF(var) = (short)NUM2INT(val); break; case (VT_I4 | VT_BYREF) : *V_I4REF(var) = NUM2INT(val); break; case (VT_R4 | VT_BYREF) : *V_R4REF(var) = (float)NUM2INT(val); break; case (VT_R8 | VT_BYREF) : *V_R8REF(var) = NUM2INT(val); break; default: break; } break; case T_FLOAT: switch(V_VT(var)) { case (VT_I2 | VT_BYREF) : *V_I2REF(var) = (short)NUM2INT(val); break; case (VT_I4 | VT_BYREF) : *V_I4REF(var) = NUM2INT(val); break; case (VT_R4 | VT_BYREF) : *V_R4REF(var) = (float)NUM2DBL(val); break; case (VT_R8 | VT_BYREF) : *V_R8REF(var) = NUM2DBL(val); break; default: break; } break; case T_BIGNUM: if (V_VT(var) == (VT_R8 | VT_BYREF)) { *V_R8REF(var) = rb_big2dbl(val); } break; case T_TRUE: if (V_VT(var) == (VT_BOOL | VT_BYREF)) { *V_BOOLREF(var) = VARIANT_TRUE; } break; case T_FALSE: if (V_VT(var) == (VT_BOOL | VT_BYREF)) { *V_BOOLREF(var) = VARIANT_FALSE; } break; default: break; } }
static VALUE bignum_spec_rb_big2dbl(VALUE self, VALUE num) { return rb_float_new(rb_big2dbl(num)); }