Asset* AssetManager::findAsset(int type, const String& name, intptr_t arg) { SCOPE_LOCK; checkType(__func__, type); Data* d = m_datas[type]; AssetDict::iterator it =d->assetDict.find(d->factory->generateKey(name, arg)); if ( it != d->assetDict.end()) { it->second->addref(); return it->second; } Asset* a = d->factory->create(); if (a->init(name, arg)) { a->m_key = a->getKey(); AX_ASSERT(!a->m_key.empty()); d->assetDict[a->m_key] = a; return a; } d->factory->destroy(a); SafeAddRef(d->defaulted); return d->defaulted; }
Asset* AssetManager::uniqueAsset(int type, const String& name, intptr_t arg /*= 0 */) { SCOPE_LOCK; checkType(__func__, type); Data* d = m_datas[type]; Asset* a = d->factory->create(); if (a->init(name, arg)) { a->m_key = a->getKey() + "$" + Uuid::generateUuid(); d->assetDict[a->m_key] = a; return a; } d->factory->destroy(a); return d->defaulted; }