ReferenceCounted* ResourceHandleFind(HandleId id) { if( !gs_ResourceHandleManager ) return nullptr; Resource* res = (Resource*) HandleFind(gs_ResourceHandleManager, id); return res; }
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; }