// Set value to i func (v *Value) Set(i interface{}) { if vg, ok := i.(ValueGetter); ok { vg.Value().Copy(v) return } // Other types r := reflect.ValueOf(i) switch r.Kind() { case reflect.Invalid: C.g_value_reset(v.g()) case reflect.Bool: C.g_value_set_boolean(v.g(), gBoolean(r.Bool())) case reflect.Int: C.g_value_set_long(v.g(), C.glong(i.(int))) case reflect.Int8: C.g_value_set_schar(v.g(), C.gint8(i.(int8))) case reflect.Int32: C.g_value_set_int(v.g(), C.gint(i.(int32))) case reflect.Int64: C.g_value_set_int64(v.g(), C.gint64(i.(int64))) case reflect.Uint: C.g_value_set_ulong(v.g(), C.gulong(i.(uint))) case reflect.Uint8: C.g_value_set_uchar(v.g(), C.guchar(i.(uint8))) case reflect.Uint32: C.g_value_set_uint(v.g(), C.guint(i.(uint32))) case reflect.Uint64: C.g_value_set_uint64(v.g(), C.guint64(i.(uint64))) case reflect.Float32: C.g_value_set_float(v.g(), C.gfloat(i.(float32))) case reflect.Float64: C.g_value_set_double(v.g(), C.gdouble(i.(float64))) case reflect.Ptr: C.g_value_set_pointer(v.g(), C.gpointer(r.Pointer())) case reflect.String: C.g_value_set_static_string(v.g(), (*C.gchar)(C.CString(r.String()))) default: panic("Can't represent Go value in Glib type system.") } }
// SetPointer is a wrapper around g_value_set_pointer(). func (v *Value) SetPointer(p uintptr) { C.g_value_set_pointer(v.native(), C.gpointer(p)) }