void VMapManager2::releaseModelInstance(std::string const& filename) { ModelFileMap::iterator model = getModelInstance(filename); if (model == iLoadedModelFiles.end()) { DEBUG_FILTER_LOG(LOG_FILTER_MAP_LOADING,"VMapManager2::releaseModelInstance concurrent unloading file %s", filename.c_str()); return; } if (model->second.count() == 0) { DEBUG_FILTER_LOG(LOG_FILTER_MAP_LOADING, "VMapManager2::releaseModelInstance unloading file '%s'", filename.c_str()); WriteGuard Guard(GetLock()); iLoadedModelFiles.erase(model); // model be auto-erased after method finish } }
WorldModelPtr VMapManager2::acquireModelInstance(std::string const& basepath, std::string const& filename) { ModelFileMap::iterator model = getModelInstance(filename); if (model == iLoadedModelFiles.end()) { WorldModelPtr worldmodel = WorldModelPtr(new WorldModel()); if (!worldmodel->readFile(basepath + filename + ".vmo")) { ERROR_LOG("VMapManager2::acquireModelInstance could not load '%s%s.vmo'!", basepath.c_str(), filename.c_str()); return WorldModelPtr(); } DEBUG_FILTER_LOG(LOG_FILTER_MAP_LOADING, "VMapManager2::acquireModelInstance loading file '%s%s'.", basepath.c_str(), filename.c_str()); WriteGuard Guard(GetLock()); model = (iLoadedModelFiles.insert(ModelFileMap::value_type(filename, worldmodel))).first; } return model->second; }
QObject* GenericDAO::readModel(QSqlQuery& query) { QObject* obj = getModelInstance(); Q_ASSERT(obj); const QMetaObject* metaobject = obj->metaObject(); int count = metaobject->propertyCount(); for (int i = 1; i < count; i++) { QMetaProperty metaproperty = metaobject->property(i); const char* name = metaproperty.name(); int fieldNo = query.record().indexOf(name); if (fieldNo > -1) { QVariant value = query.value(fieldNo); // if (strcmp(name, "id") == 0) // metaproperty.write(obj, Database::variantToUuid(value)); // else metaproperty.write(obj, value); } } return obj; }