Archive* Archive::openSubArchive(const std::string& name) { Mapping* mapping = findMapping(name); Archive* archive = 0; if(mapping->isValid()){ archive = dynamic_cast<Archive*>(mapping); } if(!archive){ archive = new Archive(); archive->inheritSharedInfoFrom(*this); if(mapping->isValid()){ Mapping::const_iterator p = mapping->begin(); while(p != mapping->end()){ archive->insert(p->first, p->second); ++p; } } insert(name, archive); } return archive; }
Archive* Archive::findSubArchive(const std::string& name) { Mapping* mapping = findMapping(name); if(mapping->isValid()){ Archive* archive = dynamic_cast<Archive*>(mapping); if(archive){ archive->inheritSharedInfoFrom(*this); return archive; } } return invalidArchive(); }