コード例 #1
0
ファイル: gd_mono_class.cpp プロジェクト: UgisBrekis/godot
const Vector<GDMonoProperty *> &GDMonoClass::get_all_properties() {

	if (properties_fetched)
		return properties_list;

	void *iter = NULL;
	MonoProperty *raw_property = NULL;
	while ((raw_property = mono_class_get_properties(mono_class, &iter)) != NULL) {
		StringName name = mono_property_get_name(raw_property);

		Map<StringName, GDMonoProperty *>::Element *match = properties.find(name);

		if (match) {
			properties_list.push_back(match->get());
		} else {
			GDMonoProperty *property = memnew(GDMonoProperty(raw_property, this));
			properties.insert(name, property);
			properties_list.push_back(property);
		}
	}

	properties_fetched = true;

	return properties_list;
}
コード例 #2
0
ファイル: mioTypes.cpp プロジェクト: AlphaUnity/scribble
void mioClass::eachProperties(const std::function<void(mioProperty&)> &f)
{
    MonoProperty *prop;
    gpointer iter = nullptr;
    while ((prop = mono_class_get_properties(mclass, &iter))) {
        mioProperty mp = prop;
        f(mp);
    }
}
コード例 #3
0
ファイル: monodiet.c プロジェクト: ANahr/mono
static void
handle_type (MonoClass *klass, guint32 flags)
{
	int i;
	guint32 missing;
	MonoCustomAttrInfo* cattrs;
	gpointer val = NULL, oldkey = NULL;
	MonoProperty* prop;
	MonoEvent* event;
	MonoMethod* method;
	MonoClassField* field;
	gpointer iter;
	
	if (g_hash_table_lookup_extended (type_table, klass, &oldkey, &val)) {
		missing = flags & ~(GPOINTER_TO_UINT (val));
	} else {
		missing = flags;
	}
	if (!missing)
		return;
	g_hash_table_insert (type_table, klass, GUINT_TO_POINTER (missing));
	if (verbose)
		g_print ("#processing klass: %s.%s\n", klass->name_space, klass->name);
	mono_class_init (klass);
	if (klass->parent)
		add_type (klass->parent);
	if (klass->nested_in)
		add_type (klass->nested_in);
	iter = NULL;
	while ((method = mono_class_get_methods (klass, &iter))) {
		if ((missing & TYPE_METHODS) || strcmp (method->name, ".cctor") == 0)
			add_types_from_method (method);
	}
	if (klass->enumtype) {
		add_field (mono_class_get_field_from_name (klass, "value__"));
	}
	if (force_enums || (missing & TYPE_FIELDS)) {
		iter = NULL;
		while ((field = mono_class_get_fields (klass, &iter)))
			add_field (field);
	}
	iter = NULL;
	while ((prop = mono_class_get_properties (klass, &iter))) {
		cattrs = mono_custom_attrs_from_property (klass, prop);
		handle_cattrs (cattrs);
	}
	iter = NULL;
	while ((event = mono_class_get_events (klass, &iter))) {
		cattrs = mono_custom_attrs_from_event (klass, event);
		handle_cattrs (cattrs);
	}
	for (i = 0; i < klass->interface_count; ++i)
		add_type (klass->interfaces [i]);
	cattrs = mono_custom_attrs_from_class (klass);
	handle_cattrs (cattrs);
}
コード例 #4
0
ファイル: mioTypes.cpp プロジェクト: AlphaUnity/scribble
void mioClass::eachPropertiesUpwards(const std::function<void(mioProperty&, mioClass&)> &f)
{
    mioClass c = mclass;
    do {
        MonoProperty *prop;
        gpointer iter = nullptr;
        while (prop = mono_class_get_properties(c, &iter)) {
            mioProperty m = prop;
            f(m, c);
        }
        c = c.getParent();
    } while (c);
}
コード例 #5
-4
ファイル: MonoClass.cpp プロジェクト: Orav/CryMono
MonoProperty *CScriptClass::GetMonoProperty(const char *name, bool requireSetter, bool requireGetter)
{
	MonoClass *pClass = (MonoClass *)m_pObject;
	MonoProperty *pCurProperty = nullptr;

	void *pIterator = 0;

	while (pClass != nullptr)
	{
		pCurProperty = mono_class_get_properties(pClass, &pIterator);
		if(pCurProperty == nullptr)
		{
			pClass = mono_class_get_parent(pClass);
			if(pClass == mono_get_object_class())
				break;
			pIterator = 0;
			continue;
		}

		if(!strcmp(mono_property_get_name(pCurProperty), name))
		{
			if(requireSetter && mono_property_get_set_method(pCurProperty) == nullptr)
				continue;
			if(requireGetter && mono_property_get_get_method(pCurProperty) == nullptr)
				continue;

			return pCurProperty;
		}
	}

	return nullptr;
}