From: <mk...@us...> - 2003-08-17 10:50:24
|
Update of /cvsroot/csp/APPLICATIONS/SimData/Source In directory sc8-pr-cvs1:/tmp/cvs-serv30918/Source Modified Files: DataArchive.cpp DataManager.cpp Log Message: Index: DataArchive.cpp =================================================================== RCS file: /cvsroot/csp/APPLICATIONS/SimData/Source/DataArchive.cpp,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** DataArchive.cpp 17 Aug 2003 08:03:45 -0000 1.13 --- DataArchive.cpp 17 Aug 2003 10:50:21 -0000 1.14 *************** *** 51,55 **** ! void DataArchive::_addEntry(int offset, int length, hasht hash, std::string const &path) { TableEntry t; t.offset = offset; --- 51,55 ---- ! void DataArchive::_addEntry(int offset, int length, ObjectID hash, std::string const &path) { TableEntry t; t.offset = offset; *************** *** 59,63 **** _table_map[t.pathhash] = _table.size(); _table.push_back(t); ! hasht parent = hash_string(base_path(path)); _children[parent].push_back(t.pathhash); _paths.push_back(path); --- 59,63 ---- _table_map[t.pathhash] = _table.size(); _table.push_back(t); ! ObjectID parent = hash_string(base_path(path)); _children[parent].push_back(t.pathhash); _paths.push_back(path); *************** *** 126,132 **** uint32 n_directories = *iptr++; _paths.reserve(n_paths); ! hasht *hptr = reinterpret_cast<hasht *>(iptr); while (n_directories-- > 0) { ! hasht node = *hptr++; uint32 n = hptr->a; ++hptr; --- 126,132 ---- uint32 n_directories = *iptr++; _paths.reserve(n_paths); ! ObjectID *hptr = reinterpret_cast<ObjectID *>(iptr); while (n_directories-- > 0) { ! ObjectID node = *hptr++; uint32 n = hptr->a; ++hptr; *************** *** 134,138 **** throw CorruptArchive("Path table of contents."); } ! std::vector<hasht> &childlist = _children[node]; childlist.reserve(n); while (n-- > 0) { --- 134,138 ---- throw CorruptArchive("Path table of contents."); } ! std::vector<ObjectID> &childlist = _children[node]; childlist.reserve(n); while (n-- > 0) { *************** *** 179,189 **** fwrite(&size, sizeof(size), 1, _f); for (iter = _children.begin(); iter != _children.end(); iter++) { ! hasht size = iter->second.size(); ! fwrite(&(iter->first), sizeof(hasht), 1, _f); fwrite(&size, sizeof(size), 1, _f); ! std::vector<hasht>::const_iterator child = iter->second.begin(); ! std::vector<hasht>::const_iterator last_child = iter->second.end(); while (child != last_child) { ! fwrite(&(*child++), sizeof(hasht), 1, _f); } } --- 179,189 ---- fwrite(&size, sizeof(size), 1, _f); for (iter = _children.begin(); iter != _children.end(); iter++) { ! ObjectID size = iter->second.size(); ! fwrite(&(iter->first), sizeof(ObjectID), 1, _f); fwrite(&size, sizeof(size), 1, _f); ! std::vector<ObjectID>::const_iterator child = iter->second.begin(); ! std::vector<ObjectID>::const_iterator last_child = iter->second.end(); while (child != last_child) { ! fwrite(&(*child++), sizeof(ObjectID), 1, _f); } } *************** *** 292,296 **** const DataArchive::TableEntry* DataArchive::_lookupPath(Path const &path, std::string const &path_str) const { ! hasht id = (hasht) path.getPath(); return _lookupPath(id, path_str); } --- 292,296 ---- const DataArchive::TableEntry* DataArchive::_lookupPath(Path const &path, std::string const &path_str) const { ! ObjectID id = (ObjectID) path.getPath(); return _lookupPath(id, path_str); } *************** *** 313,317 **** } ! Object *DataArchive::_createObject(hasht classhash) { InterfaceProxy *proxy = InterfaceRegistry::getInterfaceRegistry().getInterface(classhash); if (!proxy) { --- 313,317 ---- } ! Object *DataArchive::_createObject(ObjectID classhash) { InterfaceProxy *proxy = InterfaceRegistry::getInterfaceRegistry().getInterface(classhash); if (!proxy) { *************** *** 331,335 **** const LinkBase DataArchive::getObject(const Path& path, std::string const &path_str) { ! hasht id = (hasht) path.getPath(); // look among previously created static objects LinkBase const *cached = _getStatic(id); --- 331,335 ---- const LinkBase DataArchive::getObject(const Path& path, std::string const &path_str) { ! ObjectID id = (ObjectID) path.getPath(); // look among previously created static objects LinkBase const *cached = _getStatic(id); *************** *** 340,347 **** } catch (IndexError) { ! if (_manager) { ! return _manager->getObject(path, path_str, this); ! } ! throw; } SIMDATA_LOG(LOG_ARCHIVE, LOG_DEBUG, "getObject using interface registry @ 0x" << std::hex << int(&(InterfaceRegistry::getInterfaceRegistry()))); --- 340,345 ---- } catch (IndexError) { ! if (_manager == 0) throw; ! return _manager->getObject(path, path_str, this); } SIMDATA_LOG(LOG_ARCHIVE, LOG_DEBUG, "getObject using interface registry @ 0x" << std::hex << int(&(InterfaceRegistry::getInterfaceRegistry()))); *************** *** 406,415 **** ! void DataArchive::_addStatic(Object* ptr, std::string const &path, hasht id) { if (id == 0) id = hash_string(path); _static_map[id] = LinkBase(Path(path), ptr); } ! LinkBase const* DataArchive::_getStatic(hasht id=0) { CacheMap::const_iterator i = _static_map.find(id); if (i == _static_map.end()) return 0; --- 404,413 ---- ! void DataArchive::_addStatic(Object* ptr, std::string const &path, ObjectID id) { if (id == 0) id = hash_string(path); _static_map[id] = LinkBase(Path(path), ptr); } ! LinkBase const* DataArchive::_getStatic(ObjectID id=0) { CacheMap::const_iterator i = _static_map.find(id); if (i == _static_map.end()) return 0; *************** *** 471,478 **** } catch (IndexError) { ! if (_manager) { ! return _manager->getObjectInterface(id, path, this); ! } ! throw; } return InterfaceRegistry::getInterfaceRegistry().getInterface(t->classhash); --- 469,474 ---- } catch (IndexError) { ! if (_manager == 0) throw; ! return _manager->getObjectInterface(id, path, this); } return InterfaceRegistry::getInterfaceRegistry().getInterface(t->classhash); *************** *** 482,485 **** --- 478,487 ---- return getObjectInterface(hash_string(path), path); } + + void DataArchive::setManager(DataManager *m) { + assert(_manager == 0 || m == 0); + _manager = m; + } + NAMESPACE_SIMDATA_END Index: DataManager.cpp =================================================================== RCS file: /cvsroot/csp/APPLICATIONS/SimData/Source/DataManager.cpp,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** DataManager.cpp 17 Aug 2003 08:03:45 -0000 1.7 --- DataManager.cpp 17 Aug 2003 10:50:21 -0000 1.8 *************** *** 34,42 **** DataManager::~DataManager() { ! std::vector<DataArchive*>::iterator i; for (i = _archives.begin(); i != _archives.end(); i++) { ! if (*i) { (*i)->setManager(0); delete *i; } } --- 34,47 ---- DataManager::~DataManager() { ! closeAll(); ! } ! ! void DataManager::closeAll() { ! Archives::iterator i; for (i = _archives.begin(); i != _archives.end(); i++) { ! if (*i != 0) { (*i)->setManager(0); delete *i; + *i = 0; } } *************** *** 45,57 **** void DataManager::addArchive(DataArchive *d) { if (d) { ! int n = _archives.size(); ! _archives.push_back(d); std::vector<ObjectID> ids = d->getAllObjects(); ! std::vector<ObjectID>::iterator i; ! for (i = ids.begin(); i != ids.end(); i++) { ! if (_archive_map.find(*i) != _archive_map.end()) { ! SIMDATA_LOG(LOG_ARCHIVE, LOG_ERROR, "Duplicate object ID [" << (*i) << "] adding data archive '" << d->getFileName() << "' to data manager."); } ! _archive_map[*i] = n; } d->setManager(this); --- 50,71 ---- void DataManager::addArchive(DataArchive *d) { if (d) { ! bool added = false; ! std::size_t idx = 0; ! for (idx = 0; idx < _archives.size(); idx++) { ! if (_archives[idx] == 0) { ! _archives[idx] = d; ! added = true; ! } ! } ! if (!added) { ! _archives.push_back(d); ! } std::vector<ObjectID> ids = d->getAllObjects(); ! std::vector<ObjectID>::iterator id; ! for (id = ids.begin(); id != ids.end(); id++) { ! if (_archive_map.find(*id) != _archive_map.end()) { ! SIMDATA_LOG(LOG_ARCHIVE, LOG_ERROR, "Duplicate object ID [" << (*id) << "] adding data archive '" << d->getFileName() << "' to data manager."); } ! _archive_map[*id] = idx; } d->setManager(this); *************** *** 66,70 **** std::vector<ObjectID> DataManager::getChildren(ObjectID const &id) const { ! DataArchive::ChildMap::const_iterator idx = _children.find(id); if (idx == _children.end()) { return std::vector<ObjectID>(); } return idx->second; --- 80,84 ---- std::vector<ObjectID> DataManager::getChildren(ObjectID const &id) const { ! ChildMap::const_iterator idx = _children.find(id); if (idx == _children.end()) { return std::vector<ObjectID>(); } return idx->second; *************** *** 76,80 **** bool DataManager::hasObject(ObjectID const &id) const { ! hasht_map::const_iterator idx = _archive_map.find(id); return (idx != _archive_map.end()); } --- 90,94 ---- bool DataManager::hasObject(ObjectID const &id) const { ! ArchiveMap::const_iterator idx = _archive_map.find(id); return (idx != _archive_map.end()); } *************** *** 85,89 **** std::string DataManager::getPathString(ObjectID const &id) const { ! hasht_map::const_iterator idx = _archive_map.find(id); if (idx == _archive_map.end()) return ""; return _archives[idx->second]->getPathString(id); --- 99,103 ---- std::string DataManager::getPathString(ObjectID const &id) const { ! ArchiveMap::const_iterator idx = _archive_map.find(id); if (idx == _archive_map.end()) return ""; return _archives[idx->second]->getPathString(id); *************** *** 105,111 **** void DataManager::cleanStatic() { ! std::vector<DataArchive*>::iterator i; ! for (i = _archives.begin(); i != _archives.end(); i++) { ! if (*i) { (*i)->cleanStatic(); } --- 119,124 ---- void DataManager::cleanStatic() { ! for (Archives::iterator i = _archives.begin(); i != _archives.end(); i++) { ! if (*i != 0) { (*i)->cleanStatic(); } *************** *** 127,134 **** DataArchive *DataManager::findArchive(ObjectID const &id, std::string const &path_str, DataArchive const *d) const { ! hasht_map::const_iterator idx = _archive_map.find(id); DataArchive *archive = 0; if (idx != _archive_map.end()) { ! assert(idx->second >= 0 && idx->second < int(_archives.size())); archive = _archives[idx->second]; } --- 140,147 ---- DataArchive *DataManager::findArchive(ObjectID const &id, std::string const &path_str, DataArchive const *d) const { ! ArchiveMap::const_iterator idx = _archive_map.find(id); DataArchive *archive = 0; if (idx != _archive_map.end()) { ! assert(idx->second < _archives.size()); archive = _archives[idx->second]; } |