void Init_gobject_gtype(void) { #if !GLIB_CHECK_VERSION(2, 35, 1) g_type_init(); #endif init_typemap(); /* type */ #ifndef rb_cMutex rb_cMutex = rb_const_get(rb_cObject, rb_intern("Mutex")); #endif id_lock = rb_intern("lock"); id_unlock = rb_intern("unlock"); lookup_class_mutex = rb_funcall(rb_cMutex, id_new, 0); rb_iv_set(mGLib, "lookup_class_mutex", lookup_class_mutex); dynamic_gtype_list = g_hash_table_new(g_str_hash, g_str_equal); id_gtype = rb_intern("__gobject_gtype__"); RG_TARGET_NAMESPACE = rb_define_class_under(mGLib, "Type", rb_cObject); rb_define_alias(CLASS_OF(RG_TARGET_NAMESPACE), "[]", "new"); RG_DEF_METHOD(initialize, 1); RG_DEF_METHOD(inspect, 0); RG_DEF_METHOD_OPERATOR("<=>", type_compare, 1); RG_DEF_METHOD_OPERATOR("==", type_eq, 1); RG_DEF_METHOD_OPERATOR("<=", type_lt_eq, 1); RG_DEF_METHOD_OPERATOR(">=", type_gt_eq, 1); RG_DEF_METHOD_OPERATOR("<", type_lt, 1); RG_DEF_METHOD_OPERATOR(">", type_gt, 1); RG_DEF_ALIAS("eql?", "=="); RG_DEF_METHOD(hash, 0); RG_DEF_ALIAS("to_i", "hash"); RG_DEF_ALIAS("to_int", "hash"); RG_DEF_METHOD(to_class, 0); RG_DEF_METHOD(fundamental, 0); RG_DEF_METHOD_P(fundamental, 0); RG_DEF_METHOD_P(derived, 0); RG_DEF_METHOD_P(interface, 0); RG_DEF_METHOD_P(classed, 0); RG_DEF_METHOD_P(instantiatable, 0); RG_DEF_METHOD_P(derivable, 0); RG_DEF_METHOD_P(deep_derivable, 0); RG_DEF_METHOD_P(abstract, 0); RG_DEF_METHOD_P(value_abstract, 0); RG_DEF_METHOD_P(value_type, 0); RG_DEF_METHOD(has_value_table, 0); RG_DEF_METHOD(name, 0); RG_DEF_ALIAS("to_s", "name"); RG_DEF_METHOD(parent, 0); RG_DEF_METHOD(depth, 0); RG_DEF_METHOD(next_base, 1); RG_DEF_METHOD_P(type_is_a, 1); RG_DEF_METHOD(children, 0); RG_DEF_METHOD(interfaces, 0); RG_DEF_METHOD(class_size, 0); RG_DEF_METHOD(instance_size, 0); { VALUE ary = rb_ary_new(); rb_define_const(RG_TARGET_NAMESPACE, "FUNDAMENTAL_MAX", INT2FIX(G_TYPE_FUNDAMENTAL_MAX)); _def_fundamental_type(ary, G_TYPE_NONE, "NONE"); _def_fundamental_type(ary, G_TYPE_INTERFACE, "INTERFACE"); _def_fundamental_type(ary, G_TYPE_CHAR, "CHAR"); _def_fundamental_type(ary, G_TYPE_UCHAR, "UCHAR"); _def_fundamental_type(ary, G_TYPE_BOOLEAN, "BOOLEAN"); _def_fundamental_type(ary, G_TYPE_INT, "INT"); _def_fundamental_type(ary, G_TYPE_UINT, "UINT"); _def_fundamental_type(ary, G_TYPE_LONG, "LONG"); _def_fundamental_type(ary, G_TYPE_ULONG, "ULONG"); _def_fundamental_type(ary, G_TYPE_INT64, "INT64"); _def_fundamental_type(ary, G_TYPE_UINT64, "UINT64"); _def_fundamental_type(ary, G_TYPE_ENUM, "ENUM"); _def_fundamental_type(ary, G_TYPE_FLAGS, "FLAGS"); _def_fundamental_type(ary, G_TYPE_FLOAT, "FLOAT"); _def_fundamental_type(ary, G_TYPE_DOUBLE, "DOUBLE"); _def_fundamental_type(ary, G_TYPE_STRING, "STRING"); _def_fundamental_type(ary, G_TYPE_POINTER, "POINTER"); _def_fundamental_type(ary, G_TYPE_BOXED, "BOXED"); _def_fundamental_type(ary, G_TYPE_PARAM, "PARAM"); _def_fundamental_type(ary, G_TYPE_OBJECT, "OBJECT"); rb_define_const(RG_TARGET_NAMESPACE, "FUNDAMENTAL_TYPES", ary); /* FIXME: better name */ } }
static void Init_type() { rb_cMutex = rb_const_get(rb_cObject, rb_intern("Mutex")); id_lock = rb_intern("lock"); id_unlock = rb_intern("unlock"); lookup_class_mutex = rb_funcall(rb_cMutex, id_new, 0); rb_iv_set(mGLib, "lookup_class_mutex", lookup_class_mutex); dynamic_gtype_list = g_hash_table_new(g_str_hash, g_str_equal); id_gtype = rb_intern("__gobject_gtype__"); rbgobj_cType = rb_define_class_under(mGLib, "Type", rb_cObject); rb_define_alias(CLASS_OF(rbgobj_cType), "[]", "new"); rb_define_method(rbgobj_cType, "initialize", type_initialize, 1); rb_define_method(rbgobj_cType, "inspect", type_inspect, 0); rb_define_method(rbgobj_cType, "<=>", type_compare, 1); rb_define_method(rbgobj_cType, "==", type_eq, 1); rb_define_method(rbgobj_cType, "<=", type_lt_eq, 1); rb_define_method(rbgobj_cType, ">=", type_gt_eq, 1); rb_define_method(rbgobj_cType, "<", type_lt, 1); rb_define_method(rbgobj_cType, ">", type_gt, 1); rb_define_method(rbgobj_cType, "eql?", type_eq, 1); rb_define_method(rbgobj_cType, "hash", type_to_int, 0); rb_define_method(rbgobj_cType, "to_i", type_to_int, 0); rb_define_method(rbgobj_cType, "to_int", type_to_int, 0); rb_define_method(rbgobj_cType, "to_class", type_to_class, 0); rb_define_method(rbgobj_cType, "fundamental", type_fundamental, 0); rb_define_method(rbgobj_cType, "fundamental?", type_is_fundamental, 0); rb_define_method(rbgobj_cType, "derived?", type_is_derived, 0); rb_define_method(rbgobj_cType, "interface?", type_is_interface, 0); rb_define_method(rbgobj_cType, "classed?", type_is_classed, 0); rb_define_method(rbgobj_cType, "instantiatable?", type_is_instantiatable, 0); rb_define_method(rbgobj_cType, "derivable?", type_is_derivable, 0); rb_define_method(rbgobj_cType, "deep_derivable?", type_is_deep_derivable, 0); rb_define_method(rbgobj_cType, "abstract?", type_is_abstract, 0); rb_define_method(rbgobj_cType, "value_abstract?", type_is_value_abstract, 0); rb_define_method(rbgobj_cType, "value_type?", type_is_value_type, 0); rb_define_method(rbgobj_cType, "has_value_table", type_has_value_table, 0); rb_define_method(rbgobj_cType, "name", type_name, 0); rb_define_method(rbgobj_cType, "to_s", type_name, 0); rb_define_method(rbgobj_cType, "parent", type_parent, 0); rb_define_method(rbgobj_cType, "depth", type_depth, 0); rb_define_method(rbgobj_cType, "next_base", type_next_base, 1); rb_define_method(rbgobj_cType, "type_is_a?", type_is_a, 1); rb_define_method(rbgobj_cType, "children", type_children, 0); rb_define_method(rbgobj_cType, "interfaces", type_interfaces, 0); rb_define_method(rbgobj_cType, "class_size", type_class_size, 0); rb_define_method(rbgobj_cType, "instance_size", type_instance_size, 0); { VALUE ary = rb_ary_new(); rb_define_const(rbgobj_cType, "FUNDAMENTAL_MAX", INT2FIX(G_TYPE_FUNDAMENTAL_MAX)); _def_fundamental_type(ary, G_TYPE_NONE, "NONE"); _def_fundamental_type(ary, G_TYPE_INTERFACE, "INTERFACE"); _def_fundamental_type(ary, G_TYPE_CHAR, "CHAR"); _def_fundamental_type(ary, G_TYPE_UCHAR, "UCHAR"); _def_fundamental_type(ary, G_TYPE_BOOLEAN, "BOOLEAN"); _def_fundamental_type(ary, G_TYPE_INT, "INT"); _def_fundamental_type(ary, G_TYPE_UINT, "UINT"); _def_fundamental_type(ary, G_TYPE_LONG, "LONG"); _def_fundamental_type(ary, G_TYPE_ULONG, "ULONG"); _def_fundamental_type(ary, G_TYPE_INT64, "INT64"); _def_fundamental_type(ary, G_TYPE_UINT64, "UINT64"); _def_fundamental_type(ary, G_TYPE_ENUM, "ENUM"); _def_fundamental_type(ary, G_TYPE_FLAGS, "FLAGS"); _def_fundamental_type(ary, G_TYPE_FLOAT, "FLOAT"); _def_fundamental_type(ary, G_TYPE_DOUBLE, "DOUBLE"); _def_fundamental_type(ary, G_TYPE_STRING, "STRING"); _def_fundamental_type(ary, G_TYPE_POINTER, "POINTER"); _def_fundamental_type(ary, G_TYPE_BOXED, "BOXED"); _def_fundamental_type(ary, G_TYPE_PARAM, "PARAM"); _def_fundamental_type(ary, G_TYPE_OBJECT, "OBJECT"); rb_define_const(rbgobj_cType, "FUNDAMENTAL_TYPES", ary); /* FIXME: better name */ } }