Ejemplo n.º 1
0
ReferenceCounted* ResourceHandleFind(HandleId id)
{
	if( !gs_ResourceHandleManager ) return nullptr;

	Resource* res = (Resource*) HandleFind(gs_ResourceHandleManager, id);
	return res;
}
Ejemplo n.º 2
0
static bool ReflectionWalkPointer(ReflectionContext* context)
{
	void* address = context->elementAddress;
	const Field* field = context->field;

#ifdef ENABLE_MEMORY_SHARED_PTR
	if(FieldIsSharedPointer(field))
	{
		std::shared_ptr<Object>* shared = (std::shared_ptr<Object>*) address;
		address = shared->get();
	}
	else
#endif

	if(FieldIsRefPointer(field))
	{
		RefPtr<Object>* ref = (RefPtr<Object>*) address;
		address = ref->get();
	}
	else if(FieldIsRawPointer(field))
	{
		address = context->elementAddress;
		address = *(Object**) address;
	}
	else if(FieldIsHandle(field))
	{
		typedef Handle<Object, NullResolve, NullDestroy> ObjectHandle;
		ObjectHandle* handle = (ObjectHandle*) address;
		HandleId id = handle->getId();
		
		Class* klass = (Class*) field->type;

		ReflectionHandleContext hc;
		if( !ReflectionFindHandleContext(context->handleContextMap, klass, hc) )
		{
			LogDebug("No handle context found for class '%s'", klass->name);
			return false;
		}

		address = (Object*) HandleFind(hc.handles, id);
		if( !address ) return false;
	}

	context->elementAddress = address;
	context->object = (Object*) context->elementAddress;

	return true;
}