| 2339 | } |
| 2340 | |
| 2341 | void Workspace_Impl::createAndAddSubsetClonedObjects(const std::shared_ptr<detail::Workspace_Impl>& thisImpl, |
| 2342 | std::shared_ptr<detail::Workspace_Impl> cloneImpl, const std::vector<Handle>& handles, |
| 2343 | bool keepHandles) const { |
| 2344 | // make sure versionObject comes along for the ride |
| 2345 | HandleVector wHandles = handles; |
| 2346 | if (OptionalWorkspaceObject vo = versionObject()) { |
| 2347 | if (std::find(wHandles.begin(), wHandles.end(), vo->handle()) == wHandles.end()) { |
| 2348 | wHandles.insert(wHandles.begin(), vo->handle()); |
| 2349 | } |
| 2350 | } |
| 2351 | |
| 2352 | // construct clone's WorkspaceObject_ImplPtrs |
| 2353 | detail::WorkspaceObject_ImplPtrVector newObjectImplPtrs; |
| 2354 | HandleMap oldNewHandleMap; |
| 2355 | for (const Handle& h : wHandles) { |
| 2356 | OptionalWorkspaceObject object = thisImpl->getObject(h); |
| 2357 | if (object) { |
| 2358 | newObjectImplPtrs.push_back(cloneImpl->createObject(object->getImpl<detail::WorkspaceObject_Impl>(), keepHandles)); |
| 2359 | Handle newH = newObjectImplPtrs.back()->handle(); |
| 2360 | if (!keepHandles) { |
| 2361 | oldNewHandleMap.insert(HandleMap::value_type(h, newH)); |
| 2362 | } |
| 2363 | } |
| 2364 | } |
| 2365 | |
| 2366 | // add Object_ImplPtrs to clone's Workspace_Impl |
| 2367 | cloneImpl->addClones(newObjectImplPtrs, oldNewHandleMap, true); |
| 2368 | } |
| 2369 | |
| 2370 | std::vector<WorkspaceObject> Workspace_Impl::allObjects() const { |
| 2371 | WorkspaceObjectVector result; |