| 362 | } |
| 363 | |
| 364 | std::vector<ModelObject> AirLoopHVACOutdoorAirSystem_Impl::reliefComponents(openstudio::IddObjectType type) const { |
| 365 | std::vector<ModelObject> modelObjects; |
| 366 | modelObjects.reserve(10); // Abritrary, but it wouldn't be common to have more objects than that |
| 367 | |
| 368 | OptionalModelObject modelObject = this->reliefAirModelObject(); |
| 369 | |
| 370 | while (modelObject) { |
| 371 | auto [ok, mo_] = getOutletNodeForComponent(*modelObject); |
| 372 | if (!ok) { |
| 373 | LOG_AND_THROW("For " << briefDescription() << ", unexpected reliefComponent found: " << modelObject->briefDescription()); |
| 374 | } |
| 375 | modelObjects.emplace_back(std::move(*modelObject)); |
| 376 | modelObject = mo_; |
| 377 | } |
| 378 | |
| 379 | if (type != IddObjectType::Catchall) { |
| 380 | modelObjects.erase( |
| 381 | std::remove_if(modelObjects.begin(), modelObjects.end(), [&](const auto& mo) -> bool { return mo.iddObjectType() != type; }), |
| 382 | modelObjects.end()); |
| 383 | } |
| 384 | return modelObjects; |
| 385 | } |
| 386 | |
| 387 | boost::optional<Node> AirLoopHVACOutdoorAirSystem_Impl::outboardOANode() const { |
| 388 | auto modelObjects = this->oaComponents(); |