const TImageInfo *TLevelReader::getImageInfo() { if (m_info) return m_info; TLevelP level = loadInfo(); if (level->getFrameCount() == 0) return 0; return getImageInfo(level->begin()->first); }
void LRLoadInfoParser::operator()(Message &msg) { // Read command data unsigned int id; QString shMemId; msg >> id >> shMemId >> clr; QHash<unsigned int, TLevelReaderP>::iterator it = readers.find(id); if (it == readers.end()) goto err; // Read level infos { TLevelP level; try { level = it.value()->loadInfo(); } catch (...) { goto err; } int frameCount = level->getFrameCount(); if (!shMemId.isEmpty()) { // Create a shared memory segment to transfer the infos to tipc::DefaultMessageParser<SHMEM_REQUEST> msgParser; Message shMsg; shMsg << shMemId << frameCount * (int)sizeof(int) << reset; msgParser(shMsg); QString str; shMsg >> reset >> str; if (str != QString("ok")) goto err; // Copy level data to the shared memory segment { QSharedMemory shmem(shMemId); shmem.attach(); shmem.lock(); TLevel::Table *table = level->getTable(); TLevel::Table::const_iterator jt; int *f = (int *)shmem.data(); for (jt = table->begin(); jt != table->end(); ++jt, ++f) *f = jt->first.getNumber(); shmem.unlock(); shmem.detach(); } } msg << QString("ok") << frameCount; }