MCPcopy Create free account
hub / github.com/NatLabRockies/OpenStudio / nominallyRemoveObject

Method nominallyRemoveObject

src/utilities/idf/Workspace.cpp:2085–2154  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2083 }
2084
2085 std::vector<WorkspaceObject> Workspace_Impl::nominallyRemoveObject(const Handle& handle) {
2086 // get object. should exist since call came from within Workspace.
2087 OptionalWorkspaceObject oObject = getObject(handle);
2088 if (!oObject) {
2089 OS_ASSERT(oObject);
2090 }
2091 WorkspaceObject_ImplPtr objectImplPtr = oObject->getImpl<WorkspaceObject_Impl>();
2092
2093 // unlink from other objects
2094 // handle -> others
2095 UnsignedVector ptrFields = objectImplPtr->objectListFields();
2096 for (unsigned index : ptrFields) {
2097 objectImplPtr->setPointer(index, Handle(), false);
2098 }
2099 // others -> handle
2100 WorkspaceObjectVector sources;
2101 ReversePointerSet pointers = objectImplPtr->getReversePointers();
2102 for (const ReversePointer& ptr : pointers) {
2103 OptionalWorkspaceObject source = getObject(ptr.sourceHandle);
2104 // OS_ASSERT(sourceImplPtr);
2105 if (source) {
2106 source->getImpl<WorkspaceObject_Impl>()->setPointer(ptr.fieldIndex, Handle(), false);
2107 sources.push_back(*source);
2108 } else {
2109 OptionalString objectName = objectImplPtr->name();
2110 if (objectName) {
2111 LOG(Debug, "Object of type '" << objectImplPtr->iddObject().name() << "' named '" << *objectName
2112 << "' has a reverse pointer that cannot be followed.");
2113 } else {
2114 LOG(Debug, "Object of type '" << objectImplPtr->iddObject().name() << "' has a reverse pointer that cannot be followed.");
2115 }
2116 }
2117 }
2118
2119 // IdfReferencesMap
2120 StringVector references = objectImplPtr->iddObject().references();
2121 for (const std::string& reference : references) {
2122 auto irmLoc = m_idfReferencesMap.find(reference);
2123 OS_ASSERT(irmLoc != m_idfReferencesMap.end());
2124 auto loc = irmLoc->second.find(handle);
2125 OS_ASSERT(loc != irmLoc->second.end());
2126 irmLoc->second.erase(loc);
2127 // erase entry if set is empty
2128 if (irmLoc->second.empty()) {
2129 m_idfReferencesMap.erase(irmLoc);
2130 }
2131 }
2132
2133 // IddObjectTypeMap
2134 auto iotmLoc = m_iddObjectTypeMap.find(objectImplPtr->iddObject().type());
2135 OS_ASSERT(iotmLoc != m_iddObjectTypeMap.end());
2136 auto loc = iotmLoc->second.find(handle);
2137 OS_ASSERT(loc != iotmLoc->second.end());
2138 iotmLoc->second.erase(loc);
2139 // erase entry if set is empty
2140 if (iotmLoc->second.empty()) {
2141 m_iddObjectTypeMap.erase(iotmLoc);
2142 }

Callers

nothing calls this directly

Calls 14

getReversePointersMethod · 0.80
iddObjectMethod · 0.80
referencesMethod · 0.80
isDirectOrderMethod · 0.80
getObjectFunction · 0.70
objectListFieldsMethod · 0.45
setPointerMethod · 0.45
push_backMethod · 0.45
nameMethod · 0.45
findMethod · 0.45
endMethod · 0.45
eraseMethod · 0.45

Tested by

no test coverage detected