bool LayeredConstruction_Impl::insertLayer(unsigned layerIndex, const Material& material) { OS_ASSERT(material.model() == model()); layerIndex = mf_clearNullLayers(layerIndex); unsigned n = numLayers(); MaterialVector layers = this->layers(); MaterialVector::iterator layersBegin = layers.begin(); MaterialVector::iterator layersEnd = layers.end(); MaterialVector::iterator insertAtIt = layersBegin; while ((static_cast<unsigned>(insertAtIt - layersBegin) < layerIndex) && (insertAtIt != layersEnd)) { ++insertAtIt; } layers.insert(insertAtIt, material); OS_ASSERT(layers.size() == ++n); if ((model().strictnessLevel() < StrictnessLevel::Final) || LayeredConstruction::layersAreValid(layers)) { IdfExtensibleGroup idfGroup = insertExtensibleGroup(layerIndex,StringVector()); OS_ASSERT(!idfGroup.empty()); ModelExtensibleGroup group = idfGroup.cast<ModelExtensibleGroup>(); bool ok = group.setPointer(0,material.handle()); OS_ASSERT(ok); return true; } return false; }
bool UtilityCost_Computation_Impl::setComputeStep(unsigned index, const std::string& str) { IdfExtensibleGroup eg = getExtensibleGroup(index); if (!eg.empty()) { return eg.setString(OS_UtilityCost_ComputationExtensibleFields::ComputeStep,str); } else { StringVector values(1u,str); return !insertExtensibleGroup(index,values).empty(); } OS_ASSERT(false); return false; }
bool UtilityCost_Charge_Block_Impl::setBlockCostPerUnitValueOrVariableName(unsigned index, const std::string& str) { IdfExtensibleGroup eg = getExtensibleGroup(index); if (!eg.empty()) { return eg.setString(OS_UtilityCost_Charge_BlockExtensibleFields::BlockCostperUnitValueorVariableName,str); } else { StringVector values(2u); values[OS_UtilityCost_Charge_BlockExtensibleFields::BlockCostperUnitValueorVariableName] = str; return !insertExtensibleGroup(index,values).empty(); } OS_ASSERT(false); return false; }
bool EnergyManagementSystemProgramCallingManager_Impl::setProgram(const EnergyManagementSystemProgram& program, unsigned index) { //add program to {index} of vector of programs bool result = false; auto groups = extensibleGroups(); unsigned sizeOfGroup = numExtensibleGroups(); if (index <= sizeOfGroup) { IdfExtensibleGroup idfGroup = insertExtensibleGroup(index, StringVector()); OS_ASSERT(!idfGroup.empty()); ModelExtensibleGroup group = idfGroup.cast<ModelExtensibleGroup>(); result = group.setPointer(0, program.handle()); } return result; }
bool LifeCycleCostUsePriceEscalation_Impl::setYearEscalation(unsigned index, double num) { IdfExtensibleGroup eg = getExtensibleGroup(index); if (!eg.empty()) { return eg.setDouble(OS_LifeCycleCost_UsePriceEscalationExtensibleFields::YearEscalation,num); } else { StringVector values(1u); eg = insertExtensibleGroup(index,values); if (!eg.empty()) { return eg.setDouble(OS_LifeCycleCost_UsePriceEscalationExtensibleFields::YearEscalation,num); } } return false; }
bool ScheduleDay_Impl::addValue(const openstudio::Time& untilTime, double value) { if (untilTime.totalMinutes() <= 0.5 || untilTime.totalDays() > 1.0) { return false; } int untilHours = untilTime.hours() + 24*untilTime.days(); int untilMinutes = untilTime.minutes() + floor((untilTime.seconds()/60.0) + 0.5); if (untilMinutes >= 60){ untilHours += 1; untilMinutes += -60; } // use set to determine whether to overwrite or insert, and where std::set<openstudio::Time> times; std::pair<std::set<openstudio::Time>::const_iterator,bool> insertResult; for (const openstudio::Time& time : this->times()) { insertResult = times.insert(time); OS_ASSERT(insertResult.second); } insertResult = times.insert(untilTime); unsigned index = std::distance<std::set<openstudio::Time>::const_iterator>(times.begin(),insertResult.first); OS_ASSERT(index <= numExtensibleGroups()); bool result(true); if (insertResult.second) { // new time--insert an extensible group std::vector<std::string> groupValues; groupValues.push_back(boost::lexical_cast<std::string>(untilHours)); groupValues.push_back(boost::lexical_cast<std::string>(untilMinutes)); groupValues.push_back(toString(value)); IdfExtensibleGroup group = insertExtensibleGroup(index, groupValues); OS_ASSERT(!group.empty()); } else { // time already exists, overwrite value IdfExtensibleGroup group = getExtensibleGroup(index); result = group.setDouble(OS_Schedule_DayExtensibleFields::ValueUntilTime,value); } return result; }