| 590 | } |
| 591 | |
| 592 | std::vector<int> ScheduleRuleset_Impl::getActiveRuleIndices(const openstudio::Date& startDate, const openstudio::Date& endDate) const { |
| 593 | |
| 594 | // need to check or adjust assumed base year on input date? |
| 595 | |
| 596 | // populate dates to check |
| 597 | std::vector<openstudio::Date> dates; |
| 598 | if (startDate <= endDate) { |
| 599 | openstudio::Date date = startDate; |
| 600 | while (date <= endDate) { |
| 601 | dates.push_back(date); |
| 602 | date += Time(1); |
| 603 | } |
| 604 | } else { |
| 605 | openstudio::Date date = startDate; |
| 606 | openstudio::Date endOfYear(MonthOfYear::Dec, 31); |
| 607 | while (date <= endOfYear) { |
| 608 | dates.push_back(date); |
| 609 | date += Time(1); |
| 610 | } |
| 611 | date = openstudio::Date(MonthOfYear::Jan, 1); |
| 612 | while (date <= endDate) { |
| 613 | dates.push_back(date); |
| 614 | date += Time(1); |
| 615 | } |
| 616 | } |
| 617 | |
| 618 | unsigned numDates = dates.size(); |
| 619 | |
| 620 | // check if each rule contains each date |
| 621 | std::vector<ScheduleRule> scheduleRules = this->scheduleRules(); |
| 622 | unsigned numRules = scheduleRules.size(); |
| 623 | std::vector<std::vector<bool>> test; |
| 624 | for (unsigned i = 0; i < numRules; ++i) { |
| 625 | test.push_back(scheduleRules[i].containsDates(dates)); |
| 626 | } |
| 627 | |
| 628 | // now create result |
| 629 | std::vector<int> result(numDates, -1); |
| 630 | for (unsigned j = 0; j < numDates; ++j) { |
| 631 | for (unsigned i = 0; i < numRules; ++i) { |
| 632 | if (test[i][j]) { |
| 633 | result[j] = i; |
| 634 | break; |
| 635 | } |
| 636 | } |
| 637 | } |
| 638 | |
| 639 | return result; |
| 640 | } |
| 641 | |
| 642 | std::vector<ScheduleDay> ScheduleRuleset_Impl::getDaySchedules(const openstudio::Date& startDate, const openstudio::Date& endDate) const { |
| 643 | std::vector<ScheduleDay> result; |